From 27107e6b0ea7345be8a968b75a80a5668e6486f3 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Mon, 21 Aug 2017 18:41:16 +0300 Subject: [PATCH] v4 base refactoring --- .editorconfig | 4 +- .eslintrc.js | 12 + .jshintrc | 36 - dist/css/swiper.css | 575 --- dist/css/swiper.min.css | 15 - dist/js/maps/swiper.jquery.min.js.map | 1 - dist/js/maps/swiper.jquery.umd.min.js.map | 1 - dist/js/maps/swiper.min.js.map | 1 - dist/js/swiper.jquery.js | 4688 ------------------ dist/js/swiper.jquery.min.js | 18 - dist/js/swiper.jquery.umd.js | 4677 ------------------ dist/js/swiper.jquery.umd.min.js | 18 - dist/js/swiper.js | 5354 --------------------- dist/js/swiper.min.js | 19 - gulpfile.js | 424 +- package.json | 42 +- scripts/banner.js | 21 + scripts/build-js.js | 112 + scripts/build-less.js | 57 + scripts/config.js | 1 + scripts/gulpfile.js | 59 + src/modules/browser/browser.js | 11 + src/modules/core/core-class.js | 51 + src/modules/core/core.less | 0 src/modules/device/device.js | 11 + src/modules/keyboard/keyboard.js | 101 + src/modules/support/support.js | 11 + src/swiper.js | 19 + src/swiper.less | 1 + src/utils/browser.js | 24 + src/utils/class.js | 154 + src/utils/device.js | 85 + src/utils/support.js | 45 + src/utils/utils.js | 113 + 34 files changed, 919 insertions(+), 15842 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .jshintrc delete mode 100644 dist/css/swiper.css delete mode 100644 dist/css/swiper.min.css delete mode 100755 dist/js/maps/swiper.jquery.min.js.map delete mode 100755 dist/js/maps/swiper.jquery.umd.min.js.map delete mode 100755 dist/js/maps/swiper.min.js.map delete mode 100644 dist/js/swiper.jquery.js delete mode 100644 dist/js/swiper.jquery.min.js delete mode 100644 dist/js/swiper.jquery.umd.js delete mode 100644 dist/js/swiper.jquery.umd.min.js delete mode 100644 dist/js/swiper.js delete mode 100644 dist/js/swiper.min.js create mode 100644 scripts/banner.js create mode 100644 scripts/build-js.js create mode 100644 scripts/build-less.js create mode 100644 scripts/config.js create mode 100644 scripts/gulpfile.js create mode 100644 src/modules/browser/browser.js create mode 100644 src/modules/core/core-class.js create mode 100644 src/modules/core/core.less create mode 100644 src/modules/device/device.js create mode 100644 src/modules/keyboard/keyboard.js create mode 100644 src/modules/support/support.js create mode 100644 src/swiper.js create mode 100644 src/swiper.less create mode 100644 src/utils/browser.js create mode 100644 src/utils/class.js create mode 100644 src/utils/device.js create mode 100644 src/utils/support.js create mode 100644 src/utils/utils.js diff --git a/.editorconfig b/.editorconfig index edb33caf8..c6c8b3621 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,8 +2,8 @@ root = true [*] indent_style = space -indent_size = 4 +indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true -insert_final_newline = true \ No newline at end of file +insert_final_newline = true diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..716de857a --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,12 @@ +module.exports = { + "extends": "airbnb-base", + "plugins": [ + "import" + ], + "globals": { + "window": true, + "document": true, + "Modernizr": true, + "DocumentTouch": true + } +}; diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index f221fe516..000000000 --- a/.jshintrc +++ /dev/null @@ -1,36 +0,0 @@ -{ - "node" : true, - "browser" : true, - "esnext" : true, - "bitwise" : false, - "curly" : false, - "eqeqeq" : true, - "eqnull" : true, - "immed" : true, - "latedef" : true, - "newcap" : true, - "noarg" : true, - "undef" : true, - "strict" : true, - "smarttabs" : true, - "quotmark" : "single", - "indent" : 4, - "globals":{ - "document": true, - "define": true, - "Swiper": true, - "window": true, - "HTMLElement": true, - "XMLSerializer": true, - "Image": true, - "WheelEvent": true, - "navigator": true, - "DocumentTouch": true, - "Modernizr": true, - "WebKitCSSMatrix": true, - "s": true, - "jQuery": true, - "Dom7": true, - "$": true - } -} diff --git a/dist/css/swiper.css b/dist/css/swiper.css deleted file mode 100644 index a03a1e06d..000000000 --- a/dist/css/swiper.css +++ /dev/null @@ -1,575 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -.swiper-container { - margin-left: auto; - margin-right: auto; - position: relative; - overflow: hidden; - /* Fix of Webkit flickering */ - z-index: 1; -} -.swiper-container-no-flexbox .swiper-slide { - float: left; -} -.swiper-container-vertical > .swiper-wrapper { - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; - -webkit-flex-direction: column; - flex-direction: column; -} -.swiper-wrapper { - position: relative; - width: 100%; - height: 100%; - z-index: 1; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-transition-property: -webkit-transform; - -moz-transition-property: -moz-transform; - -o-transition-property: -o-transform; - -ms-transition-property: -ms-transform; - transition-property: transform; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -.swiper-container-android .swiper-slide, -.swiper-wrapper { - -webkit-transform: translate3d(0px, 0, 0); - -moz-transform: translate3d(0px, 0, 0); - -o-transform: translate(0px, 0px); - -ms-transform: translate3d(0px, 0, 0); - transform: translate3d(0px, 0, 0); -} -.swiper-container-multirow > .swiper-wrapper { - -webkit-box-lines: multiple; - -moz-box-lines: multiple; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; -} -.swiper-container-free-mode > .swiper-wrapper { - -webkit-transition-timing-function: ease-out; - -moz-transition-timing-function: ease-out; - -ms-transition-timing-function: ease-out; - -o-transition-timing-function: ease-out; - transition-timing-function: ease-out; - margin: 0 auto; -} -.swiper-slide { - -webkit-flex-shrink: 0; - -ms-flex: 0 0 auto; - flex-shrink: 0; - width: 100%; - height: 100%; - position: relative; -} -/* Auto Height */ -.swiper-container-autoheight, -.swiper-container-autoheight .swiper-slide { - height: auto; -} -.swiper-container-autoheight .swiper-wrapper { - -webkit-box-align: start; - -ms-flex-align: start; - -webkit-align-items: flex-start; - align-items: flex-start; - -webkit-transition-property: -webkit-transform, height; - -moz-transition-property: -moz-transform; - -o-transition-property: -o-transform; - -ms-transition-property: -ms-transform; - transition-property: transform, height; -} -/* a11y */ -.swiper-container .swiper-notification { - position: absolute; - left: 0; - top: 0; - pointer-events: none; - opacity: 0; - z-index: -1000; -} -/* IE10 Windows Phone 8 Fixes */ -.swiper-wp8-horizontal { - -ms-touch-action: pan-y; - touch-action: pan-y; -} -.swiper-wp8-vertical { - -ms-touch-action: pan-x; - touch-action: pan-x; -} -/* Arrows */ -.swiper-button-prev, -.swiper-button-next { - position: absolute; - top: 50%; - width: 27px; - height: 44px; - margin-top: -22px; - z-index: 10; - cursor: pointer; - -moz-background-size: 27px 44px; - -webkit-background-size: 27px 44px; - background-size: 27px 44px; - background-position: center; - background-repeat: no-repeat; -} -.swiper-button-prev.swiper-button-disabled, -.swiper-button-next.swiper-button-disabled { - opacity: 0.35; - cursor: auto; - pointer-events: none; -} -.swiper-button-prev, -.swiper-container-rtl .swiper-button-next { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); - left: 10px; - right: auto; -} -.swiper-button-prev.swiper-button-black, -.swiper-container-rtl .swiper-button-next.swiper-button-black { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-prev.swiper-button-white, -.swiper-container-rtl .swiper-button-next.swiper-button-white { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-next, -.swiper-container-rtl .swiper-button-prev { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); - right: 10px; - left: auto; -} -.swiper-button-next.swiper-button-black, -.swiper-container-rtl .swiper-button-prev.swiper-button-black { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-next.swiper-button-white, -.swiper-container-rtl .swiper-button-prev.swiper-button-white { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); -} -/* Pagination Styles */ -.swiper-pagination { - position: absolute; - text-align: center; - -webkit-transition: 300ms; - -moz-transition: 300ms; - -o-transition: 300ms; - transition: 300ms; - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - z-index: 10; -} -.swiper-pagination.swiper-pagination-hidden { - opacity: 0; -} -/* Common Styles */ -.swiper-pagination-fraction, -.swiper-pagination-custom, -.swiper-container-horizontal > .swiper-pagination-bullets { - bottom: 10px; - left: 0; - width: 100%; -} -/* Bullets */ -.swiper-pagination-bullet { - width: 8px; - height: 8px; - display: inline-block; - border-radius: 100%; - background: #000; - opacity: 0.2; -} -button.swiper-pagination-bullet { - border: none; - margin: 0; - padding: 0; - box-shadow: none; - -moz-appearance: none; - -ms-appearance: none; - -webkit-appearance: none; - appearance: none; -} -.swiper-pagination-clickable .swiper-pagination-bullet { - cursor: pointer; -} -.swiper-pagination-white .swiper-pagination-bullet { - background: #fff; -} -.swiper-pagination-bullet-active { - opacity: 1; - background: #007aff; -} -.swiper-pagination-white .swiper-pagination-bullet-active { - background: #fff; -} -.swiper-pagination-black .swiper-pagination-bullet-active { - background: #000; -} -.swiper-container-vertical > .swiper-pagination-bullets { - right: 10px; - top: 50%; - -webkit-transform: translate3d(0px, -50%, 0); - -moz-transform: translate3d(0px, -50%, 0); - -o-transform: translate(0px, -50%); - -ms-transform: translate3d(0px, -50%, 0); - transform: translate3d(0px, -50%, 0); -} -.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { - margin: 5px 0; - display: block; -} -.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { - margin: 0 5px; -} -/* Progress */ -.swiper-pagination-progress { - background: rgba(0, 0, 0, 0.25); - position: absolute; -} -.swiper-pagination-progress .swiper-pagination-progressbar { - background: #007aff; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - -webkit-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - -webkit-transform-origin: left top; - -moz-transform-origin: left top; - -ms-transform-origin: left top; - -o-transform-origin: left top; - transform-origin: left top; -} -.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar { - -webkit-transform-origin: right top; - -moz-transform-origin: right top; - -ms-transform-origin: right top; - -o-transform-origin: right top; - transform-origin: right top; -} -.swiper-container-horizontal > .swiper-pagination-progress { - width: 100%; - height: 4px; - left: 0; - top: 0; -} -.swiper-container-vertical > .swiper-pagination-progress { - width: 4px; - height: 100%; - left: 0; - top: 0; -} -.swiper-pagination-progress.swiper-pagination-white { - background: rgba(255, 255, 255, 0.5); -} -.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar { - background: #fff; -} -.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar { - background: #000; -} -/* 3D Container */ -.swiper-container-3d { - -webkit-perspective: 1200px; - -moz-perspective: 1200px; - -o-perspective: 1200px; - perspective: 1200px; -} -.swiper-container-3d .swiper-wrapper, -.swiper-container-3d .swiper-slide, -.swiper-container-3d .swiper-slide-shadow-left, -.swiper-container-3d .swiper-slide-shadow-right, -.swiper-container-3d .swiper-slide-shadow-top, -.swiper-container-3d .swiper-slide-shadow-bottom, -.swiper-container-3d .swiper-cube-shadow { - -webkit-transform-style: preserve-3d; - -moz-transform-style: preserve-3d; - -ms-transform-style: preserve-3d; - transform-style: preserve-3d; -} -.swiper-container-3d .swiper-slide-shadow-left, -.swiper-container-3d .swiper-slide-shadow-right, -.swiper-container-3d .swiper-slide-shadow-top, -.swiper-container-3d .swiper-slide-shadow-bottom { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - pointer-events: none; - z-index: 10; -} -.swiper-container-3d .swiper-slide-shadow-left { - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - /* Safari 4+, Chrome */ - background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Chrome 10+, Safari 5.1+, iOS 5+ */ - background-image: -moz-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 3.6-15 */ - background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Opera 11.10-12.00 */ - background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 16+, IE10, Opera 12.50+ */ -} -.swiper-container-3d .swiper-slide-shadow-right { - background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - /* Safari 4+, Chrome */ - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Chrome 10+, Safari 5.1+, iOS 5+ */ - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 3.6-15 */ - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Opera 11.10-12.00 */ - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 16+, IE10, Opera 12.50+ */ -} -.swiper-container-3d .swiper-slide-shadow-top { - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - /* Safari 4+, Chrome */ - background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Chrome 10+, Safari 5.1+, iOS 5+ */ - background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 3.6-15 */ - background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Opera 11.10-12.00 */ - background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 16+, IE10, Opera 12.50+ */ -} -.swiper-container-3d .swiper-slide-shadow-bottom { - background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - /* Safari 4+, Chrome */ - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Chrome 10+, Safari 5.1+, iOS 5+ */ - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 3.6-15 */ - background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Opera 11.10-12.00 */ - background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - /* Firefox 16+, IE10, Opera 12.50+ */ -} -/* Coverflow */ -.swiper-container-coverflow .swiper-wrapper, -.swiper-container-flip .swiper-wrapper { - /* Windows 8 IE 10 fix */ - -ms-perspective: 1200px; -} -/* Cube + Flip */ -.swiper-container-cube, -.swiper-container-flip { - overflow: visible; -} -.swiper-container-cube .swiper-slide, -.swiper-container-flip .swiper-slide { - pointer-events: none; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - z-index: 1; -} -.swiper-container-cube .swiper-slide .swiper-slide, -.swiper-container-flip .swiper-slide .swiper-slide { - pointer-events: none; -} -.swiper-container-cube .swiper-slide-active, -.swiper-container-flip .swiper-slide-active, -.swiper-container-cube .swiper-slide-active .swiper-slide-active, -.swiper-container-flip .swiper-slide-active .swiper-slide-active { - pointer-events: auto; -} -.swiper-container-cube .swiper-slide-shadow-top, -.swiper-container-flip .swiper-slide-shadow-top, -.swiper-container-cube .swiper-slide-shadow-bottom, -.swiper-container-flip .swiper-slide-shadow-bottom, -.swiper-container-cube .swiper-slide-shadow-left, -.swiper-container-flip .swiper-slide-shadow-left, -.swiper-container-cube .swiper-slide-shadow-right, -.swiper-container-flip .swiper-slide-shadow-right { - z-index: 0; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; -} -/* Cube */ -.swiper-container-cube .swiper-slide { - visibility: hidden; - -webkit-transform-origin: 0 0; - -moz-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - width: 100%; - height: 100%; -} -.swiper-container-cube.swiper-container-rtl .swiper-slide { - -webkit-transform-origin: 100% 0; - -moz-transform-origin: 100% 0; - -ms-transform-origin: 100% 0; - transform-origin: 100% 0; -} -.swiper-container-cube .swiper-slide-active, -.swiper-container-cube .swiper-slide-next, -.swiper-container-cube .swiper-slide-prev, -.swiper-container-cube .swiper-slide-next + .swiper-slide { - pointer-events: auto; - visibility: visible; -} -.swiper-container-cube .swiper-cube-shadow { - position: absolute; - left: 0; - bottom: 0px; - width: 100%; - height: 100%; - background: #000; - opacity: 0.6; - -webkit-filter: blur(50px); - filter: blur(50px); - z-index: 0; -} -/* Fade */ -.swiper-container-fade.swiper-container-free-mode .swiper-slide { - -webkit-transition-timing-function: ease-out; - -moz-transition-timing-function: ease-out; - -ms-transition-timing-function: ease-out; - -o-transition-timing-function: ease-out; - transition-timing-function: ease-out; -} -.swiper-container-fade .swiper-slide { - pointer-events: none; - -webkit-transition-property: opacity; - -moz-transition-property: opacity; - -o-transition-property: opacity; - transition-property: opacity; -} -.swiper-container-fade .swiper-slide .swiper-slide { - pointer-events: none; -} -.swiper-container-fade .swiper-slide-active, -.swiper-container-fade .swiper-slide-active .swiper-slide-active { - pointer-events: auto; -} -.swiper-zoom-container { - width: 100%; - height: 100%; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-box-pack: center; - -moz-box-pack: center; - -ms-flex-pack: center; - -webkit-justify-content: center; - justify-content: center; - -webkit-box-align: center; - -moz-box-align: center; - -ms-flex-align: center; - -webkit-align-items: center; - align-items: center; - text-align: center; -} -.swiper-zoom-container > img, -.swiper-zoom-container > svg, -.swiper-zoom-container > canvas { - max-width: 100%; - max-height: 100%; - object-fit: contain; -} -/* Scrollbar */ -.swiper-scrollbar { - border-radius: 10px; - position: relative; - -ms-touch-action: none; - background: rgba(0, 0, 0, 0.1); -} -.swiper-container-horizontal > .swiper-scrollbar { - position: absolute; - left: 1%; - bottom: 3px; - z-index: 50; - height: 5px; - width: 98%; -} -.swiper-container-vertical > .swiper-scrollbar { - position: absolute; - right: 3px; - top: 1%; - z-index: 50; - width: 5px; - height: 98%; -} -.swiper-scrollbar-drag { - height: 100%; - width: 100%; - position: relative; - background: rgba(0, 0, 0, 0.5); - border-radius: 10px; - left: 0; - top: 0; -} -.swiper-scrollbar-cursor-drag { - cursor: move; -} -/* Preloader */ -.swiper-lazy-preloader { - width: 42px; - height: 42px; - position: absolute; - left: 50%; - top: 50%; - margin-left: -21px; - margin-top: -21px; - z-index: 10; - -webkit-transform-origin: 50%; - -moz-transform-origin: 50%; - transform-origin: 50%; - -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; - -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite; - animation: swiper-preloader-spin 1s steps(12, end) infinite; -} -.swiper-lazy-preloader:after { - display: block; - content: ""; - width: 100%; - height: 100%; - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); - background-position: 50%; - -webkit-background-size: 100%; - background-size: 100%; - background-repeat: no-repeat; -} -.swiper-lazy-preloader-white:after { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -@-webkit-keyframes swiper-preloader-spin { - 100% { - -webkit-transform: rotate(360deg); - } -} -@keyframes swiper-preloader-spin { - 100% { - transform: rotate(360deg); - } -} diff --git a/dist/css/swiper.min.css b/dist/css/swiper.min.css deleted file mode 100644 index b222bea4d..000000000 --- a/dist/css/swiper.min.css +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}} \ No newline at end of file diff --git a/dist/js/maps/swiper.jquery.min.js.map b/dist/js/maps/swiper.jquery.min.js.map deleted file mode 100755 index be5eec19b..000000000 --- a/dist/js/maps/swiper.jquery.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["swiper.jquery.js"],"names":["$","Swiper","container","params","round","a","Math","floor","autoplay","autoplayDelay","s","activeSlide","slides","eq","activeIndex","attr","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","each","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","slideClass","slideActiveClass","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","normalizeWheel","event","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMousewheel","delta","rtlFactor","data","mousewheelForceToAxis","abs","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","mousewheel","timeout","slideReset","lazyLoading","lazy","load","autoplayDisableOnInteraction","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","this","defaults","direction","touchEventsTarget","initialSlide","speed","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","zoom","zoomMax","zoomMin","zoomToggle","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","mousewheelEventsTarged","hashnav","hashnavWatchState","history","replaceState","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","touchReleaseOnEdges","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","normalizeSlideIndex","swipeHandler","noSwiping","noSwipingClass","passiveListeners","containerModifierClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","paginationClickableClass","paginationModifierClass","lazyLoadingClass","lazyStatusLoadingClass","lazyStatusLoadedClass","lazyPreloaderClass","notificationClass","preloaderClass","zoomContainerClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","swiper","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","unsetGrabCursor","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","setGrabCursor","unlockSwipeToPrev","unlockSwipes","moving","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","sizes","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","activeSlides","newHeight","ceil","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","max","slideSize","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","currentSlidesPerView","j","spv","breakLoop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","translatesDiff","newActiveIndex","snapIndex","previousIndex","updateRealIndex","realIndex","hasClass","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","controller","spline","slideTo","forceUpdatePagination","onBeforeResize","slideChangedBySlideTo","onAfterResize","touchEventsDesktop","start","move","end","navigator","pointerEnabled","msPointerEnabled","touchEvents","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","passiveListener","passive","capture","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","lteIE9","setHistory","setHash","clientLeft","_slidePrev","disableTouchControl","enableTouchControl","duration","byController","effects","setTransition","x","y","setTranslate","getTranslate","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","draggableEvents","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","binarySearch","guess","array","val","lastIndex","i1","i3","interpolate","x2","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","Array","isArray","setControlledTransition","onHashCange","newHash","location","hash","initialized","init","slideHash","destroy","pushState","paths","getPathValues","key","value","scrollToSlide","addEventListener","setHistoryPopState","pathArray","pathname","slice","slugify","includes","slideHistory","disableKeyboardControl","enableKeyboardControl","userAgent","isSupported","element","createElement","setAttribute","implementation","hasFeature","disableMousewheelControl","enableMousewheelControl","parallaxDuration","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrap","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","sqrt","onGestureStart","z","gestures","scaleStart","parent","onGestureChange","scaleMove","onGestureEnd","changedTouches","os","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","toggleZoom","touchX","touchY","offsetX","offsetY","diffX","diffY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","hashnavReplaceState","cleanupStyles","deleteInstance","removeEventListener","prototype","ua","test","arr","Object","apply","ieTouch","msMaxTouchPoints","maxTouchPoints","div","innerHTML","getElementsByTagName","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","styles","supportsPassive","opts","defineProperty","get","swiperDomPlugins","lib","fn","firstInstance","domLib","fireCallBack","call","events","dom","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","includeMargins","module","exports","define","amd"],"mappings":"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","file":"../swiper.jquery.min.js","sourcesContent":["/**\n * Swiper 3.4.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2017, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: March 10, 2017\n */\n(function () {\n 'use strict';\n var $;\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n \n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 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', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Zoom\n zoom: false,\n zoomMax: 3,\n zoomMin: 1,\n zoomToggle: true,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n mousewheelEventsTarged: 'container',\n // Hash Navigation\n hashnav: false,\n hashnavWatchState: false,\n // History\n history: false,\n // Commong Nav State\n replaceState: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\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 onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\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 // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n normalizeSlideIndex: true,\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\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 bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n paginationClickableClass: 'swiper-pagination-clickable', // NEW\n paginationModifierClass: 'swiper-pagination-', // NEW\n lazyLoadingClass: 'swiper-lazy',\n lazyStatusLoadingClass: 'swiper-lazy-loading',\n lazyStatusLoadedClass: 'swiper-lazy-loaded',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n notificationClass: 'swiper-notification',\n preloaderClass: 'preloader',\n zoomContainerClass: 'swiper-zoom-container',\n \n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\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 // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onBeforeResize: function (swiper)\n onAfterResize: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n onKeyPress: function (swiper, keyCode)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push(s.params.containerModifierClass + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push(s.params.containerModifierClass + 'free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push(s.params.containerModifierClass + 'no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push(s.params.containerModifierClass + 'autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Max resistance when touchReleaseOnEdges\n if (s.params.touchReleaseOnEdges) {\n s.params.resistanceRatio = 0;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push(s.params.containerModifierClass + '3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push(s.params.containerModifierClass + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push(s.params.containerModifierClass + 'rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push(s.params.containerModifierClass + 'multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push(s.params.containerModifierClass + 'android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n if (s.params.allowSwipeToNext === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n if (s.params.grabCursor) s.unsetGrabCursor();\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n if (s.params.allowSwipeToNext === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n if (s.params.grabCursor) s.setGrabCursor();\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n s.setGrabCursor = function(moving) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n s.container[0].style.cursor = moving ? 'grabbing': 'grab';\n };\n s.unsetGrabCursor = function () {\n s.container[0].style.cursor = '';\n };\n if (s.params.grabCursor) {\n s.setGrabCursor();\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n var autoplayDelay = s.params.autoplay;\n var activeSlide = s.slides.eq(s.activeIndex);\n if (activeSlide.attr('data-swiper-autoplay')) {\n autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;\n }\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, autoplayDelay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n var activeSlides = [];\n var newHeight = 0;\n var i;\n \n // Find slides currently in view\n if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {\n var index = s.activeIndex + i;\n if(index > s.slides.length) break;\n activeSlides.push(s.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(s.slides.eq(s.activeIndex)[0]);\n }\n \n // Find new height from heighest slide in view\n for (i = 0; i < activeSlides.length; i++) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n \n // Update Height\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .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 }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css(\n 'margin-' + (s.isHorizontal() ? 'top' : 'left'),\n (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Dynamic Slides Per View\n ===========================*/\n s.currentSlidesPerView = function () {\n var spv = 1, i, j;\n if (s.params.centeredSlides) {\n var size = s.slides[s.activeIndex].swiperSlideSize;\n var breakLoop;\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slides[i] && !breakLoop) {\n size += s.slides[i].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n for (j = s.activeIndex - 1; j >= 0; j--) {\n if (s.slides[j] && !breakLoop) {\n size += s.slides[j].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n }\n else {\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {\n spv++;\n }\n }\n }\n return spv;\n };\n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n }\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n s.updateRealIndex();\n };\n s.updateRealIndex = function(){\n s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n nextSlide = s.slides.eq(0);\n nextSlide.addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n prevSlide = s.slides.eq(-1);\n prevSlide.addClass(s.params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n if (!s) return;\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n var newTranslate;\n function forceSetTranslate() {\n var translate = s.rtl ? -s.translate : s.translate;\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n if (s.params.onBeforeResize) s.params.onBeforeResize(s);\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n if (s.params.onAfterResize) s.params.onAfterResize(s);\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};\n if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};\n else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides,\n slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button, video',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {\n if (!s.isHorizontal()) {\n // Vertical\n if (\n (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||\n (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n else {\n if (\n (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||\n (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle;\n if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {\n isScrolling = false;\n }\n else {\n touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined') {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(true);\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n \n if (!s.params.followFinger) return;\n \n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(false);\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\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 if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n s.updateRealIndex();\n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0 || s.browser.lteIE9) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.history && s.history) {\n s.history.setHistory(s.params.history, s.activeIndex);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n s.disableTouchControl = function () {\n s.params.onlyExternal = true;\n return true;\n };\n s.enableTouchControl = function () {\n s.params.onlyExternal = false;\n return true;\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\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 (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\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 \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\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 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\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 \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n \n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');\n if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass(s.params.lazyStatusLoadingClass);\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset'),\n sizes = _img.attr('data-sizes');\n s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (sizes) {\n _img.attr('sizes', sizes);\n _img.removeAttr('data-sizes');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);\n slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n var slidesPerView = s.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n draggableEvents: (function () {\n if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;\n else return s.touchEvents;\n })(),\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(sb.draggableEvents.start, sb.dragStart);\n $(target).on(sb.draggableEvents.move, sb.dragMove);\n $(target).on(sb.draggableEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(sb.draggableEvents.start, sb.dragStart);\n $(target).off(sb.draggableEvents.move, sb.dragMove);\n $(target).off(sb.draggableEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n \n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // 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 var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\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 translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // 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 controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n \n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n onHashCange: function (e, a) {\n var newHash = document.location.hash.replace('#', '');\n var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash=\"' + (newHash) + '\"]').index());\n }\n },\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n $(window)[action]('hashchange', s.hashnav.onHashCange);\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n if (s.params.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));\n } else {\n var slide = s.slides.eq(s.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n }\n },\n init: function () {\n if (!s.params.hashnav || s.params.history) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n }\n if (s.params.hashnavWatchState) s.hashnav.attachEvents();\n },\n destroy: function () {\n if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);\n }\n };\n \n\n /*=========================\n History Api with fallback to Hashnav\n ===========================*/\n s.history = {\n init: function () {\n if (!s.params.history) return;\n if (!window.history || !window.history.pushState) {\n s.params.history = false;\n s.params.hashnav = true;\n return;\n }\n s.history.initialized = true;\n this.paths = this.getPathValues();\n if (!this.paths.key && !this.paths.value) return;\n this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);\n if (!s.params.replaceState) {\n window.addEventListener('popstate', this.setHistoryPopState);\n }\n },\n setHistoryPopState: function() {\n s.history.paths = s.history.getPathValues();\n s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);\n },\n getPathValues: function() {\n var pathArray = window.location.pathname.slice(1).split('/');\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function (key, index) {\n if (!s.history.initialized || !s.params.history) return;\n var slide = s.slides.eq(index);\n var value = this.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = key + '/' + value;\n }\n if (s.params.replaceState) {\n window.history.replaceState(null, null, value);\n } else {\n window.history.pushState(null, null, value);\n }\n },\n slugify: function(text) {\n return text.toString().toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w\\-]+/g, '')\n .replace(/\\-\\-+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function(speed, value, runCallbacks) {\n if (value) {\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHistory = this.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n s.slideTo(0, speed, runCallbacks);\n }\n }\n };\n \n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n s.emit('onKeyPress', s, kc);\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in document;\n \n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n \n if (!isSupported &&\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n \n return isSupported;\n }\n /**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\n function normalizeWheel( /*object*/ event ) /*object*/ {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n \n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n \n // Legacy\n if( 'detail' in event ) {\n sY = event.detail;\n }\n if( 'wheelDelta' in event ) {\n sY = -event.wheelDelta / 120;\n }\n if( 'wheelDeltaY' in event ) {\n sY = -event.wheelDeltaY / 120;\n }\n if( 'wheelDeltaX' in event ) {\n sX = -event.wheelDeltaX / 120;\n }\n \n // side scrolling on FF with DOMMouseScroll\n if( 'axis' in event && event.axis === event.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 event ) {\n pY = event.deltaY;\n }\n if( 'deltaX' in event ) {\n pX = event.deltaX;\n }\n \n if( (pX || pY) && event.deltaMode ) {\n if( event.deltaMode === 1 ) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n \n // Fall-back if spin cannot be determined\n if( pX && !sX ) {\n sX = (pX < 1) ? -1 : 1;\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 if (s.params.mousewheelControl) {\n /**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\n s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?\n 'DOMMouseScroll' :\n isEventSupported() ?\n 'wheel' : 'mousewheel';\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n var data = normalizeWheel( e );\n \n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n else return;\n }\n }\n else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;\n }\n \n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) {\n s.slideNext();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) {\n s.slidePrev();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n // Emit event\n s.emit('onScroll', s, e);\n \n // Stop autoplay\n if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.off(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = false;\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.on(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = true;\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Zoom\n ===========================*/\n s.zoom = {\n // \"Global\" Props\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n slide: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n image: undefined,\n imageWrap: undefined,\n zoomMax: s.params.zoomMax\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 // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function (e) {\n if (e.targetTouches.length < 2) return 1;\n var x1 = e.targetTouches[0].pageX,\n y1 = e.targetTouches[0].pageY,\n x2 = e.targetTouches[1].pageX,\n 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 (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleStart = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.slide || !z.gesture.slide.length) {\n z.gesture.slide = $(this);\n if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;\n if (z.gesture.imageWrap.length === 0) {\n z.gesture.image = undefined;\n return;\n }\n }\n z.gesture.image.transition(0);\n z.isScaling = true;\n },\n onGestureChange: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleMove = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (s.support.gestures) {\n z.scale = e.scale * z.currentScale;\n }\n else {\n z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;\n }\n if (z.scale > z.gesture.zoomMax) {\n z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);\n }\n if (z.scale < s.params.zoomMin) {\n z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);\n }\n z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');\n },\n onGestureEnd: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {\n return;\n }\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);\n z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n z.currentScale = z.scale;\n z.isScaling = false;\n if (z.scale === 1) z.gesture.slide = undefined;\n },\n onTouchStart: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (z.image.isTouched) return;\n if (s.device.os === 'android') e.preventDefault();\n z.image.isTouched = true;\n z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function (e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n s.allowClick = false;\n if (!z.image.isTouched || !z.gesture.slide) return;\n \n if (!z.image.isMoved) {\n z.image.width = z.gesture.image[0].offsetWidth;\n z.image.height = z.gesture.image[0].offsetHeight;\n z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;\n z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;\n z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;\n z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;\n z.gesture.imageWrap.transition(0);\n if (s.rtl) z.image.startX = -z.image.startX;\n if (s.rtl) z.image.startY = -z.image.startY;\n }\n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n \n if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;\n \n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n \n z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (!z.image.isMoved && !z.isScaling) {\n if (s.isHorizontal() &&\n (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||\n (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)\n ) {\n z.image.isTouched = false;\n return;\n }\n else if (!s.isHorizontal() &&\n (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||\n (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)\n ) {\n z.image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n \n z.image.isMoved = true;\n z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;\n z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;\n \n if (z.image.currentX < z.image.minX) {\n z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);\n }\n if (z.image.currentX > z.image.maxX) {\n z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);\n }\n \n if (z.image.currentY < z.image.minY) {\n z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);\n }\n if (z.image.currentY > z.image.maxY) {\n z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);\n }\n \n //Velocity\n if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;\n if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;\n if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();\n z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;\n z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;\n if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;\n if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;\n z.velocity.prevPositionX = z.image.touchesCurrent.x;\n z.velocity.prevPositionY = z.image.touchesCurrent.y;\n z.velocity.prevTime = Date.now();\n \n z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTouchEnd: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (!z.image.isTouched || !z.image.isMoved) {\n z.image.isTouched = false;\n z.image.isMoved = false;\n return;\n }\n z.image.isTouched = false;\n z.image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = z.velocity.x * momentumDurationX;\n var newPositionX = z.image.currentX + momentumDistanceX;\n var momentumDistanceY = z.velocity.y * momentumDurationY;\n var newPositionY = z.image.currentY + momentumDistanceY;\n \n //Fix duration\n if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);\n if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n \n z.image.currentX = newPositionX;\n z.image.currentY = newPositionY;\n \n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);\n z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);\n \n z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTransitionEnd: function (s) {\n var z = s.zoom;\n if (z.gesture.slide && s.previousIndex !== s.activeIndex) {\n z.gesture.image.transform('translate3d(0,0,0) scale(1)');\n z.gesture.imageWrap.transform('translate3d(0,0,0)');\n z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;\n z.scale = z.currentScale = 1;\n }\n },\n // Toggle Zoom\n toggleZoom: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.slide) {\n z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n \n var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;\n \n if (typeof z.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 }\n else {\n touchX = z.image.touchesStart.x;\n touchY = z.image.touchesStart.y;\n }\n \n if (z.scale && z.scale !== 1) {\n // Zoom Out\n z.scale = z.currentScale = 1;\n z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');\n z.gesture.slide = undefined;\n }\n else {\n // Zoom In\n z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;\n if (e) {\n slideWidth = z.gesture.slide[0].offsetWidth;\n slideHeight = z.gesture.slide[0].offsetHeight;\n offsetX = z.gesture.slide.offset().left;\n offsetY = z.gesture.slide.offset().top;\n diffX = offsetX + slideWidth/2 - touchX;\n diffY = offsetY + slideHeight/2 - touchY;\n \n imageWidth = z.gesture.image[0].offsetWidth;\n imageHeight = z.gesture.image[0].offsetHeight;\n scaledWidth = imageWidth * z.scale;\n scaledHeight = imageHeight * z.scale;\n \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 \n translateX = diffX * z.scale;\n translateY = diffY * z.scale;\n \n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n \n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n }\n else {\n translateX = 0;\n translateY = 0;\n }\n z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n }\n },\n // Attach/Detach Events\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n \n if (s.params.zoom) {\n var target = s.slides;\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n // Scale image\n if (s.support.gestures) {\n s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);\n s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);\n s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);\n }\n else if (s.touchEvents.start === 'touchstart') {\n s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);\n s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);\n s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);\n }\n \n // Move image\n s[action]('touchStart', s.zoom.onTouchStart);\n s.slides.each(function (index, slide){\n if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {\n $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);\n }\n });\n s[action]('touchEnd', s.zoom.onTouchEnd);\n \n // Scale Out\n s[action]('transitionEnd', s.zoom.onTransitionEnd);\n if (s.params.zoomToggle) {\n s.on('doubleTap', s.zoom.toggleZoom);\n }\n }\n },\n init: function () {\n s.zoom.attachEvents();\n },\n destroy: function () {\n s.zoom.attachEvents(true);\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n \n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n \n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.zoom && s.zoom) {\n s.zoom.init();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history\n if (s.params.hashnavReplaceState) {\n s.params.replaceState = s.params.hashnavReplaceState;\n }\n if (s.params.history) {\n if (s.history) s.history.init();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n \n // Destroy zoom\n if (s.params.zoom && s.zoom) {\n s.zoom.destroy();\n }\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Delete history popstate\n if (s.params.history && !s.params.replaceState) {\n window.removeEventListener('popstate', s.history.setHistoryPopState);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.destroy();\n }\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),\n lteIE9: (function() {\n // create temporary DIV\n var div = document.createElement('div');\n // add content to tmp DIV which is wrapped into the IE HTML conditional statement\n div.innerHTML = '';\n // return true / false value based on what will browser render\n return div.getElementsByTagName('i').length === 1;\n })()\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = window.navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\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 return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })(),\n \n passiveListener: (function () {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {}\n return supportsPassive;\n })(),\n \n gestures: (function () {\n return 'ongesturestart' in window;\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n \n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n if (!('outerWidth' in domLib.fn)) {\n domLib.fn.outerWidth = function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n };\n }\n }\n \n\n window.Swiper = Swiper;\n})();\n\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n\n//# sourceMappingURL=maps/swiper.jquery.js.map\n"]} \ No newline at end of file diff --git a/dist/js/maps/swiper.jquery.umd.min.js.map b/dist/js/maps/swiper.jquery.umd.min.js.map deleted file mode 100755 index 04299c229..000000000 --- a/dist/js/maps/swiper.jquery.umd.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["swiper.jquery.umd.js"],"names":["root","factory","define","amd","exports","module","require","Swiper","jQuery","this","$","container","params","round","a","Math","floor","autoplay","autoplayDelay","s","activeSlide","slides","eq","activeIndex","attr","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","each","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","slideClass","slideActiveClass","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","normalizeWheel","event","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMousewheel","delta","rtlFactor","data","mousewheelForceToAxis","abs","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","mousewheel","timeout","slideReset","lazyLoading","lazy","load","autoplayDisableOnInteraction","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","zoom","zoomMax","zoomMin","zoomToggle","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","mousewheelEventsTarged","hashnav","hashnavWatchState","history","replaceState","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","touchReleaseOnEdges","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","normalizeSlideIndex","swipeHandler","noSwiping","noSwipingClass","passiveListeners","containerModifierClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","paginationClickableClass","paginationModifierClass","lazyLoadingClass","lazyStatusLoadingClass","lazyStatusLoadedClass","lazyPreloaderClass","notificationClass","preloaderClass","zoomContainerClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","swiper","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","unsetGrabCursor","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","setGrabCursor","unlockSwipeToPrev","unlockSwipes","moving","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","sizes","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","activeSlides","newHeight","ceil","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","max","slideSize","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","currentSlidesPerView","j","spv","breakLoop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","translatesDiff","newActiveIndex","snapIndex","previousIndex","updateRealIndex","realIndex","hasClass","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","controller","spline","slideTo","forceUpdatePagination","onBeforeResize","slideChangedBySlideTo","onAfterResize","touchEventsDesktop","start","move","end","navigator","pointerEnabled","msPointerEnabled","touchEvents","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","passiveListener","passive","capture","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","lteIE9","setHistory","setHash","clientLeft","_slidePrev","disableTouchControl","enableTouchControl","duration","byController","effects","setTransition","x","y","setTranslate","getTranslate","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","draggableEvents","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","binarySearch","guess","array","val","lastIndex","i1","i3","interpolate","x2","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","Array","isArray","setControlledTransition","onHashCange","newHash","location","hash","initialized","init","slideHash","destroy","pushState","paths","getPathValues","key","value","scrollToSlide","addEventListener","setHistoryPopState","pathArray","pathname","slice","slugify","includes","slideHistory","disableKeyboardControl","enableKeyboardControl","userAgent","isSupported","element","createElement","setAttribute","implementation","hasFeature","disableMousewheelControl","enableMousewheelControl","parallaxDuration","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrap","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","sqrt","onGestureStart","z","gestures","scaleStart","parent","onGestureChange","scaleMove","onGestureEnd","changedTouches","os","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","toggleZoom","touchX","touchY","offsetX","offsetY","diffX","diffY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","hashnavReplaceState","cleanupStyles","deleteInstance","removeEventListener","prototype","ua","test","arr","Object","apply","ieTouch","msMaxTouchPoints","maxTouchPoints","div","innerHTML","getElementsByTagName","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","styles","supportsPassive","opts","defineProperty","get","lib","fn","firstInstance","domLib","fireCallBack","call","events","dom","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","includeMargins"],"mappings":";;;;;;;;;;;;;;CAcC,SAAUA,EAAMC,GAChB,YAEsB,mBAAXC,SAAyBA,OAAOC,IAE1CD,QAAQ,UAAWD,GACU,gBAAZG,SAIjBC,OAAOD,QAAUH,EAAQK,QAAQ,WAGjCN,EAAKO,OAASN,EAAQD,EAAKQ,SAE3BC,KAAM,SAAUC,GACjB,YAKG,IAAIH,GAAS,SAAUI,EAAWC,GAugB9B,QAASC,GAAMC,GACX,MAAOC,MAAKC,MAAMF,GAuEtB,QAASG,KACL,GAAIC,GAAgBC,EAAEP,OAAOK,SACzBG,EAAcD,EAAEE,OAAOC,GAAGH,EAAEI,YAC5BH,GAAYI,KAAK,0BACjBN,EAAgBE,EAAYI,KAAK,yBAA2BL,EAAEP,OAAOK,UAEzEE,EAAEM,kBAAoBC,WAAW,WACzBP,EAAEP,OAAOe,MACTR,EAAES,UACFT,EAAEU,aACFV,EAAEW,KAAK,aAAcX,IAGhBA,EAAEY,MAKEnB,EAAOoB,mBAKRb,EAAEc,gBAJFd,EAAEe,SAAS,GACXf,EAAEW,KAAK,aAAcX,KANzBA,EAAEU,aACFV,EAAEW,KAAK,aAAcX,KAY9BD,GAyxBP,QAASiB,GAAmBC,EAAGC,GAC3B,GAAIC,GAAK5B,EAAE0B,EAAEG,OACb,KAAKD,EAAGE,GAAGH,GACP,GAAwB,gBAAbA,GACPC,EAAKA,EAAGG,QAAQJ,OAEf,IAAIA,EAASK,SAAU,CACxB,GAAIC,EAIJ,OAHAL,GAAGG,UAAUG,KAAK,SAAUC,EAAOC,GAC3BA,IAAQT,IAAUM,EAAQN,KAE7BM,EACON,EADA,OAIpB,GAAkB,IAAdC,EAAGS,OAGP,MAAOT,GAAG,GAm2Bd,QAASU,GAAaT,EAAQU,GAC1BA,EAAUA,KAEV,IAAIC,GAAeC,OAAOC,kBAAoBD,OAAOE,uBACjDC,EAAW,GAAIJ,GAAa,SAAUK,GACtCA,EAAUC,QAAQ,SAAUC,GACxBtC,EAAEuC,UAAS,GACXvC,EAAEW,KAAK,mBAAoBX,EAAGsC,MAItCH,GAASK,QAAQpB,GACbqB,WAA0C,SAAvBX,EAAQW,YAAoCX,EAAQW,WACvEC,UAAwC,SAAtBZ,EAAQY,WAAmCZ,EAAQY,UACrEC,cAAgD,SAA1Bb,EAAQa,eAAuCb,EAAQa,gBAGjF3C,EAAE4C,UAAUC,KAAKV,GAy+BrB,QAASW,GAAe7B,GAChBA,EAAE8B,gBAAe9B,EAAIA,EAAE8B,cAC3B,IAAIC,GAAK/B,EAAEgC,SAAWhC,EAAEiC,QAExB,KAAKlD,EAAEP,OAAO0D,mBAAqBnD,EAAEoD,gBAAyB,KAAPJ,IAAchD,EAAEoD,gBAAyB,KAAPJ,GACrF,OAAO,CAEX,KAAKhD,EAAEP,OAAO4D,mBAAqBrD,EAAEoD,gBAAyB,KAAPJ,IAAchD,EAAEoD,gBAAyB,KAAPJ,GACrF,OAAO,CAEX,MAAI/B,EAAEqC,UAAYrC,EAAEsC,QAAUtC,EAAEuC,SAAWvC,EAAEwC,SAGzCC,SAASC,eAAiBD,SAASC,cAAcC,WAA+D,UAAlDF,SAASC,cAAcC,SAASC,eAA+E,aAAlDH,SAASC,cAAcC,SAASC,gBAA/J,CAGA,GAAW,KAAPb,GAAoB,KAAPA,GAAoB,KAAPA,GAAoB,KAAPA,EAAW,CAClD,GAAIc,IAAS,CAEb,IAAI9D,EAAER,UAAU8B,QAAQ,IAAMtB,EAAEP,OAAOsE,YAAYnC,OAAS,GAAqE,IAAhE5B,EAAER,UAAU8B,QAAQ,IAAMtB,EAAEP,OAAOuE,kBAAkBpC,OAClH,MAEJ,IAAIqC,IACAC,KAAMlC,OAAOmC,YACbC,IAAKpC,OAAOqC,aAEZC,EAActC,OAAOuC,WACrBC,EAAexC,OAAOyC,YACtBC,EAAe1E,EAAER,UAAUmF,QAC3B3E,GAAE4E,MAAKF,EAAaR,KAAOQ,EAAaR,KAAOlE,EAAER,UAAU,GAAGqF,WAOlE,KAAK,GANDC,KACCJ,EAAaR,KAAMQ,EAAaN,MAChCM,EAAaR,KAAOlE,EAAE+E,MAAOL,EAAaN,MAC1CM,EAAaR,KAAMQ,EAAaN,IAAMpE,EAAEgF,SACxCN,EAAaR,KAAOlE,EAAE+E,MAAOL,EAAaN,IAAMpE,EAAEgF,SAE9CC,EAAI,EAAGA,EAAIH,EAAYlD,OAAQqD,IAAK,CACzC,GAAIC,GAAQJ,EAAYG,EAEpBC,GAAM,IAAMjB,EAAaC,MAAQgB,EAAM,IAAMjB,EAAaC,KAAOI,GACjEY,EAAM,IAAMjB,EAAaG,KAAOc,EAAM,IAAMjB,EAAaG,IAAMI,IAE/DV,GAAS,GAIjB,IAAKA,EAAQ,OAEb9D,EAAEoD,gBACS,KAAPJ,GAAoB,KAAPA,IACT/B,EAAEkE,eAAgBlE,EAAEkE,iBACnBlE,EAAEmE,aAAc,IAEb,KAAPpC,IAAchD,EAAE4E,KAAgB,KAAP5B,GAAahD,EAAE4E,MAAM5E,EAAEqF,aACzC,KAAPrC,IAAchD,EAAE4E,KAAgB,KAAP5B,GAAahD,EAAE4E,MAAM5E,EAAEsF,cAG1C,KAAPtC,GAAoB,KAAPA,IACT/B,EAAEkE,eAAgBlE,EAAEkE,iBACnBlE,EAAEmE,aAAc,GAEd,KAAPpC,GAAWhD,EAAEqF,YACN,KAAPrC,GAAWhD,EAAEsF,aAErBtF,EAAEW,KAAK,aAAcX,EAAGgD,IA6I5B,QAASuC,GAA2BC,GAEhC,GAIIC,GAAK,EAAGC,EAAK,EACbC,EAAK,EAAGC,EAAK,CAkDjB,OA/CI,UAAYJ,KACZE,EAAKF,EAAMK,QAEX,cAAgBL,KAChBE,GAAMF,EAAMM,WAAa,KAEzB,eAAiBN,KACjBE,GAAMF,EAAMO,YAAc,KAE1B,eAAiBP,KACjBC,GAAMD,EAAMQ,YAAc,KAI1B,QAAUR,IAASA,EAAMS,OAAST,EAAMU,kBACxCT,EAAKC,EACLA,EAAK,GAGTC,EA3BiB,GA2BZF,EACLG,EA5BiB,GA4BZF,EAED,UAAYF,KACZI,EAAKJ,EAAMW,QAEX,UAAYX,KACZG,EAAKH,EAAMY,SAGVT,GAAMC,IAAOJ,EAAMa,YACI,IAApBb,EAAMa,WACNV,GAtCU,GAuCVC,GAvCU,KAyCVD,GAxCU,IAyCVC,GAzCU,MA8CdD,IAAOF,IACPA,EAAME,EAAK,GAAK,EAAK,GAErBC,IAAOF,IACPA,EAAME,EAAK,GAAK,EAAK,IAIrBU,MAAOb,EACPc,MAAOb,EACPc,OAAQb,EACRc,OAAQb,GAchB,QAASc,GAAiBzF,GAClBA,EAAE8B,gBAAe9B,EAAIA,EAAE8B,cAC3B,IAAI4D,GAAQ,EACRC,EAAY5G,EAAE4E,KAAM,EAAK,EAEzBiC,EAAOtB,EAAgBtE,EAE3B,IAAIjB,EAAEP,OAAOqH,sBACT,GAAI9G,EAAEoD,eAAgB,CAClB,KAAIxD,KAAKmH,IAAIF,EAAKL,QAAU5G,KAAKmH,IAAIF,EAAKJ,SACrC,MAD8CE,GAAQE,EAAKL,OAASI,MAGxE,CACD,KAAIhH,KAAKmH,IAAIF,EAAKJ,QAAU7G,KAAKmH,IAAIF,EAAKL,SACrC,MAD8CG,GAAQE,EAAKJ,WAKpEE,GAAQ/G,KAAKmH,IAAIF,EAAKL,QAAU5G,KAAKmH,IAAIF,EAAKJ,SAAYI,EAAKL,OAASI,GAAcC,EAAKJ,MAG/F,IAAc,IAAVE,EAAJ,CAIA,GAFI3G,EAAEP,OAAOuH,mBAAkBL,GAASA,GAEnC3G,EAAEP,OAAOwH,SAoBT,CAED,GAAIC,GAAWlH,EAAEmH,sBAAwBR,EAAQ3G,EAAEP,OAAO2H,sBACtDC,EAAerH,EAAEsH,YACjBC,EAASvH,EAAEY,KAgCf,IA9BIsG,GAAYlH,EAAEwH,iBAAgBN,EAAWlH,EAAEwH,gBAC3CN,GAAYlH,EAAEyH,iBAAgBP,EAAWlH,EAAEyH,gBAE/CzH,EAAE0H,qBAAqB,GACvB1H,EAAE2H,oBAAoBT,GACtBlH,EAAE4H,iBACF5H,EAAE6H,sBAEGR,GAAgBrH,EAAEsH,cAAgBC,GAAUvH,EAAEY,QAC/CZ,EAAE8H,gBAGF9H,EAAEP,OAAOsI,gBACTC,aAAahI,EAAEiI,WAAWC,SAC1BlI,EAAEiI,WAAWC,QAAU3H,WAAW,WAC9BP,EAAEmI,cACH,MAGCnI,EAAEP,OAAO2I,aAAepI,EAAEqI,MAC1BrI,EAAEqI,KAAKC,OAIftI,EAAEW,KAAK,WAAYX,EAAGiB,GAGlBjB,EAAEP,OAAOK,UAAYE,EAAEP,OAAO8I,8BAA8BvI,EAAEc,eAGjD,IAAboG,GAAkBA,IAAalH,EAAEyH,eAAgB,WAxDjC,CACpB,IAAI,GAAKzF,QAAOwG,MAAQC,UAAYzI,EAAEiI,WAAWS,eAAiB,GAC9D,GAAI/B,EAAQ,EACR,GAAM3G,EAAEY,QAASZ,EAAEP,OAAOe,MAAUR,EAAE2I,WAIjC,GAAI3I,EAAEP,OAAOmJ,yBAA0B,OAAO,MAH/C5I,GAAEqF,YACFrF,EAAEW,KAAK,WAAYX,EAAGiB,OAK1B,IAAMjB,EAAEsH,cAAetH,EAAEP,OAAOe,MAAUR,EAAE2I,WAIvC,GAAI3I,EAAEP,OAAOmJ,yBAA0B,OAAO,MAH/C5I,GAAEsF,YACFtF,EAAEW,KAAK,WAAYX,EAAGiB,EAKlCjB,GAAEiI,WAAWS,gBAAiB,GAAK1G,QAAOwG,MAAQC,UA4CtD,MAFIxH,GAAEkE,eAAgBlE,EAAEkE,iBACnBlE,EAAEmE,aAAc,GACd,GA4BX,QAASyD,GAAqB1H,EAAI2H,GAC9B3H,EAAK5B,EAAE4B,EACP,IAAI4H,GAAGpD,EAAIC,EACPgB,EAAY5G,EAAE4E,KAAM,EAAK,CAE7BmE,GAAI5H,EAAGd,KAAK,yBAA2B,IACvCsF,EAAKxE,EAAGd,KAAK,0BACbuF,EAAKzE,EAAGd,KAAK,0BACTsF,GAAMC,GACND,EAAKA,GAAM,IACXC,EAAKA,GAAM,KAGP5F,EAAEoD,gBACFuC,EAAKoD,EACLnD,EAAK,MAGLA,EAAKmD,EACLpD,EAAK,KAKTA,EADA,EAAKqD,QAAQ,MAAQ,EAChBC,SAAStD,EAAI,IAAMmD,EAAWlC,EAAY,IAG1CjB,EAAKmD,EAAWlC,EAAY,KAGjChB,EADA,EAAKoD,QAAQ,MAAQ,EAChBC,SAASrD,EAAI,IAAMkD,EAAW,IAG9BlD,EAAKkD,EAAW,KAGzB3H,EAAG+H,UAAU,eAAiBvD,EAAK,KAAOC,EAAK,SA6ZnD,QAASuD,GAAoBC,GASzB,MARgC,KAA5BA,EAAUJ,QAAQ,QAEdI,EADAA,EAAU,KAAOA,EAAU,GAAGC,cAClB,KAAOD,EAAU,GAAGC,cAAgBD,EAAUE,UAAU,GAGxD,KAAOF,GAGpBA,EArkIX,KAAM9J,eAAgBF,IAAS,MAAO,IAAIA,GAAOI,EAAWC,EAG5D,IAAI8J,IACAC,UAAW,aACXC,kBAAmB,YACnBC,aAAc,EACdC,MAAO,IAEP7J,UAAU,EACVyI,8BAA8B,EAC9B1H,oBAAoB,EAEpB+I,uBAAuB,EACvBC,sBAAuB,GAEvB5C,UAAU,EACV6C,kBAAkB,EAClBC,sBAAuB,EACvBC,wBAAwB,EACxBC,4BAA6B,EAC7BC,8BAA+B,EAC/BnC,gBAAgB,EAChBoC,wBAAyB,IAEzBC,YAAY,EAEZC,gBAAgB,EAEhBC,kBAAkB,EAElBC,OAAQ,QACRC,WACIC,OAAQ,GACRC,QAAS,EACTC,MAAO,IACPC,SAAU,EACVC,cAAe,GAEnBC,MACID,cAAe,EACfE,eAAe,GAEnBC,MACIH,cAAc,EACdI,QAAQ,EACRC,aAAc,GACdC,YAAa,KAEjBC,MACIC,WAAW,GAGfC,UAAU,EAEVC,MAAM,EACNC,QAAS,EACTC,QAAS,EACTC,YAAY,EAEZC,UAAW,KACXC,eAAe,EACfC,oBAAoB,EACpBC,wBAAwB,EAExBC,iBAAiB,EACjBC,mBAAmB,EACnBpD,0BAA0B,EAC1B5B,kBAAkB,EAClBF,uBAAuB,EACvBM,sBAAuB,EACvB6E,uBAAwB,YAExBC,SAAS,EACTC,mBAAmB,EAEnBC,SAAS,EAETC,cAAc,EAEdC,YAAaC,OAEbC,aAAc,EACdC,cAAe,EACfC,gBAAiB,EACjBC,oBAAqB,SACrBC,eAAgB,EAChBC,gBAAgB,EAChBC,mBAAoB,EACpBC,kBAAmB,EAEnBC,cAAc,EAEdC,WAAY,EACZC,WAAY,GACZC,eAAe,EACfC,aAAa,EACbC,YAAY,EACZC,gBAAiB,GACjBC,aAAc,IACdC,cAAc,EACdC,cAAc,EACdC,UAAW,EACXC,0BAA0B,EAC1BC,qBAAqB,EAErBC,mBAAmB,EAEnBC,WAAY,KACZC,kBAAmB,OACnBC,qBAAqB,EACrBC,gBAAgB,EAChBC,uBAAwB,KACxBC,yBAA0B,KAC1BC,yBAA0B,KAC1BC,uBAAwB,KACxBC,eAAgB,UAEhBC,YAAY,EACZC,gBAAiB,IAEjBC,WAAY,KACZC,WAAY,KAEZC,qBAAqB,EACrBC,uBAAuB,EAEvBC,YAAY,EAEZC,eAAe,EACfC,0BAA0B,EAC1BC,qBAAqB,EAErB5G,aAAa,EACb6G,uBAAuB,EACvBC,4BAA6B,EAC7BC,8BAA8B,EAE9BC,eAAe,EACfC,qBAAqB,EAErB7O,MAAM,EACN8O,qBAAsB,EACtBC,aAAc,KAEdC,QAASjD,OACTkD,gBAAgB,EAChBC,UAAW,QACXC,qBAAqB,EAErBtM,kBAAkB,EAClBF,kBAAkB,EAClByM,aAAc,KACdC,WAAW,EACXC,eAAgB,oBAEhBC,kBAAkB,EAElBC,uBAAwB,oBACxBjM,WAAY,eACZC,iBAAkB,sBAClBiM,0BAA2B,gCAC3BC,kBAAmB,uBACnBC,oBAAqB,yBACrBC,eAAgB,oBAChBC,wBAAyB,8BACzBC,eAAgB,oBAChBC,wBAAyB,8BACzBC,aAAc,iBACdC,YAAa,2BACbC,kBAAmB,kCACnBC,oBAAqB,yBACrBC,uBAAwB,4BACxBC,qBAAsB,0BACtBC,sBAAuB,2BACvBC,2BAA4B,gCAC5BC,yBAA0B,8BAC1BC,wBAAyB,qBACzBC,iBAAkB,cAClBC,uBAAwB,sBACxBC,sBAAuB,qBACvBC,mBAAoB,wBACpBC,kBAAmB,sBACnBC,eAAgB,YAChBC,mBAAoB,wBAGpBrP,UAAU,EACVsP,gBAAgB,EAEhBC,MAAM,EACNC,iBAAkB,iBAClBC,iBAAkB,aAClBC,kBAAmB,0BACnBC,iBAAkB,yBAClBC,wBAAyB,wBAEzBC,oBAAoB,GAiCpBC,EAA0BxS,GAAUA,EAAO6K,gBAE/C7K,GAASA,KACT,IAAIyS,KACJ,KAAK,GAAIC,KAAS1S,GACd,GAA6B,gBAAlBA,GAAO0S,IAAyC,OAAlB1S,EAAO0S,KAAqB1S,EAAO0S,GAAO5Q,UAAY9B,EAAO0S,KAAWnQ,QAAUvC,EAAO0S,KAAWzO,UAA6B,mBAAT0O,OAAwB3S,EAAO0S,YAAkBC,OAA4B,mBAAX/S,SAA0BI,EAAO0S,YAAkB9S,SAOlR6S,EAAeC,GAAS1S,EAAO0S,OAP6P,CAC5RD,EAAeC,KACf,KAAK,GAAIE,KAAa5S,GAAO0S,GACzBD,EAAeC,GAAOE,GAAa5S,EAAO0S,GAAOE,GAO7D,IAAK,GAAIC,KAAO/I,GACZ,GAA2B,SAAhB9J,EAAO6S,GACd7S,EAAO6S,GAAO/I,EAAS+I,OAEtB,IAA2B,gBAAhB7S,GAAO6S,GACnB,IAAK,GAAIC,KAAWhJ,GAAS+I,GACW,SAAzB7S,EAAO6S,GAAKC,KACnB9S,EAAO6S,GAAKC,GAAWhJ,EAAS+I,GAAKC,GAOrD,IAAIvS,GAAIV,IAcR,IAXAU,EAAEP,OAASA,EACXO,EAAEkS,eAAiBA,EAGnBlS,EAAEwS,cAIe,SAANjT,GAAqC,mBAAT6S,QACnC7S,EAAI6S,OAES,SAAN7S,IAEHA,EADgB,mBAAT6S,MACHpQ,OAAOoQ,MAAQpQ,OAAOyQ,OAASzQ,OAAO3C,OAGtC+S,SAKZpS,EAAET,EAAIA,EAKNS,EAAE0S,kBAAoBnG,OACtBvM,EAAE2S,oBAAsB,WAEpB,IAAK3S,EAAEP,OAAO6M,YAAa,OAAO,CAClC,IACiBpH,GADb0N,GAAa,EACbC,IACJ,KAAM3N,IAASlF,GAAEP,OAAO6M,YAChBtM,EAAEP,OAAO6M,YAAYwG,eAAe5N,IACpC2N,EAAOhQ,KAAKqC,EAGpB2N,GAAOE,KAAK,SAAUpT,EAAGqT,GACrB,MAAO/J,UAAStJ,EAAG,IAAMsJ,SAAS+J,EAAG,KAEzC,KAAK,GAAI/N,GAAI,EAAGA,EAAI4N,EAAOjR,OAAQqD,KAC/BC,EAAQ2N,EAAO5N,KACFjD,OAAOuC,aAAeqO,IAC/BA,EAAa1N,EAGrB,OAAO0N,IAAc,OAEzB5S,EAAEiT,cAAgB,WAEd,GAAIL,GAAa5S,EAAE2S,qBACnB,IAAIC,GAAc5S,EAAE0S,oBAAsBE,EAAY,CAClD,GAAIM,GAAoBN,IAAc5S,GAAEP,OAAO6M,YAActM,EAAEP,OAAO6M,YAAYsG,GAAc5S,EAAEkS,eAC9FiB,EAAcnT,EAAEP,OAAOe,MAAS0S,EAAkBzG,gBAAkBzM,EAAEP,OAAOgN,aACjF,KAAM,GAAI0F,KAASe,GACflT,EAAEP,OAAO0S,GAASe,EAAkBf,EAExCnS,GAAE0S,kBAAoBE,EACnBO,GAAenT,EAAEoT,aAChBpT,EAAEqT,QAAO,KAKjBrT,EAAEP,OAAO6M,aACTtM,EAAEiT,gBAMNjT,EAAER,UAAYD,EAAEC,GACW,IAAvBQ,EAAER,UAAUoC,QAAhB,CACA,GAAI5B,EAAER,UAAUoC,OAAS,EAAG,CACxB,GAAI0R,KAKJ,OAJAtT,GAAER,UAAUiC,KAAK,WAEb6R,EAAQzQ,KAAK,GAAIzD,GAAOE,KAAMG,MAE3B6T,EAIXtT,EAAER,UAAU,GAAG+T,OAASvT,EACxBA,EAAER,UAAUqH,KAAK,SAAU7G,GAE3BA,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyBhQ,EAAEP,OAAO+J,WAEzDxJ,EAAEP,OAAOwH,UACTjH,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,aAEnDhQ,EAAEwT,QAAQC,UACXzT,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,cACpDhQ,EAAEP,OAAOiN,gBAAkB,GAE3B1M,EAAEP,OAAO2K,YACTpK,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,eAGpDhQ,EAAEP,OAAO6L,UAAYtL,EAAEP,OAAOmP,yBAC9B5O,EAAEP,OAAOkP,qBAAsB,GAG/B3O,EAAEP,OAAOmO,sBACT5N,EAAEP,OAAO+O,gBAAkB,IAG1B,OAAQ,YAAa,QAAQxF,QAAQhJ,EAAEP,OAAO8K,SAAW,IACtDvK,EAAEwT,QAAQE,cACV1T,EAAEP,OAAOkP,qBAAsB,EAC/B3O,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,OAGpDhQ,EAAEP,OAAO8K,OAAS,SAGF,UAApBvK,EAAEP,OAAO8K,QACTvK,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyBhQ,EAAEP,OAAO8K,QAEzC,SAApBvK,EAAEP,OAAO8K,SACTvK,EAAEP,OAAO+O,gBAAkB,EAC3BxO,EAAEP,OAAOgN,cAAgB,EACzBzM,EAAEP,OAAOiN,gBAAkB,EAC3B1M,EAAEP,OAAOmN,eAAiB,EAC1B5M,EAAEP,OAAOoN,gBAAiB,EAC1B7M,EAAEP,OAAO+M,aAAe,EACxBxM,EAAEP,OAAO6K,kBAAmB,GAER,SAApBtK,EAAEP,OAAO8K,QAAyC,SAApBvK,EAAEP,OAAO8K,SACvCvK,EAAEP,OAAOgN,cAAgB,EACzBzM,EAAEP,OAAOiN,gBAAkB,EAC3B1M,EAAEP,OAAOmN,eAAiB,EAC1B5M,EAAEP,OAAOkP,qBAAsB,EAC/B3O,EAAEP,OAAO+M,aAAe,EACe,SAA5ByF,IACPjS,EAAEP,OAAO6K,kBAAmB,IAKhCtK,EAAEP,OAAOoP,YAAc7O,EAAEwT,QAAQG,QACjC3T,EAAEP,OAAOoP,YAAa,GAI1B7O,EAAE4T,QAAU5T,EAAER,UAAUqU,SAAS,IAAM7T,EAAEP,OAAO+Q,cAG5CxQ,EAAEP,OAAOqO,aACT9N,EAAE8T,oBAAsBvU,EAAES,EAAEP,OAAOqO,YAC/B9N,EAAEP,OAAOoO,mBAAoD,gBAAxB7N,GAAEP,OAAOqO,YAA2B9N,EAAE8T,oBAAoBlS,OAAS,GAAsD,IAAjD5B,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOqO,YAAYlM,SACnJ5B,EAAE8T,oBAAsB9T,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOqO,aAGtB,YAA5B9N,EAAEP,OAAO6O,gBAAgCtO,EAAEP,OAAOuO,oBAClDhO,EAAE8T,oBAAoBE,SAAShU,EAAEP,OAAOwR,wBAA0B,aAGlEjR,EAAEP,OAAOuO,qBAAsB,EAEnChO,EAAE8T,oBAAoBE,SAAShU,EAAEP,OAAOwR,wBAA0BjR,EAAEP,OAAO6O,kBAG3EtO,EAAEP,OAAOgP,YAAczO,EAAEP,OAAOiP,cAC5B1O,EAAEP,OAAOgP,aACTzO,EAAEyO,WAAalP,EAAES,EAAEP,OAAOgP,YACtBzO,EAAEP,OAAOoO,mBAAoD,gBAAxB7N,GAAEP,OAAOgP,YAA2BzO,EAAEyO,WAAW7M,OAAS,GAAsD,IAAjD5B,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOgP,YAAY7M,SAC1I5B,EAAEyO,WAAazO,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOgP,cAG7CzO,EAAEP,OAAOiP,aACT1O,EAAE0O,WAAanP,EAAES,EAAEP,OAAOiP,YACtB1O,EAAEP,OAAOoO,mBAAoD,gBAAxB7N,GAAEP,OAAOiP,YAA2B1O,EAAE0O,WAAW9M,OAAS,GAAsD,IAAjD5B,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOiP,YAAY9M,SAC1I5B,EAAE0O,WAAa1O,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOiP,eAMrD1O,EAAEoD,aAAe,WACb,MAA8B,eAAvBpD,EAAEP,OAAO+J,WAKpBxJ,EAAE4E,IAAM5E,EAAEoD,iBAAwD,QAArCpD,EAAER,UAAU,GAAGyU,IAAIpQ,eAA4D,QAAjC7D,EAAER,UAAU0U,IAAI,cACvFlU,EAAE4E,KACF5E,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,OAIpDhQ,EAAE4E,MACF5E,EAAEmU,SAAwC,gBAA7BnU,EAAE4T,QAAQM,IAAI,YAI3BlU,EAAEP,OAAOiN,gBAAkB,GAC3B1M,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,YAIpDhQ,EAAEoU,OAAOC,SACTrU,EAAEwS,WAAW3P,KAAK7C,EAAEP,OAAOuQ,uBAAyB,WAIxDhQ,EAAER,UAAUwU,SAAShU,EAAEwS,WAAW8B,KAAK,MAGvCtU,EAAEuU,UAAY,EAGdvU,EAAE8I,SAAW,EAGb9I,EAAEwU,SAAW,EAKbxU,EAAEyU,gBAAkB,WAChBzU,EAAEP,OAAO0D,kBAAmB,EACxBnD,EAAEP,OAAO4D,oBAAqB,GAASrD,EAAEP,OAAOoP,YAChD7O,EAAE0U,mBAGV1U,EAAE2U,gBAAkB,WAChB3U,EAAEP,OAAO4D,kBAAmB,EACxBrD,EAAEP,OAAO0D,oBAAqB,GAASnD,EAAEP,OAAOoP,YAChD7O,EAAE0U,mBAGV1U,EAAE4U,WAAa,WACX5U,EAAEP,OAAO0D,iBAAmBnD,EAAEP,OAAO4D,kBAAmB,EACpDrD,EAAEP,OAAOoP,YAAY7O,EAAE0U,mBAE/B1U,EAAE6U,kBAAoB,WAClB7U,EAAEP,OAAO0D,kBAAmB,EACxBnD,EAAEP,OAAO4D,oBAAqB,GAAQrD,EAAEP,OAAOoP,YAC/C7O,EAAE8U,iBAGV9U,EAAE+U,kBAAoB,WAClB/U,EAAEP,OAAO4D,kBAAmB,EACxBrD,EAAEP,OAAO0D,oBAAqB,GAAQnD,EAAEP,OAAOoP,YAC/C7O,EAAE8U,iBAGV9U,EAAEgV,aAAe,WACbhV,EAAEP,OAAO0D,iBAAmBnD,EAAEP,OAAO4D,kBAAmB,EACpDrD,EAAEP,OAAOoP,YAAY7O,EAAE8U,iBAY/B9U,EAAE8U,cAAgB,SAASG,GACvBjV,EAAER,UAAU,GAAG0V,MAAMC,OAAS,OAC9BnV,EAAER,UAAU,GAAG0V,MAAMC,OAASF,EAAS,mBAAqB,eAC5DjV,EAAER,UAAU,GAAG0V,MAAMC,OAASF,EAAS,eAAiB,YACxDjV,EAAER,UAAU,GAAG0V,MAAMC,OAASF,EAAS,WAAY,QAEvDjV,EAAE0U,gBAAkB,WAChB1U,EAAER,UAAU,GAAG0V,MAAMC,OAAS,IAE9BnV,EAAEP,OAAOoP,YACT7O,EAAE8U,gBAKN9U,EAAEoV,gBACFpV,EAAEqV,aAAe,EAEjBrV,EAAEsV,UAAY,SAAUC,EAAYC,EAAKC,EAAQC,EAAOC,EAAkBC,GAEtE,QAASC,KACDD,GAAUA,IAFlB,GAAIE,EAICP,GAAWQ,UAAaJ,EAmBzBE,IAlBIL,GACAM,EAAQ,GAAI9T,QAAOgU,MACnBF,EAAMG,OAASJ,EACfC,EAAMI,QAAUL,EACZH,IACAI,EAAMJ,MAAQA,GAEdD,IACAK,EAAML,OAASA,GAEfD,IACAM,EAAMN,IAAMA,IAGhBK,KAOZ7V,EAAEoP,cAAgB,WAEd,QAAS+G,KACY,SAANnW,GAA2B,OAANA,GAAeA,IACxBuM,SAAnBvM,EAAEqV,cAA4BrV,EAAEqV,eAChCrV,EAAEqV,eAAiBrV,EAAEoV,aAAaxT,SAC9B5B,EAAEP,OAAO4P,qBAAqBrP,EAAEoW,SACpCpW,EAAEW,KAAK,gBAAiBX,KANhCA,EAAEoV,aAAepV,EAAER,UAAUuU,KAAK,MASlC,KAAK,GAAI9O,GAAI,EAAGA,EAAIjF,EAAEoV,aAAaxT,OAAQqD,IACvCjF,EAAEsV,UAAUtV,EAAEoV,aAAanQ,GAAKjF,EAAEoV,aAAanQ,GAAGoR,YAAcrW,EAAEoV,aAAanQ,GAAGqR,aAAa,OAAUtW,EAAEoV,aAAanQ,GAAGwQ,QAAUzV,EAAEoV,aAAanQ,GAAGqR,aAAa,UAAYtW,EAAEoV,aAAanQ,GAAGyQ,OAAS1V,EAAEoV,aAAanQ,GAAGqR,aAAa,UAAU,EAAMH,IAOlQnW,EAAEM,kBAAoBiM,OACtBvM,EAAEuW,aAAc,EAChBvW,EAAEwW,gBAAiB,EA8BnBxW,EAAEyW,cAAgB,WACd,MAAmC,UAAxBzW,EAAEM,sBACRN,EAAEP,OAAOK,YACVE,EAAEuW,cACNvW,EAAEuW,aAAc,EAChBvW,EAAEW,KAAK,kBAAmBX,OAC1BF,SAEJE,EAAEc,aAAe,SAAU4V,GAClB1W,EAAEM,oBACHN,EAAEM,mBAAmB0H,aAAahI,EAAEM,mBACxCN,EAAEuW,aAAc,EAChBvW,EAAEM,kBAAoBiM,OACtBvM,EAAEW,KAAK,iBAAkBX,KAE7BA,EAAE2W,cAAgB,SAAUhN,GACpB3J,EAAEwW,iBACFxW,EAAEM,mBAAmB0H,aAAahI,EAAEM,mBACxCN,EAAEwW,gBAAiB,EACL,IAAV7M,GACA3J,EAAEwW,gBAAiB,EACnB1W,KAGAE,EAAE4T,QAAQgD,cAAc,WACf5W,IACLA,EAAEwW,gBAAiB,EACdxW,EAAEuW,YAIHzW,IAHAE,EAAEc,oBAWlBd,EAAEwH,aAAe,WACb,OAASxH,EAAE6W,SAAS,IAExB7W,EAAEyH,aAAe,WACb,OAASzH,EAAE6W,SAAS7W,EAAE6W,SAASjV,OAAS,IAK5C5B,EAAE8W,iBAAmB,WACjB,GAEI7R,GAFA8R,KACAC,EAAY,CAIhB,IAA8B,SAA3BhX,EAAEP,OAAOgN,eAA4BzM,EAAEP,OAAOgN,cAAgB,EAC7D,IAAKxH,EAAI,EAAGA,EAAIrF,KAAKqX,KAAKjX,EAAEP,OAAOgN,eAAgBxH,IAAK,CACpD,GAAIvD,GAAQ1B,EAAEI,YAAc6E,CAC5B,IAAGvD,EAAQ1B,EAAEE,OAAO0B,OAAQ,KAC5BmV,GAAalU,KAAK7C,EAAEE,OAAOC,GAAGuB,GAAO,QAGzCqV,GAAalU,KAAK7C,EAAEE,OAAOC,GAAGH,EAAEI,aAAa,GAIjD,KAAK6E,EAAI,EAAGA,EAAI8R,EAAanV,OAAQqD,IACjC,GAA+B,SAApB8R,EAAa9R,GAAoB,CACxC,GAAID,GAAS+R,EAAa9R,GAAGiS,YAC7BF,GAAYhS,EAASgS,EAAYhS,EAASgS,EAK9CA,GAAWhX,EAAE4T,QAAQM,IAAI,SAAU8C,EAAY,OAEvDhX,EAAEmX,oBAAsB,WACpB,GAAIpS,GAAOC,CAEPD,GAD0B,SAAnB/E,EAAEP,OAAOsF,MACR/E,EAAEP,OAAOsF,MAGT/E,EAAER,UAAU,GAAG4X,YAGvBpS,EAD2B,SAApBhF,EAAEP,OAAOuF,OACPhF,EAAEP,OAAOuF,OAGThF,EAAER,UAAU,GAAG6X,aAEd,IAAVtS,GAAe/E,EAAEoD,gBAA6B,IAAX4B,IAAiBhF,EAAEoD,iBAK1D2B,EAAQA,EAAQkE,SAASjJ,EAAER,UAAU0U,IAAI,gBAAiB,IAAMjL,SAASjJ,EAAER,UAAU0U,IAAI,iBAAkB,IAC3GlP,EAASA,EAASiE,SAASjJ,EAAER,UAAU0U,IAAI,eAAgB,IAAMjL,SAASjJ,EAAER,UAAU0U,IAAI,kBAAmB,IAG7GlU,EAAE+E,MAAQA,EACV/E,EAAEgF,OAASA,EACXhF,EAAEsX,KAAOtX,EAAEoD,eAAiBpD,EAAE+E,MAAQ/E,EAAEgF,SAG5ChF,EAAEuX,iBAAmB,WACjBvX,EAAEE,OAASF,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,YAC7C/D,EAAE6W,YACF7W,EAAEwX,cACFxX,EAAEyX,kBAEF,IAEIxS,GAFAuH,EAAexM,EAAEP,OAAO+M,aACxBkL,GAAiB1X,EAAEP,OAAOqN,mBAE1B6K,EAAgB,EAChBjW,EAAQ,CACZ,IAAsB,SAAX1B,EAAEsX,KAAb,CAC4B,gBAAjB9K,IAA6BA,EAAaxD,QAAQ,MAAQ,IACjEwD,EAAeoL,WAAWpL,EAAaqL,QAAQ,IAAK,KAAO,IAAM7X,EAAEsX,MAGvEtX,EAAE8X,aAAetL,EAEbxM,EAAE4E,IAAK5E,EAAEE,OAAOgU,KAAK6D,WAAY,GAAIC,UAAW,KAC/ChY,EAAEE,OAAOgU,KAAK+D,YAAa,GAAIC,aAAc,IAElD,IAAIC,EACAnY,GAAEP,OAAOiN,gBAAkB,IAEvByL,EADAvY,KAAKC,MAAMG,EAAEE,OAAO0B,OAAS5B,EAAEP,OAAOiN,mBAAqB1M,EAAEE,OAAO0B,OAAS5B,EAAEP,OAAOiN,gBAC7D1M,EAAEE,OAAO0B,OAGThC,KAAKqX,KAAKjX,EAAEE,OAAO0B,OAAS5B,EAAEP,OAAOiN,iBAAmB1M,EAAEP,OAAOiN,gBAE/D,SAA3B1M,EAAEP,OAAOgN,eAA6D,QAAjCzM,EAAEP,OAAOkN,sBAC9CwL,EAAyBvY,KAAKwY,IAAID,EAAwBnY,EAAEP,OAAOgN,cAAgBzM,EAAEP,OAAOiN,kBAKpG,IAAI2L,GACA3L,EAAkB1M,EAAEP,OAAOiN,gBAC3B4L,EAAeH,EAAyBzL,EACxC6L,EAAiBD,GAAgBtY,EAAEP,OAAOiN,gBAAkB4L,EAAetY,EAAEE,OAAO0B,OACxF,KAAKqD,EAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IAAK,CAClCoT,EAAY,CACZ,IAAIG,GAAQxY,EAAEE,OAAOC,GAAG8E,EACxB,IAAIjF,EAAEP,OAAOiN,gBAAkB,EAAG,CAE9B,GAAI+L,GACAC,EAAQC,CACyB,YAAjC3Y,EAAEP,OAAOkN,qBACT+L,EAAS9Y,KAAKC,MAAMoF,EAAIyH,GACxBiM,EAAM1T,EAAIyT,EAAShM,GACfgM,EAASH,GAAmBG,IAAWH,GAAkBI,IAAQjM,EAAgB,MAC3EiM,GAAOjM,IACTiM,EAAM,EACND,KAGRD,EAAqBC,EAASC,EAAMR,EAAyBzL,EAC7D8L,EACKtE,KACG0E,4BAA6BH,EAC7BI,yBAA0BJ,EAC1BK,iBAAkBL,EAClBM,gBAAiBN,EACjBO,MAASP,MAIjBE,EAAM/Y,KAAKC,MAAMoF,EAAIqT,GACrBI,EAASzT,EAAI0T,EAAML,GAEvBE,EACKtE,IACG,WAAalU,EAAEoD,eAAiB,MAAQ,QAC/B,IAARuV,GAAa3Y,EAAEP,OAAO+M,cAAkBxM,EAAEP,OAAO+M,aAAe,MAEpEnM,KAAK,qBAAsBqY,GAC3BrY,KAAK,kBAAmBsY,GAGJ,SAAzBH,EAAMtE,IAAI,aACiB,SAA3BlU,EAAEP,OAAOgN,eACT4L,EAAYrY,EAAEoD,eAAiBoV,EAAMS,YAAW,GAAQT,EAAMU,aAAY,GACtElZ,EAAEP,OAAOuN,eAAcqL,EAAY3Y,EAAM2Y,MAG7CA,GAAarY,EAAEsX,MAAQtX,EAAEP,OAAOgN,cAAgB,GAAKD,GAAgBxM,EAAEP,OAAOgN,cAC1EzM,EAAEP,OAAOuN,eAAcqL,EAAY3Y,EAAM2Y,IAEzCrY,EAAEoD,eACFpD,EAAEE,OAAO+E,GAAGiQ,MAAMnQ,MAAQsT,EAAY,KAGtCrY,EAAEE,OAAO+E,GAAGiQ,MAAMlQ,OAASqT,EAAY,MAG/CrY,EAAEE,OAAO+E,GAAGkU,gBAAkBd,EAC9BrY,EAAEyX,gBAAgB5U,KAAKwV,GAGnBrY,EAAEP,OAAOoN,gBACT6K,EAAgBA,EAAgBW,EAAY,EAAIV,EAAgB,EAAInL,EAC/C,IAAlBmL,GAA6B,IAAN1S,IAASyS,EAAgBA,EAAgB1X,EAAEsX,KAAO,EAAI9K,GACtE,IAANvH,IAASyS,EAAgBA,EAAgB1X,EAAEsX,KAAO,EAAI9K,GACtD5M,KAAKmH,IAAI2Q,GAAiB,OAAUA,EAAgB,GACpD,EAAU1X,EAAEP,OAAOmN,gBAAmB,GAAG5M,EAAE6W,SAAShU,KAAK6U,GAC7D1X,EAAEwX,WAAW3U,KAAK6U,KAGd,EAAU1X,EAAEP,OAAOmN,gBAAmB,GAAG5M,EAAE6W,SAAShU,KAAK6U,GAC7D1X,EAAEwX,WAAW3U,KAAK6U,GAClBA,EAAgBA,EAAgBW,EAAY7L,GAGhDxM,EAAE8X,aAAeO,EAAY7L,EAE7BmL,EAAgBU,EAEhB3W,KAEJ1B,EAAE8X,YAAclY,KAAKwY,IAAIpY,EAAE8X,YAAa9X,EAAEsX,MAAQtX,EAAEP,OAAOsN,iBAC3D,IAAIqM,EAWJ,IARIpZ,EAAE4E,KAAO5E,EAAEmU,WAAiC,UAApBnU,EAAEP,OAAO8K,QAA0C,cAApBvK,EAAEP,OAAO8K,SAChEvK,EAAE4T,QAAQM,KAAKnP,MAAO/E,EAAE8X,YAAc9X,EAAEP,OAAO+M,aAAe,OAE7DxM,EAAEwT,QAAQC,UAAWzT,EAAEP,OAAO4K,iBAC3BrK,EAAEoD,eAAgBpD,EAAE4T,QAAQM,KAAKnP,MAAO/E,EAAE8X,YAAc9X,EAAEP,OAAO+M,aAAe,OAC/ExM,EAAE4T,QAAQM,KAAKlP,OAAQhF,EAAE8X,YAAc9X,EAAEP,OAAO+M,aAAe,QAGpExM,EAAEP,OAAOiN,gBAAkB,IAC3B1M,EAAE8X,aAAeO,EAAYrY,EAAEP,OAAO+M,cAAgB2L,EACtDnY,EAAE8X,YAAclY,KAAKqX,KAAKjX,EAAE8X,YAAc9X,EAAEP,OAAOiN,iBAAmB1M,EAAEP,OAAO+M,aAC3ExM,EAAEoD,eAAgBpD,EAAE4T,QAAQM,KAAKnP,MAAO/E,EAAE8X,YAAc9X,EAAEP,OAAO+M,aAAe,OAC/ExM,EAAE4T,QAAQM,KAAKlP,OAAQhF,EAAE8X,YAAc9X,EAAEP,OAAO+M,aAAe,OAChExM,EAAEP,OAAOoN,gBAAgB,CAEzB,IADAuM,KACKnU,EAAI,EAAGA,EAAIjF,EAAE6W,SAASjV,OAAQqD,IAC3BjF,EAAE6W,SAAS5R,GAAKjF,EAAE8X,YAAc9X,EAAE6W,SAAS,IAAIuC,EAAcvW,KAAK7C,EAAE6W,SAAS5R,GAErFjF,GAAE6W,SAAWuC,EAKrB,IAAKpZ,EAAEP,OAAOoN,eAAgB,CAE1B,IADAuM,KACKnU,EAAI,EAAGA,EAAIjF,EAAE6W,SAASjV,OAAQqD,IAC3BjF,EAAE6W,SAAS5R,IAAMjF,EAAE8X,YAAc9X,EAAEsX,MACnC8B,EAAcvW,KAAK7C,EAAE6W,SAAS5R,GAGtCjF,GAAE6W,SAAWuC,EACTxZ,KAAKC,MAAMG,EAAE8X,YAAc9X,EAAEsX,MAAQ1X,KAAKC,MAAMG,EAAE6W,SAAS7W,EAAE6W,SAASjV,OAAS,IAAM,GACrF5B,EAAE6W,SAAShU,KAAK7C,EAAE8X,YAAc9X,EAAEsX,MAGhB,IAAtBtX,EAAE6W,SAASjV,SAAc5B,EAAE6W,UAAY,IAEb,IAA1B7W,EAAEP,OAAO+M,eACLxM,EAAEoD,eACEpD,EAAE4E,IAAK5E,EAAEE,OAAOgU,KAAK6D,WAAYvL,EAAe,OAC/CxM,EAAEE,OAAOgU,KAAK+D,YAAazL,EAAe,OAE9CxM,EAAEE,OAAOgU,KAAKgE,aAAc1L,EAAe,QAEhDxM,EAAEP,OAAOkP,qBACT3O,EAAEqZ,uBAGVrZ,EAAEqZ,mBAAqB,WACnB,IAAK,GAAIpU,GAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IACjCjF,EAAEE,OAAO+E,GAAGqU,kBAAoBtZ,EAAEoD,eAAiBpD,EAAEE,OAAO+E,GAAGsU,WAAavZ,EAAEE,OAAO+E,GAAGuU,WAOhGxZ,EAAEyZ,qBAAuB,WACrB,GAAaxU,GAAGyU,EAAZC,EAAM,CACV,IAAI3Z,EAAEP,OAAOoN,eAAgB,CACzB,GACI+M,GADAtC,EAAOtX,EAAEE,OAAOF,EAAEI,aAAa+Y,eAEnC,KAAKlU,EAAIjF,EAAEI,YAAc,EAAG6E,EAAIjF,EAAEE,OAAO0B,OAAQqD,IACzCjF,EAAEE,OAAO+E,KAAO2U,IAChBtC,GAAQtX,EAAEE,OAAO+E,GAAGkU,gBACpBQ,IACIrC,EAAOtX,EAAEsX,OAAMsC,GAAY,GAGvC,KAAKF,EAAI1Z,EAAEI,YAAc,EAAGsZ,GAAK,EAAGA,IAC5B1Z,EAAEE,OAAOwZ,KAAOE,IAChBtC,GAAQtX,EAAEE,OAAOwZ,GAAGP,gBACpBQ,IACIrC,EAAOtX,EAAEsX,OAAMsC,GAAY,QAKvC,KAAK3U,EAAIjF,EAAEI,YAAc,EAAG6E,EAAIjF,EAAEE,OAAO0B,OAAQqD,IACzCjF,EAAEwX,WAAWvS,GAAKjF,EAAEwX,WAAWxX,EAAEI,aAAeJ,EAAEsX,MAClDqC,GAIZ,OAAOA,IAKX3Z,EAAE6Z,qBAAuB,SAAUtF,GAI/B,GAHyB,SAAdA,IACPA,EAAYvU,EAAEuU,WAAa,GAEP,IAApBvU,EAAEE,OAAO0B,OAAb,CAC6C,SAAlC5B,EAAEE,OAAO,GAAGoZ,mBAAmCtZ,EAAEqZ,oBAE5D,IAAIS,IAAgBvF,CAChBvU,GAAE4E,MAAKkV,EAAevF,GAG1BvU,EAAEE,OAAO6Z,YAAY/Z,EAAEP,OAAOyQ,kBAC9B,KAAK,GAAIjL,GAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IAAK,CACtC,GAAIuT,GAAQxY,EAAEE,OAAO+E,GACjB+U,GAAiBF,GAAgB9Z,EAAEP,OAAOoN,eAAiB7M,EAAEwH,eAAiB,GAAKgR,EAAMc,oBAAsBd,EAAMW,gBAAkBnZ,EAAEP,OAAO+M,aACpJ,IAAIxM,EAAEP,OAAOmP,sBAAuB,CAChC,GAAIqL,KAAgBH,EAAetB,EAAMc,mBACrCY,EAAaD,EAAcja,EAAEyX,gBAAgBxS,IAE5CgV,GAAe,GAAKA,EAAcja,EAAEsX,MACpC4C,EAAa,GAAKA,GAAcla,EAAEsX,MAClC2C,GAAe,GAAKC,GAAcla,EAAEsX,OAErCtX,EAAEE,OAAOC,GAAG8E,GAAG+O,SAAShU,EAAEP,OAAOyQ,mBAGzCsI,EAAM1P,SAAW9I,EAAE4E,KAAOoV,EAAgBA,KAGlDha,EAAE4H,eAAiB,SAAU2M,GACA,SAAdA,IACPA,EAAYvU,EAAEuU,WAAa,EAE/B,IAAI4F,GAAiBna,EAAEyH,eAAiBzH,EAAEwH,eACtCH,EAAerH,EAAEsH,YACjBC,EAASvH,EAAEY,KACQ,KAAnBuZ,GACAna,EAAE8I,SAAW,EACb9I,EAAEsH,YAActH,EAAEY,OAAQ,IAG1BZ,EAAE8I,UAAYyL,EAAYvU,EAAEwH,gBAAkB,EAC9CxH,EAAEsH,YAActH,EAAE8I,UAAY,EAC9B9I,EAAEY,MAAQZ,EAAE8I,UAAY,GAExB9I,EAAEsH,cAAgBD,GAAcrH,EAAEW,KAAK,mBAAoBX,GAC3DA,EAAEY,QAAU2G,GAAQvH,EAAEW,KAAK,aAAcX,GAEzCA,EAAEP,OAAOkP,qBAAqB3O,EAAE6Z,qBAAqBtF,GACzDvU,EAAEW,KAAK,aAAcX,EAAGA,EAAE8I,WAE9B9I,EAAE6H,kBAAoB,WAClB,GACIuS,GAAgBnV,EAAGoV,EADnB9F,EAAYvU,EAAE4E,IAAM5E,EAAEuU,WAAavU,EAAEuU,SAEzC,KAAKtP,EAAI,EAAGA,EAAIjF,EAAEwX,WAAW5V,OAAQqD,IACE,SAAxBjF,EAAEwX,WAAWvS,EAAI,GACpBsP,GAAavU,EAAEwX,WAAWvS,IAAMsP,EAAYvU,EAAEwX,WAAWvS,EAAI,IAAMjF,EAAEwX,WAAWvS,EAAI,GAAKjF,EAAEwX,WAAWvS,IAAM,EAC5GmV,EAAiBnV,EAEZsP,GAAavU,EAAEwX,WAAWvS,IAAMsP,EAAYvU,EAAEwX,WAAWvS,EAAI,KAClEmV,EAAiBnV,EAAI,GAIrBsP,GAAavU,EAAEwX,WAAWvS,KAC1BmV,EAAiBnV,EAK1BjF,GAAEP,OAAOkQ,sBACJyK,EAAiB,GAA+B,SAAnBA,KAAgCA,EAAiB,GAOtFC,EAAYza,KAAKC,MAAMua,EAAiBpa,EAAEP,OAAOmN,gBAC7CyN,GAAara,EAAE6W,SAASjV,SAAQyY,EAAYra,EAAE6W,SAASjV,OAAS,GAEhEwY,IAAmBpa,EAAEI,cAGzBJ,EAAEqa,UAAYA,EACdra,EAAEsa,cAAgBta,EAAEI,YACpBJ,EAAEI,YAAcga,EAChBpa,EAAE8H,gBACF9H,EAAEua,oBAENva,EAAEua,gBAAkB,WAChBva,EAAEwa,UAAYvR,SAASjJ,EAAEE,OAAOC,GAAGH,EAAEI,aAAaC,KAAK,4BAA8BL,EAAEI,YAAa,KAMxGJ,EAAE8H,cAAgB,WACd9H,EAAEE,OAAO6Z,YAAY/Z,EAAEP,OAAOuE,iBAAmB,IAAMhE,EAAEP,OAAO2Q,eAAiB,IAAMpQ,EAAEP,OAAO6Q,eAAiB,IAAMtQ,EAAEP,OAAOwQ,0BAA4B,IAAMjQ,EAAEP,OAAO4Q,wBAA0B,IAAMrQ,EAAEP,OAAO8Q,wBACpN,IAAItQ,GAAcD,EAAEE,OAAOC,GAAGH,EAAEI,YAEhCH,GAAY+T,SAAShU,EAAEP,OAAOuE,kBAC1BvE,EAAOe,OAEHP,EAAYwa,SAASza,EAAEP,OAAO0Q,qBAC9BnQ,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,SAAW/D,EAAEP,OAAO0Q,oBAAsB,8BAAgCnQ,EAAEwa,UAAY,MAAMxG,SAAShU,EAAEP,OAAOwQ,2BAG/JjQ,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,IAAM/D,EAAEP,OAAO0Q,oBAAsB,6BAA+BnQ,EAAEwa,UAAY,MAAMxG,SAAShU,EAAEP,OAAOwQ,2BAIjK,IAAIyK,GAAYza,EAAY0a,KAAK,IAAM3a,EAAEP,OAAOsE,YAAYiQ,SAAShU,EAAEP,OAAO2Q,eAC1EpQ,GAAEP,OAAOe,MAA6B,IAArBka,EAAU9Y,SAC3B8Y,EAAY1a,EAAEE,OAAOC,GAAG,GACxBua,EAAU1G,SAAShU,EAAEP,OAAO2Q,gBAGhC,IAAIwK,GAAY3a,EAAY4a,KAAK,IAAM7a,EAAEP,OAAOsE,YAAYiQ,SAAShU,EAAEP,OAAO6Q,eAsB9E,IArBItQ,EAAEP,OAAOe,MAA6B,IAArBoa,EAAUhZ,SAC3BgZ,EAAY5a,EAAEE,OAAOC,IAAG,GACxBya,EAAU5G,SAAShU,EAAEP,OAAO6Q,iBAE5B7Q,EAAOe,OAEHka,EAAUD,SAASza,EAAEP,OAAO0Q,qBAC5BnQ,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,SAAW/D,EAAEP,OAAO0Q,oBAAsB,8BAAgCuK,EAAUra,KAAK,2BAA6B,MAAM2T,SAAShU,EAAEP,OAAO4Q,yBAG7LrQ,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,IAAM/D,EAAEP,OAAO0Q,oBAAsB,6BAA+BuK,EAAUra,KAAK,2BAA6B,MAAM2T,SAAShU,EAAEP,OAAO4Q,yBAEvLuK,EAAUH,SAASza,EAAEP,OAAO0Q,qBAC5BnQ,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,SAAW/D,EAAEP,OAAO0Q,oBAAsB,8BAAgCyK,EAAUva,KAAK,2BAA6B,MAAM2T,SAAShU,EAAEP,OAAO8Q,yBAG7LvQ,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,IAAM/D,EAAEP,OAAO0Q,oBAAsB,6BAA+ByK,EAAUva,KAAK,2BAA6B,MAAM2T,SAAShU,EAAEP,OAAO8Q,0BAK3LvQ,EAAE8T,qBAAuB9T,EAAE8T,oBAAoBlS,OAAS,EAAG,CAE3D,GAAIkZ,GACAC,EAAQ/a,EAAEP,OAAOe,KAAOZ,KAAKqX,MAAMjX,EAAEE,OAAO0B,OAA0B,EAAjB5B,EAAEuP,cAAoBvP,EAAEP,OAAOmN,gBAAkB5M,EAAE6W,SAASjV,MAiCrH,IAhCI5B,EAAEP,OAAOe,MACTsa,EAAUlb,KAAKqX,MAAMjX,EAAEI,YAAcJ,EAAEuP,cAAcvP,EAAEP,OAAOmN,gBAC1DkO,EAAU9a,EAAEE,OAAO0B,OAAS,EAAqB,EAAjB5B,EAAEuP,eAClCuL,GAAqB9a,EAAEE,OAAO0B,OAA0B,EAAjB5B,EAAEuP,cAEzCuL,EAAUC,EAAQ,IAAGD,GAAoBC,GACzCD,EAAU,GAAiC,YAA5B9a,EAAEP,OAAO6O,iBAA8BwM,EAAUC,EAAQD,IAIxEA,EADuB,SAAhB9a,EAAEqa,UACCra,EAAEqa,UAGFra,EAAEI,aAAe,EAIH,YAA5BJ,EAAEP,OAAO6O,gBAAgCtO,EAAEgb,SAAWhb,EAAEgb,QAAQpZ,OAAS,IACzE5B,EAAEgb,QAAQjB,YAAY/Z,EAAEP,OAAOiR,mBAC3B1Q,EAAE8T,oBAAoBlS,OAAS,EAC/B5B,EAAEgb,QAAQvZ,KAAK,WACPlC,EAAED,MAAMoC,UAAYoZ,GAASvb,EAAED,MAAM0U,SAAShU,EAAEP,OAAOiR,qBAI/D1Q,EAAEgb,QAAQ7a,GAAG2a,GAAS9G,SAAShU,EAAEP,OAAOiR,oBAGhB,aAA5B1Q,EAAEP,OAAO6O,iBACTtO,EAAE8T,oBAAoBC,KAAK,IAAM/T,EAAEP,OAAOmR,wBAAwBqK,KAAKH,EAAU,GACjF9a,EAAE8T,oBAAoBC,KAAK,IAAM/T,EAAEP,OAAOoR,sBAAsBoK,KAAKF,IAEzC,aAA5B/a,EAAEP,OAAO6O,eAA+B,CACxC,GAAI4M,IAASJ,EAAU,GAAKC,EACxBI,EAASD,EACTE,EAAS,CACRpb,GAAEoD,iBACHgY,EAASF,EACTC,EAAS,GAEbnb,EAAE8T,oBAAoBC,KAAK,IAAM/T,EAAEP,OAAOsR,4BAA4B7H,UAAU,6BAA+BiS,EAAS,YAAcC,EAAS,KAAKC,WAAWrb,EAAEP,OAAOkK,OAE5I,WAA5B3J,EAAEP,OAAO6O,gBAA+BtO,EAAEP,OAAO4O,yBACjDrO,EAAE8T,oBAAoBwH,KAAKtb,EAAEP,OAAO4O,uBAAuBrO,EAAG8a,EAAU,EAAGC,IAC3E/a,EAAEW,KAAK,uBAAwBX,EAAGA,EAAE8T,oBAAoB,KAK3D9T,EAAEP,OAAOe,OACNR,EAAEP,OAAOiP,YAAc1O,EAAE0O,YAAc1O,EAAE0O,WAAW9M,OAAS,IACzD5B,EAAEsH,aACFtH,EAAE0O,WAAWsF,SAAShU,EAAEP,OAAOkR,qBAC3B3Q,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0R,KAAK6J,QAAQvb,EAAE0O,cAG9C1O,EAAE0O,WAAWqL,YAAY/Z,EAAEP,OAAOkR,qBAC9B3Q,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0R,KAAK8J,OAAOxb,EAAE0O,cAGjD1O,EAAEP,OAAOgP,YAAczO,EAAEyO,YAAczO,EAAEyO,WAAW7M,OAAS,IACzD5B,EAAEY,OACFZ,EAAEyO,WAAWuF,SAAShU,EAAEP,OAAOkR,qBAC3B3Q,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0R,KAAK6J,QAAQvb,EAAEyO,cAG9CzO,EAAEyO,WAAWsL,YAAY/Z,EAAEP,OAAOkR,qBAC9B3Q,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0R,KAAK8J,OAAOxb,EAAEyO,gBAS7DzO,EAAEyb,iBAAmB,WACjB,GAAKzb,EAAEP,OAAOqO,YACV9N,EAAE8T,qBAAuB9T,EAAE8T,oBAAoBlS,OAAS,EAAG,CAC3D,GAAI8Z,GAAiB,EACrB,IAAgC,YAA5B1b,EAAEP,OAAO6O,eAA8B,CAEvC,IAAK,GADDqN,GAAkB3b,EAAEP,OAAOe,KAAOZ,KAAKqX,MAAMjX,EAAEE,OAAO0B,OAA0B,EAAjB5B,EAAEuP,cAAoBvP,EAAEP,OAAOmN,gBAAkB5M,EAAE6W,SAASjV,OACtHqD,EAAI,EAAGA,EAAI0W,EAAiB1W,IAE7ByW,GADA1b,EAAEP,OAAOyO,uBACSlO,EAAEP,OAAOyO,uBAAuBlO,EAAGiF,EAAGjF,EAAEP,OAAOgR,aAG/C,IAAMzQ,EAAEP,OAAOsO,kBAAkB,WAAa/N,EAAEP,OAAOgR,YAAc,OAASzQ,EAAEP,OAAOsO,kBAAoB,GAGrI/N,GAAE8T,oBAAoBwH,KAAKI,GAC3B1b,EAAEgb,QAAUhb,EAAE8T,oBAAoBC,KAAK,IAAM/T,EAAEP,OAAOgR,aAClDzQ,EAAEP,OAAOuO,qBAAuBhO,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MACnD1R,EAAE0R,KAAKkK,iBAGiB,aAA5B5b,EAAEP,OAAO6O,iBAELoN,EADA1b,EAAEP,OAAO2O,yBACQpO,EAAEP,OAAO2O,yBAAyBpO,EAAGA,EAAEP,OAAOmR,uBAAwB5Q,EAAEP,OAAOoR,sBAI5F,gBAAkB7Q,EAAEP,OAAOmR,uBAAyB,4BAElC5Q,EAAEP,OAAOoR,qBAAqB,YAExD7Q,EAAE8T,oBAAoBwH,KAAKI,IAEC,aAA5B1b,EAAEP,OAAO6O,iBAELoN,EADA1b,EAAEP,OAAO0O,yBACQnO,EAAEP,OAAO0O,yBAAyBnO,EAAGA,EAAEP,OAAOsR,4BAG9C,gBAAkB/Q,EAAEP,OAAOsR,2BAA6B,YAE7E/Q,EAAE8T,oBAAoBwH,KAAKI,IAEC,WAA5B1b,EAAEP,OAAO6O,gBACTtO,EAAEW,KAAK,uBAAwBX,EAAGA,EAAE8T,oBAAoB,MAOpE9T,EAAEoW,OAAS,SAAUyF,GAWjB,QAASC,KACW9b,EAAE4E,IAAO5E,EAAEuU,SAC3BwH,GAAenc,KAAKoc,IAAIpc,KAAKwY,IAAIpY,EAAEuU,UAAWvU,EAAEyH,gBAAiBzH,EAAEwH,gBACnExH,EAAE2H,oBAAoBoU,GACtB/b,EAAE6H,oBACF7H,EAAE8H,gBAfN,GAAK9H,EAAL,CACAA,EAAEmX,sBACFnX,EAAEuX,mBACFvX,EAAE4H,iBACF5H,EAAEyb,mBACFzb,EAAE8H,gBACE9H,EAAEP,OAAOkM,WAAa3L,EAAE2L,WACxB3L,EAAE2L,UAAUsQ,KAEhB,IAAIF,EAQJ,IAAIF,EAAiB,CAEb7b,EAAEkc,YAAclc,EAAEkc,WAAWC,SAC7Bnc,EAAEkc,WAAWC,OAAS5P,QAEtBvM,EAAEP,OAAOwH,UACT6U,IACI9b,EAAEP,OAAO2K,YACTpK,EAAE8W,sBAI0B,SAA3B9W,EAAEP,OAAOgN,eAA4BzM,EAAEP,OAAOgN,cAAgB,IAAMzM,EAAEY,QAAUZ,EAAEP,OAAOoN,eAC7E7M,EAAEoc,QAAQpc,EAAEE,OAAO0B,OAAS,EAAG,GAAG,GAAO,GAGzC5B,EAAEoc,QAAQpc,EAAEI,YAAa,GAAG,GAAO,KAGhD0b,QAIH9b,GAAEP,OAAO2K,YACdpK,EAAE8W,qBAOV9W,EAAEuC,SAAW,SAAU8Z,GACfrc,EAAEP,OAAO6c,gBAAgBtc,EAAEP,OAAO6c,eAAetc,GAEjDA,EAAEP,OAAO6M,aACTtM,EAAEiT,eAIN,IAAI5P,GAAmBrD,EAAEP,OAAO4D,iBAC5BF,EAAmBnD,EAAEP,OAAO0D,gBAChCnD,GAAEP,OAAO4D,iBAAmBrD,EAAEP,OAAO0D,kBAAmB,EAExDnD,EAAEmX,sBACFnX,EAAEuX,oBAC6B,SAA3BvX,EAAEP,OAAOgN,eAA4BzM,EAAEP,OAAOwH,UAAYoV,IAAuBrc,EAAEyb,mBACnFzb,EAAEP,OAAOkM,WAAa3L,EAAE2L,WACxB3L,EAAE2L,UAAUsQ,MAEZjc,EAAEkc,YAAclc,EAAEkc,WAAWC,SAC7Bnc,EAAEkc,WAAWC,OAAS5P,OAE1B,IAAIgQ,IAAwB,CAC5B,IAAIvc,EAAEP,OAAOwH,SAAU,CACnB,GAAI8U,GAAenc,KAAKoc,IAAIpc,KAAKwY,IAAIpY,EAAEuU,UAAWvU,EAAEyH,gBAAiBzH,EAAEwH,eACvExH,GAAE2H,oBAAoBoU,GACtB/b,EAAE6H,oBACF7H,EAAE8H,gBAEE9H,EAAEP,OAAO2K,YACTpK,EAAE8W,uBAIN9W,GAAE8H,gBAEEyU,GAD4B,SAA3Bvc,EAAEP,OAAOgN,eAA4BzM,EAAEP,OAAOgN,cAAgB,IAAMzM,EAAEY,QAAUZ,EAAEP,OAAOoN,eAClE7M,EAAEoc,QAAQpc,EAAEE,OAAO0B,OAAS,EAAG,GAAG,GAAO,GAGzC5B,EAAEoc,QAAQpc,EAAEI,YAAa,GAAG,GAAO,EAG/DJ,GAAEP,OAAO2I,cAAgBmU,GAAyBvc,EAAEqI,MACpDrI,EAAEqI,KAAKC,OAGXtI,EAAEP,OAAO4D,iBAAmBA,EAC5BrD,EAAEP,OAAO0D,iBAAmBA,EACxBnD,EAAEP,OAAO+c,eAAexc,EAAEP,OAAO+c,cAAcxc,IAQvDA,EAAEyc,oBAAsBC,MAAO,YAAaC,KAAM,YAAaC,IAAK,WAChE5a,OAAO6a,UAAUC,eAAgB9c,EAAEyc,oBAAsBC,MAAO,cAAeC,KAAM,cAAeC,IAAK,aACpG5a,OAAO6a,UAAUE,mBAAkB/c,EAAEyc,oBAAsBC,MAAO,gBAAiBC,KAAM,gBAAiBC,IAAK,gBACxH5c,EAAEgd,aACEN,MAAQ1c,EAAEwT,QAAQG,QAAU3T,EAAEP,OAAO0N,cAAiB,aAAenN,EAAEyc,mBAAmBC,MAC1FC,KAAO3c,EAAEwT,QAAQG,QAAU3T,EAAEP,OAAO0N,cAAgB,YAAcnN,EAAEyc,mBAAmBE,KACvFC,IAAM5c,EAAEwT,QAAQG,QAAU3T,EAAEP,OAAO0N,cAAgB,WAAanN,EAAEyc,mBAAmBG,MAKrF5a,OAAO6a,UAAUC,gBAAkB9a,OAAO6a,UAAUE,oBACpB,cAA/B/c,EAAEP,OAAOgK,kBAAoCzJ,EAAER,UAAYQ,EAAE4T,SAASI,SAAS,cAAgBhU,EAAEP,OAAO+J,WAI7GxJ,EAAEid,WAAa,SAAUC,GACrB,GAAIC,GAAYD,EAAS,MAAQ,KAC7BE,EAASF,EAAS,sBAAwB,mBAC1CzT,EAAmD,cAA/BzJ,EAAEP,OAAOgK,kBAAoCzJ,EAAER,UAAU,GAAKQ,EAAE4T,QAAQ,GAC5FxS,EAASpB,EAAEwT,QAAQG,MAAQlK,EAAoB/F,SAE/C2Z,IAAcrd,EAAEP,OAAO6d,MAG3B,IAAItd,EAAEud,QAAQC,GACV/T,EAAkB2T,GAAQpd,EAAEgd,YAAYN,MAAO1c,EAAEyd,cAAc,GAC/Drc,EAAOgc,GAAQpd,EAAEgd,YAAYL,KAAM3c,EAAE0d,YAAaL,GAClDjc,EAAOgc,GAAQpd,EAAEgd,YAAYJ,IAAK5c,EAAE2d,YAAY,OAE/C,CACD,GAAI3d,EAAEwT,QAAQG,MAAO,CACjB,GAAIiK,KAA0C,eAAxB5d,EAAEgd,YAAYN,QAA0B1c,EAAEwT,QAAQoK,kBAAmB5d,EAAEP,OAAOsQ,oBAAoB8N,SAAS,EAAMC,SAAS,EAChJrU,GAAkB2T,GAAQpd,EAAEgd,YAAYN,MAAO1c,EAAEyd,aAAcG,GAC/DnU,EAAkB2T,GAAQpd,EAAEgd,YAAYL,KAAM3c,EAAE0d,YAAaL,GAC7D5T,EAAkB2T,GAAQpd,EAAEgd,YAAYJ,IAAK5c,EAAE2d,WAAYC,IAE1Dne,EAAO0N,gBAAkBnN,EAAEoU,OAAO2J,MAAQ/d,EAAEoU,OAAOC,SAAa5U,EAAO0N,gBAAkBnN,EAAEwT,QAAQG,OAAS3T,EAAEoU,OAAO2J,OACtHtU,EAAkB2T,GAAQ,YAAapd,EAAEyd,cAAc,GACvD/Z,SAAS0Z,GAAQ,YAAapd,EAAE0d,YAAaL,GAC7C3Z,SAAS0Z,GAAQ,UAAWpd,EAAE2d,YAAY,IAGlD3b,OAAOob,GAAQ,SAAUpd,EAAEuC,UAGvBvC,EAAEP,OAAOgP,YAAczO,EAAEyO,YAAczO,EAAEyO,WAAW7M,OAAS,IAC7D5B,EAAEyO,WAAW0O,GAAW,QAASnd,EAAEge,aAC/Bhe,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAEyO,WAAW0O,GAAW,UAAWnd,EAAE0R,KAAKuM,aAEvEje,EAAEP,OAAOiP,YAAc1O,EAAE0O,YAAc1O,EAAE0O,WAAW9M,OAAS,IAC7D5B,EAAE0O,WAAWyO,GAAW,QAASnd,EAAEke,aAC/Ble,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0O,WAAWyO,GAAW,UAAWnd,EAAE0R,KAAKuM,aAEvEje,EAAEP,OAAOqO,YAAc9N,EAAEP,OAAOuO,sBAChChO,EAAE8T,oBAAoBqJ,GAAW,QAAS,IAAMnd,EAAEP,OAAOgR,YAAazQ,EAAEme,cACpEne,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE8T,oBAAoBqJ,GAAW,UAAW,IAAMnd,EAAEP,OAAOgR,YAAazQ,EAAE0R,KAAKuM,cAI5Gje,EAAEP,OAAOqP,eAAiB9O,EAAEP,OAAOsP,2BAA0BtF,EAAkB2T,GAAQ,QAASpd,EAAE8O,eAAe,IAEzH9O,EAAEoe,aAAe,WACbpe,EAAEid,cAENjd,EAAEqe,aAAe,WACbre,EAAEid,YAAW,IAOjBjd,EAAEse,YAAa,EACfte,EAAE8O,cAAgB,SAAU7N,GACnBjB,EAAEse,aACCte,EAAEP,OAAOqP,eAAe7N,EAAEkE,iBAC1BnF,EAAEP,OAAOsP,0BAA4B/O,EAAE2I,YACvC1H,EAAEsd,kBACFtd,EAAEud,8BAKdxe,EAAEge,YAAc,SAAU/c,GACtBA,EAAEkE,iBACEnF,EAAEY,QAAUZ,EAAEP,OAAOe,MACzBR,EAAEqF,aAENrF,EAAEke,YAAc,SAAUjd;0BACtBA,EAAEkE,iBACEnF,EAAEsH,cAAgBtH,EAAEP,OAAOe,MAC/BR,EAAEsF,aAENtF,EAAEme,aAAe,SAAUld,GACvBA,EAAEkE,gBACF,IAAIzD,GAAQnC,EAAED,MAAMoC,QAAU1B,EAAEP,OAAOmN,cACnC5M,GAAEP,OAAOe,OAAMkB,GAAgB1B,EAAEuP,cACrCvP,EAAEoc,QAAQ1a,IA0Bd1B,EAAEye,mBAAqB,SAAUxd,GAC7B,GAAIuX,GAAQxX,EAAmBC,EAAG,IAAMjB,EAAEP,OAAOsE,YAC7C2a,GAAa,CACjB,IAAIlG,EACA,IAAK,GAAIvT,GAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IAC7BjF,EAAEE,OAAO+E,KAAOuT,IAAOkG,GAAa,EAIhD,KAAIlG,IAASkG,EAOT,MAFA1e,GAAE2e,aAAepS,YACjBvM,EAAE4e,aAAerS,OAGrB,IARIvM,EAAE2e,aAAenG,EACjBxY,EAAE4e,aAAerf,EAAEiZ,GAAO9W,QAO1B1B,EAAEP,OAAOuP,qBAA0CzC,SAAnBvM,EAAE4e,cAA8B5e,EAAE4e,eAAiB5e,EAAEI,YAAa,CAClG,GACIoa,GADAqE,EAAe7e,EAAE4e,aAGjBnS,EAA2C,SAA3BzM,EAAEP,OAAOgN,cAA2BzM,EAAEyZ,uBAAyBzZ,EAAEP,OAAOgN,aAC5F,IAAIzM,EAAEP,OAAOe,KAAM,CACf,GAAIR,EAAE2I,UAAW,MACjB6R,GAAYvR,SAAS1J,EAAES,EAAE2e,cAActe,KAAK,2BAA4B,IACpEL,EAAEP,OAAOoN,eACJgS,EAAe7e,EAAEuP,aAAe9C,EAAc,GAAOoS,EAAe7e,EAAEE,OAAO0B,OAAS5B,EAAEuP,aAAe9C,EAAc,GACtHzM,EAAES,UACFoe,EAAe7e,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,6BAA+ByW,EAAY,WAAaxa,EAAEP,OAAO0Q,oBAAsB,KAAKhQ,GAAG,GAAGuB,QAChKnB,WAAW,WACPP,EAAEoc,QAAQyC,IACX,IAGH7e,EAAEoc,QAAQyC,GAIVA,EAAe7e,EAAEE,OAAO0B,OAAS6K,GACjCzM,EAAES,UACFoe,EAAe7e,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,6BAA+ByW,EAAY,WAAaxa,EAAEP,OAAO0Q,oBAAsB,KAAKhQ,GAAG,GAAGuB,QAChKnB,WAAW,WACPP,EAAEoc,QAAQyC,IACX,IAGH7e,EAAEoc,QAAQyC,OAKlB7e,GAAEoc,QAAQyC,IAKtB,IAAIC,GACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAI4BC,EAG5BC,EALAC,EAAe,yCAEfC,EAAgBjX,KAAKkX,MAErBC,IAIJ3f,GAAE2I,WAAY,EAGd3I,EAAE4f,SACEC,OAAQ,EACRC,OAAQ,EACRC,SAAU,EACVC,SAAU,EACVC,KAAM,EAIV,IAAIC,GAAcC,CAClBngB,GAAEyd,aAAe,SAAUxc,GAGvB,GAFIA,EAAE8B,gBAAe9B,EAAIA,EAAE8B,gBAC3Bmd,EAA0B,eAAXjf,EAAEmf,SACI,SAAWnf,KAAiB,IAAZA,EAAEof,MAAvC,CACA,GAAIrgB,EAAEP,OAAOoQ,WAAa7O,EAAmBC,EAAG,IAAMjB,EAAEP,OAAOqQ,gBAE3D,YADA9P,EAAEse,YAAa,EAGnB,KAAIte,EAAEP,OAAOmQ,cACJ5O,EAAmBC,EAAGjB,EAAEP,OAAOmQ,cADxC,CAIA,GAAIiQ,GAAS7f,EAAE4f,QAAQG,SAAsB,eAAX9e,EAAEmf,KAAwBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,MACrFT,EAAS9f,EAAE4f,QAAQI,SAAsB,eAAX/e,EAAEmf,KAAwBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,KAGzF,MAAGxgB,EAAEoU,OAAO2J,KAAO/d,EAAEP,OAAOmK,uBAAyBiW,GAAU7f,EAAEP,OAAOoK,uBAAxE,CAgBA,GAZAiV,GAAY,EACZC,GAAU,EACVC,GAAsB,EACtBE,EAAc3S,OACd4T,EAAc5T,OACdvM,EAAE4f,QAAQC,OAASA,EACnB7f,EAAE4f,QAAQE,OAASA,EACnBb,EAAiBzW,KAAKkX,MACtB1f,EAAEse,YAAa,EACfte,EAAEmX,sBACFnX,EAAEygB,eAAiBlU,OACfvM,EAAEP,OAAOiO,UAAY,IAAG2R,GAAqB,GAClC,eAAXpe,EAAEmf,KAAuB,CACzB,GAAIjb,IAAiB,CACjB5F,GAAE0B,EAAEG,QAAQC,GAAGme,KAAera,GAAiB,GAC/CzB,SAASC,eAAiBpE,EAAEmE,SAASC,eAAetC,GAAGme,IACvD9b,SAASC,cAAc+c,OAEvBvb,GACAlE,EAAEkE,iBAGVnF,EAAEW,KAAK,eAAgBX,EAAGiB,OAG9BjB,EAAE0d,YAAc,SAAUzc,GAEtB,GADIA,EAAE8B,gBAAe9B,EAAIA,EAAE8B,gBACvBmd,GAA2B,cAAXjf,EAAEmf,KAAtB,CACA,GAAInf,EAAE0f,wBAGF,MAFA3gB,GAAE4f,QAAQC,OAAoB,cAAX5e,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,WACzEvgB,EAAE4f,QAAQE,OAAoB,cAAX7e,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,MAG7E,IAAIxgB,EAAEP,OAAOgO,aAQT,MANAzN,GAAEse,YAAa,OACXQ,IACA9e,EAAE4f,QAAQC,OAAS7f,EAAE4f,QAAQG,SAAsB,cAAX9e,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,MAC9FvgB,EAAE4f,QAAQE,OAAS9f,EAAE4f,QAAQI,SAAsB,cAAX/e,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,MAC9FvB,EAAiBzW,KAAKkX,OAI9B,IAAIQ,GAAgBlgB,EAAEP,OAAOmO,sBAAwB5N,EAAEP,OAAOe,KAC1D,GAAKR,EAAEoD,gBAUH,GACKpD,EAAE4f,QAAQG,SAAW/f,EAAE4f,QAAQC,QAAU7f,EAAEuU,WAAavU,EAAEyH,gBAC1DzH,EAAE4f,QAAQG,SAAW/f,EAAE4f,QAAQC,QAAU7f,EAAEuU,WAAavU,EAAEwH,eAE3D,WAZJ,IACKxH,EAAE4f,QAAQI,SAAWhgB,EAAE4f,QAAQE,QAAU9f,EAAEuU,WAAavU,EAAEyH,gBAC1DzH,EAAE4f,QAAQI,SAAWhgB,EAAE4f,QAAQE,QAAU9f,EAAEuU,WAAavU,EAAEwH,eAE3D,MAYZ,IAAI0Y,GAAgBxc,SAASC,eACrB1C,EAAEG,SAAWsC,SAASC,eAAiBpE,EAAE0B,EAAEG,QAAQC,GAAGme,GAGtD,MAFAT,IAAU,OACV/e,EAAEse,YAAa,EAOvB,IAHIU,GACAhf,EAAEW,KAAK,cAAeX,EAAGiB,KAEzBA,EAAEqf,eAAiBrf,EAAEqf,cAAc1e,OAAS,GAAhD,CAKA,GAHA5B,EAAE4f,QAAQG,SAAsB,cAAX9e,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,MAC3EvgB,EAAE4f,QAAQI,SAAsB,cAAX/e,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,MAEhD,SAAhBtB,EAA6B,CACpC,GAAIhS,EACAlN,GAAEoD,gBAAkBpD,EAAE4f,QAAQI,WAAahgB,EAAE4f,QAAQE,SAAW9f,EAAEoD,gBAAkBpD,EAAE4f,QAAQG,WAAa/f,EAAE4f,QAAQC,OACrHX,GAAc,GAGdhS,EAA4H,IAA/GtN,KAAKghB,MAAMhhB,KAAKmH,IAAI/G,EAAE4f,QAAQI,SAAWhgB,EAAE4f,QAAQE,QAASlgB,KAAKmH,IAAI/G,EAAE4f,QAAQG,SAAW/f,EAAE4f,QAAQC,SAAiBjgB,KAAKihB,GACvI3B,EAAclf,EAAEoD,eAAiB8J,EAAalN,EAAEP,OAAOyN,WAAc,GAAKA,EAAalN,EAAEP,OAAOyN,YAWxG,GARIgS,GACAlf,EAAEW,KAAK,sBAAuBX,EAAGiB,GAEV,SAAhBkf,IACHngB,EAAE4f,QAAQG,WAAa/f,EAAE4f,QAAQC,QAAU7f,EAAE4f,QAAQI,WAAahgB,EAAE4f,QAAQE,SAC5EK,GAAc,IAGjBrB,EAAL,CACA,GAAII,EAEA,YADAJ,GAAY,EAGhB,IAAKqB,EAAL,CAGAngB,EAAEse,YAAa,EACfte,EAAEW,KAAK,eAAgBX,EAAGiB,GAC1BA,EAAEkE,iBACEnF,EAAEP,OAAOkO,2BAA6B3N,EAAEP,OAAO6d,QAC/Crc,EAAEsd,kBAGDQ,IACGtf,EAAOe,MACPR,EAAES,UAEN2e,EAAiBpf,EAAEmH,sBACnBnH,EAAE0H,qBAAqB,GACnB1H,EAAE2I,WACF3I,EAAE4T,QAAQkN,QAAQ,oFAElB9gB,EAAEP,OAAOK,UAAYE,EAAEuW,cACnBvW,EAAEP,OAAO8I,6BACTvI,EAAEc,eAGFd,EAAE2W,iBAGV4I,GAAsB,GAElBvf,EAAEP,OAAOoP,YAAe7O,EAAEP,OAAO0D,oBAAqB,GAAQnD,EAAEP,OAAO4D,oBAAqB,GAC5FrD,EAAE8U,eAAc,IAGxBiK,GAAU,CAEV,IAAIkB,GAAOjgB,EAAE4f,QAAQK,KAAOjgB,EAAEoD,eAAiBpD,EAAE4f,QAAQG,SAAW/f,EAAE4f,QAAQC,OAAS7f,EAAE4f,QAAQI,SAAWhgB,EAAE4f,QAAQE,MAEtHG,IAAcjgB,EAAEP,OAAOwN,WACnBjN,EAAE4E,MAAKqb,GAAQA,GAEnBjgB,EAAEygB,eAAiBR,EAAO,EAAI,OAAS,OACvCd,EAAmBc,EAAOb,CAE1B,IAAI2B,IAAsB,CAwB1B,IAvBKd,EAAO,GAAKd,EAAmBnf,EAAEwH,gBAClCuZ,GAAsB,EAClB/gB,EAAEP,OAAO8O,aAAY4Q,EAAmBnf,EAAEwH,eAAiB,EAAI5H,KAAKohB,KAAKhhB,EAAEwH,eAAiB4X,EAAiBa,EAAMjgB,EAAEP,OAAO+O,mBAE3HyR,EAAO,GAAKd,EAAmBnf,EAAEyH,iBACtCsZ,GAAsB,EAClB/gB,EAAEP,OAAO8O,aAAY4Q,EAAmBnf,EAAEyH,eAAiB,EAAI7H,KAAKohB,IAAIhhB,EAAEyH,eAAiB2X,EAAiBa,EAAMjgB,EAAEP,OAAO+O,mBAG/HuS,IACA9f,EAAE0f,yBAA0B,IAI3B3gB,EAAEP,OAAO0D,kBAAyC,SAArBnD,EAAEygB,gBAA6BtB,EAAmBC,IAChFD,EAAmBC,IAElBpf,EAAEP,OAAO4D,kBAAyC,SAArBrD,EAAEygB,gBAA6BtB,EAAmBC,IAChFD,EAAmBC,GAKnBpf,EAAEP,OAAOiO,UAAY,EAAG,CACxB,KAAI9N,KAAKmH,IAAIkZ,GAAQjgB,EAAEP,OAAOiO,WAAa2R,GAYvC,YADAF,EAAmBC,EAVnB,KAAKC,EAMD,MALAA,IAAqB,EACrBrf,EAAE4f,QAAQC,OAAS7f,EAAE4f,QAAQG,SAC7B/f,EAAE4f,QAAQE,OAAS9f,EAAE4f,QAAQI,SAC7Bb,EAAmBC,OACnBpf,EAAE4f,QAAQK,KAAOjgB,EAAEoD,eAAiBpD,EAAE4f,QAAQG,SAAW/f,EAAE4f,QAAQC,OAAS7f,EAAE4f,QAAQI,SAAWhgB,EAAE4f,QAAQE,QAUlH9f,EAAEP,OAAO+N,gBAGVxN,EAAEP,OAAOwH,UAAYjH,EAAEP,OAAOkP,sBAC9B3O,EAAE6H,oBAEF7H,EAAEP,OAAOwH,WAEiB,IAAtB0Y,EAAW/d,QACX+d,EAAW9c,MACPqE,SAAUlH,EAAE4f,QAAQ5f,EAAEoD,eAAiB,SAAW,UAClD6d,KAAMhC,IAGdU,EAAW9c,MACPqE,SAAUlH,EAAE4f,QAAQ5f,EAAEoD,eAAiB,WAAa,YACpD6d,MAAM,GAAKjf,QAAOwG,MAAQC,aAIlCzI,EAAE4H,eAAeuX,GAEjBnf,EAAE2H,oBAAoBwX,SAE1Bnf,EAAE2d,WAAa,SAAU1c,GAMrB,GALIA,EAAE8B,gBAAe9B,EAAIA,EAAE8B,eACvBic,GACAhf,EAAEW,KAAK,aAAcX,EAAGiB,GAE5B+d,GAAsB,EACjBF,EAAL,CAEI9e,EAAEP,OAAOoP,YAAckQ,GAAWD,IAAe9e,EAAEP,OAAO0D,oBAAqB,GAAQnD,EAAEP,OAAO4D,oBAAqB,IACrHrD,EAAE8U,eAAc,EAIpB,IAAIoM,GAAe1Y,KAAKkX,MACpByB,EAAWD,EAAejC,CA4B9B,IAzBIjf,EAAEse,aACFte,EAAEye,mBAAmBxd,GACrBjB,EAAEW,KAAK,QAASX,EAAGiB,GACfkgB,EAAW,KAAQD,EAAezB,EAAiB,MAC/CH,GAActX,aAAasX,GAC/BA,EAAe/e,WAAW,WACjBP,IACDA,EAAEP,OAAOwO,gBAAkBjO,EAAE8T,oBAAoBlS,OAAS,IAAMrC,EAAE0B,EAAEG,QAAQqZ,SAASza,EAAEP,OAAOgR,cAC9FzQ,EAAE8T,oBAAoBsN,YAAYphB,EAAEP,OAAOqR,uBAE/C9Q,EAAEW,KAAK,UAAWX,EAAGiB,KACtB,MAGHkgB,EAAW,KAAQD,EAAezB,EAAiB,MAC/CH,GAActX,aAAasX,GAC/Btf,EAAEW,KAAK,cAAeX,EAAGiB,KAIjCwe,EAAgBjX,KAAKkX,MACrBnf,WAAW,WACHP,IAAGA,EAAEse,YAAa,IACvB,IAEEQ,IAAcC,IAAY/e,EAAEygB,gBAAqC,IAAnBzgB,EAAE4f,QAAQK,MAAcd,IAAqBC,EAE5F,YADAN,EAAYC,GAAU,EAG1BD,GAAYC,GAAU,CAEtB,IAAIsC,EAOJ,IALIA,EADArhB,EAAEP,OAAO+N,aACIxN,EAAE4E,IAAM5E,EAAEuU,WAAavU,EAAEuU,WAGxB4K,EAEdnf,EAAEP,OAAOwH,SAAU,CACnB,GAAIoa,GAAcrhB,EAAEwH,eAEhB,WADAxH,GAAEoc,QAAQpc,EAAEI,YAGX,IAAIihB,GAAcrhB,EAAEyH,eAOrB,YANIzH,EAAEE,OAAO0B,OAAS5B,EAAE6W,SAASjV,OAC7B5B,EAAEoc,QAAQpc,EAAE6W,SAASjV,OAAS,GAG9B5B,EAAEoc,QAAQpc,EAAEE,OAAO0B,OAAS,GAKpC,IAAI5B,EAAEP,OAAOqK,iBAAkB,CAC3B,GAAI6V,EAAW/d,OAAS,EAAG,CACvB,GAAI0f,GAAgB3B,EAAW4B,MAAOC,EAAgB7B,EAAW4B,MAE7DE,EAAWH,EAAcpa,SAAWsa,EAActa,SAClD+Z,EAAOK,EAAcL,KAAOO,EAAcP,IAC9CjhB,GAAEwU,SAAWiN,EAAWR,EACxBjhB,EAAEwU,SAAWxU,EAAEwU,SAAW,EACtB5U,KAAKmH,IAAI/G,EAAEwU,UAAYxU,EAAEP,OAAO0K,0BAChCnK,EAAEwU,SAAW,IAIbyM,EAAO,MAAQ,GAAIjf,QAAOwG,MAAOC,UAAY6Y,EAAcL,KAAQ,OACnEjhB,EAAEwU,SAAW,OAGjBxU,GAAEwU,SAAW,CAEjBxU,GAAEwU,SAAWxU,EAAEwU,SAAWxU,EAAEP,OAAOyK,8BAEnCyV,EAAW/d,OAAS,CACpB,IAAI8f,GAAmB,IAAO1hB,EAAEP,OAAOsK,sBACnC4X,EAAmB3hB,EAAEwU,SAAWkN,EAEhCE,EAAc5hB,EAAEuU,UAAYoN,CAC5B3hB,GAAE4E,MAAKgd,GAAgBA,EAC3B,IACIC,GADAC,GAAW,EAEXC,EAAsC,GAAvBniB,KAAKmH,IAAI/G,EAAEwU,UAAiBxU,EAAEP,OAAOwK,2BACxD,IAAI2X,EAAc5hB,EAAEyH,eACZzH,EAAEP,OAAOuK,wBACL4X,EAAc5hB,EAAEyH,gBAAkBsa,IAClCH,EAAc5hB,EAAEyH,eAAiBsa,GAErCF,EAAsB7hB,EAAEyH,eACxBqa,GAAW,EACXvC,GAAsB,GAGtBqC,EAAc5hB,EAAEyH,mBAGnB,IAAIma,EAAc5hB,EAAEwH,eACjBxH,EAAEP,OAAOuK,wBACL4X,EAAc5hB,EAAEwH,eAAiBua,IACjCH,EAAc5hB,EAAEwH,eAAiBua,GAErCF,EAAsB7hB,EAAEwH,eACxBsa,GAAW,EACXvC,GAAsB,GAGtBqC,EAAc5hB,EAAEwH,mBAGnB,IAAIxH,EAAEP,OAAOsI,eAAgB,CAC9B,GACI2S,GADAhB,EAAI,CAER,KAAKA,EAAI,EAAGA,EAAI1Z,EAAE6W,SAASjV,OAAQ8X,GAAK,EACpC,GAAI1Z,EAAE6W,SAAS6C,IAAMkI,EAAa,CAC9BlH,EAAYhB,CACZ,OAKJkI,EADAhiB,KAAKmH,IAAI/G,EAAE6W,SAAS6D,GAAakH,GAAehiB,KAAKmH,IAAI/G,EAAE6W,SAAS6D,EAAY,GAAKkH,IAAqC,SAArB5hB,EAAEygB,eACzFzgB,EAAE6W,SAAS6D,GAEX1a,EAAE6W,SAAS6D,EAAY,GAEpC1a,EAAE4E,MAAKgd,GAAgBA,GAGhC,GAAmB,IAAf5hB,EAAEwU,SAEEkN,EADA1hB,EAAE4E,IACiBhF,KAAKmH,MAAM6a,EAAc5hB,EAAEuU,WAAavU,EAAEwU,UAG1C5U,KAAKmH,KAAK6a,EAAc5hB,EAAEuU,WAAavU,EAAEwU,cAG/D,IAAIxU,EAAEP,OAAOsI,eAEd,WADA/H,GAAEmI,YAIFnI,GAAEP,OAAOuK,wBAA0B8X,GACnC9hB,EAAE4H,eAAeia,GACjB7hB,EAAE0H,qBAAqBga,GACvB1hB,EAAE2H,oBAAoBia,GACtB5hB,EAAEgiB,oBACFhiB,EAAE2I,WAAY,EACd3I,EAAE4T,QAAQgD,cAAc,WACf5W,GAAMuf,IACXvf,EAAEW,KAAK,mBAAoBX,GAE3BA,EAAE0H,qBAAqB1H,EAAEP,OAAOkK,OAChC3J,EAAE2H,oBAAoBka,GACtB7hB,EAAE4T,QAAQgD,cAAc,WACf5W,GACLA,EAAEiiB,wBAGHjiB,EAAEwU,UACTxU,EAAE4H,eAAega,GACjB5hB,EAAE0H,qBAAqBga,GACvB1hB,EAAE2H,oBAAoBia,GACtB5hB,EAAEgiB,oBACGhiB,EAAE2I,YACH3I,EAAE2I,WAAY,EACd3I,EAAE4T,QAAQgD,cAAc,WACf5W,GACLA,EAAEiiB,sBAKVjiB,EAAE4H,eAAega,GAGrB5hB,EAAE6H,oBAMN,cAJK7H,EAAEP,OAAOqK,kBAAoBqX,GAAYnhB,EAAEP,OAAO8N,gBACnDvN,EAAE4H,iBACF5H,EAAE6H,sBAMV,GAAI5C,GAAGid,EAAY,EAAGC,EAAYniB,EAAEyX,gBAAgB,EACpD,KAAKxS,EAAI,EAAGA,EAAIjF,EAAEwX,WAAW5V,OAAQqD,GAAKjF,EAAEP,OAAOmN,eACU,SAA9C5M,EAAEwX,WAAWvS,EAAIjF,EAAEP,OAAOmN,gBAC7ByU,GAAcrhB,EAAEwX,WAAWvS,IAAMoc,EAAarhB,EAAEwX,WAAWvS,EAAIjF,EAAEP,OAAOmN,kBACxEsV,EAAYjd,EACZkd,EAAYniB,EAAEwX,WAAWvS,EAAIjF,EAAEP,OAAOmN,gBAAkB5M,EAAEwX,WAAWvS,IAIrEoc,GAAcrhB,EAAEwX,WAAWvS,KAC3Bid,EAAYjd,EACZkd,EAAYniB,EAAEwX,WAAWxX,EAAEwX,WAAW5V,OAAS,GAAK5B,EAAEwX,WAAWxX,EAAEwX,WAAW5V,OAAS,GAMnG,IAAIwgB,IAASf,EAAarhB,EAAEwX,WAAW0K,IAAcC,CAErD,IAAIhB,EAAWnhB,EAAEP,OAAO8N,aAAc,CAElC,IAAKvN,EAAEP,OAAO4N,WAEV,WADArN,GAAEoc,QAAQpc,EAAEI,YAGS,UAArBJ,EAAEygB,iBACE2B,GAASpiB,EAAEP,OAAO6N,gBAAiBtN,EAAEoc,QAAQ8F,EAAYliB,EAAEP,OAAOmN,gBACjE5M,EAAEoc,QAAQ8F,IAGM,SAArBliB,EAAEygB,iBACE2B,EAAS,EAAIpiB,EAAEP,OAAO6N,gBAAkBtN,EAAEoc,QAAQ8F,EAAYliB,EAAEP,OAAOmN,gBACtE5M,EAAEoc,QAAQ8F,QAGlB,CAED,IAAKliB,EAAEP,OAAO2N,YAEV,WADApN,GAAEoc,QAAQpc,EAAEI,YAGS,UAArBJ,EAAEygB,gBACFzgB,EAAEoc,QAAQ8F,EAAYliB,EAAEP,OAAOmN,gBAGV,SAArB5M,EAAEygB,gBACFzgB,EAAEoc,QAAQ8F,MAOtBliB,EAAEe,SAAW,SAAUshB,EAAY1Y,GAC/B,MAAO3J,GAAEoc,QAAQiG,EAAY1Y,GAAO,GAAM,IAE9C3J,EAAEoc,QAAU,SAAUiG,EAAY1Y,EAAO2Y,EAAc5L,GACvB,SAAjB4L,IAA8BA,GAAe,GAC9B,SAAfD,IAA4BA,EAAa,GAChDA,EAAa,IAAGA,EAAa,GACjCriB,EAAEqa,UAAYza,KAAKC,MAAMwiB,EAAariB,EAAEP,OAAOmN,gBAC3C5M,EAAEqa,WAAara,EAAE6W,SAASjV,SAAQ5B,EAAEqa,UAAYra,EAAE6W,SAASjV,OAAS,EAExE,IAAI2S,IAAcvU,EAAE6W,SAAS7W,EAAEqa,UAc/B,IAZIra,EAAEP,OAAOK,UAAYE,EAAEuW,cACnBG,IAAa1W,EAAEP,OAAO8I,6BACtBvI,EAAE2W,cAAchN,GAGhB3J,EAAEc,gBAIVd,EAAE4H,eAAe2M,GAGdvU,EAAEP,OAAOkQ,oBACR,IAAK,GAAI1K,GAAI,EAAGA,EAAIjF,EAAEwX,WAAW5V,OAAQqD,KAC/BrF,KAAKC,MAAkB,IAAZ0U,IAAoB3U,KAAKC,MAAwB,IAAlBG,EAAEwX,WAAWvS,MACzDod,EAAapd,EAMzB,UAAKjF,EAAEP,OAAO0D,kBAAoBoR,EAAYvU,EAAEuU,WAAaA,EAAYvU,EAAEwH,qBAGtExH,EAAEP,OAAO4D,kBAAoBkR,EAAYvU,EAAEuU,WAAaA,EAAYvU,EAAEyH,iBAClEzH,EAAEI,aAAe,KAAOiiB,KAIZ,SAAV1Y,IAAuBA,EAAQ3J,EAAEP,OAAOkK,OACnD3J,EAAEsa,cAAgBta,EAAEI,aAAe,EACnCJ,EAAEI,YAAciiB,EAChBriB,EAAEua,kBACGva,EAAE4E,MAAQ2P,IAAcvU,EAAEuU,YAAgBvU,EAAE4E,KAAO2P,IAAcvU,EAAEuU,WAEhEvU,EAAEP,OAAO2K,YACTpK,EAAE8W,mBAEN9W,EAAE8H,gBACsB,UAApB9H,EAAEP,OAAO8K,QACTvK,EAAE2H,oBAAoB4M,IAEnB,IAEXvU,EAAE8H,gBACF9H,EAAEgiB,kBAAkBM,GAEN,IAAV3Y,GAAe3J,EAAEud,QAAQgF,QACzBviB,EAAE2H,oBAAoB4M,GACtBvU,EAAE0H,qBAAqB,GACvB1H,EAAEiiB,gBAAgBK,KAGlBtiB,EAAE2H,oBAAoB4M,GACtBvU,EAAE0H,qBAAqBiC,GAClB3J,EAAE2I,YACH3I,EAAE2I,WAAY,EACd3I,EAAE4T,QAAQgD,cAAc,WACf5W,GACLA,EAAEiiB,gBAAgBK,QAMvB,MAGXtiB,EAAEgiB,kBAAoB,SAAUM,GACA,SAAjBA,IAA8BA,GAAe,GACpDtiB,EAAEP,OAAO2K,YACTpK,EAAE8W,mBAEF9W,EAAEqI,MAAMrI,EAAEqI,KAAK2Z,oBACfM,IACAtiB,EAAEW,KAAK,oBAAqBX,GACxBA,EAAEI,cAAgBJ,EAAEsa,gBACpBta,EAAEW,KAAK,qBAAsBX,GACzBA,EAAEI,YAAcJ,EAAEsa,cAClBta,EAAEW,KAAK,mBAAoBX,GAG3BA,EAAEW,KAAK,mBAAoBX,MAM3CA,EAAEiiB,gBAAkB,SAAUK,GAC1BtiB,EAAE2I,WAAY,EACd3I,EAAE0H,qBAAqB,GACK,SAAjB4a,IAA8BA,GAAe,GACpDtiB,EAAEqI,MAAMrI,EAAEqI,KAAK4Z,kBACfK,IACAtiB,EAAEW,KAAK,kBAAmBX,GACtBA,EAAEI,cAAgBJ,EAAEsa,gBACpBta,EAAEW,KAAK,mBAAoBX,GACvBA,EAAEI,YAAcJ,EAAEsa,cAClBta,EAAEW,KAAK,iBAAkBX,GAGzBA,EAAEW,KAAK,iBAAkBX,KAIjCA,EAAEP,OAAO2M,SAAWpM,EAAEoM,SACtBpM,EAAEoM,QAAQoW,WAAWxiB,EAAEP,OAAO2M,QAASpM,EAAEI,aAEzCJ,EAAEP,OAAOyM,SAAWlM,EAAEkM,SACtBlM,EAAEkM,QAAQuW,WAIlBziB,EAAEqF,UAAY,SAAUid,EAAc3Y,EAAO+M,GACzC,GAAI1W,EAAEP,OAAOe,KAAM,CACf,GAAIR,EAAE2I,UAAW,OAAO,CACxB3I,GAAES,SACeT,GAAER,UAAU,GAAGkjB,UAChC,OAAO1iB,GAAEoc,QAAQpc,EAAEI,YAAcJ,EAAEP,OAAOmN,eAAgBjD,EAAO2Y,EAAc5L,GAE9E,MAAO1W,GAAEoc,QAAQpc,EAAEI,YAAcJ,EAAEP,OAAOmN,eAAgBjD,EAAO2Y,EAAc5L,IAExF1W,EAAEU,WAAa,SAAUiJ,GACrB,MAAO3J,GAAEqF,WAAU,EAAMsE,GAAO,IAEpC3J,EAAEsF,UAAY,SAAUgd,EAAc3Y,EAAO+M,GACzC,GAAI1W,EAAEP,OAAOe,KAAM,CACf,GAAIR,EAAE2I,UAAW,OAAO,CACxB3I,GAAES,SACeT,GAAER,UAAU,GAAGkjB,UAChC,OAAO1iB,GAAEoc,QAAQpc,EAAEI,YAAc,EAAGuJ,EAAO2Y,EAAc5L,GAExD,MAAO1W,GAAEoc,QAAQpc,EAAEI,YAAc,EAAGuJ,EAAO2Y,EAAc5L,IAElE1W,EAAE2iB,WAAa,SAAUhZ,GACrB,MAAO3J,GAAEsF,WAAU,EAAMqE,GAAO,IAEpC3J,EAAEmI,WAAa,SAAUma,EAAc3Y,EAAO+M,GAC1C,MAAO1W,GAAEoc,QAAQpc,EAAEI,YAAauJ,EAAO2Y,IAG3CtiB,EAAE4iB,oBAAsB,WAEpB,MADA5iB,GAAEP,OAAOgO,cAAe,GACjB,GAEXzN,EAAE6iB,mBAAqB,WAEnB,MADA7iB,GAAEP,OAAOgO,cAAe,GACjB,GAMXzN,EAAE0H,qBAAuB,SAAUob,EAAUC,GACzC/iB,EAAE4T,QAAQyH,WAAWyH,GACG,UAApB9iB,EAAEP,OAAO8K,QAAsBvK,EAAEgjB,QAAQhjB,EAAEP,OAAO8K,SAClDvK,EAAEgjB,QAAQhjB,EAAEP,OAAO8K,QAAQ0Y,cAAcH,GAEzC9iB,EAAEP,OAAO6L,UAAYtL,EAAEsL,UACvBtL,EAAEsL,SAAS2X,cAAcH,GAEzB9iB,EAAEP,OAAOkM,WAAa3L,EAAE2L,WACxB3L,EAAE2L,UAAUsX,cAAcH,GAE1B9iB,EAAEP,OAAO+P,SAAWxP,EAAEkc,YACtBlc,EAAEkc,WAAW+G,cAAcH,EAAUC,GAEzC/iB,EAAEW,KAAK,kBAAmBX,EAAG8iB,IAEjC9iB,EAAE2H,oBAAsB,SAAU4M,EAAW1M,EAAmBkb,GAC5D,GAAIG,GAAI,EAAGC,EAAI,CACXnjB,GAAEoD,eACF8f,EAAIljB,EAAE4E,KAAO2P,EAAYA,EAGzB4O,EAAI5O,EAGJvU,EAAEP,OAAOuN,eACTkW,EAAIxjB,EAAMwjB,GACVC,EAAIzjB,EAAMyjB,IAGTnjB,EAAEP,OAAO6K,mBACNtK,EAAEwT,QAAQE,aAAc1T,EAAE4T,QAAQ1K,UAAU,eAAiBga,EAAI,OAASC,EAAI,YAC7EnjB,EAAE4T,QAAQ1K,UAAU,aAAega,EAAI,OAASC,EAAI,QAG7DnjB,EAAEuU,UAAYvU,EAAEoD,eAAiB8f,EAAIC,CAGrC,IAAIra,GACAqR,EAAiBna,EAAEyH,eAAiBzH,EAAEwH,cAEtCsB,GADmB,IAAnBqR,EACW,GAGC5F,EAAYvU,EAAEwH,gBAAkB,EAE5CsB,IAAa9I,EAAE8I,UACf9I,EAAE4H,eAAe2M,GAGjB1M,GAAmB7H,EAAE6H,oBACD,UAApB7H,EAAEP,OAAO8K,QAAsBvK,EAAEgjB,QAAQhjB,EAAEP,OAAO8K,SAClDvK,EAAEgjB,QAAQhjB,EAAEP,OAAO8K,QAAQ6Y,aAAapjB,EAAEuU,WAE1CvU,EAAEP,OAAO6L,UAAYtL,EAAEsL,UACvBtL,EAAEsL,SAAS8X,aAAapjB,EAAEuU,WAE1BvU,EAAEP,OAAOkM,WAAa3L,EAAE2L,WACxB3L,EAAE2L,UAAUyX,aAAapjB,EAAEuU,WAE3BvU,EAAEP,OAAO+P,SAAWxP,EAAEkc,YACtBlc,EAAEkc,WAAWkH,aAAapjB,EAAEuU,UAAWwO,GAE3C/iB,EAAEW,KAAK,iBAAkBX,EAAGA,EAAEuU,YAGlCvU,EAAEqjB,aAAe,SAAUliB,EAAI8E,GAC3B,GAAIqd,GAAQC,EAAcC,EAAUC,CAOpC,OAJoB,UAATxd,IACPA,EAAO,KAGPjG,EAAEP,OAAO6K,iBACFtK,EAAE4E,KAAO5E,EAAEuU,UAAYvU,EAAEuU,WAGpCiP,EAAWxhB,OAAO0hB,iBAAiBviB,EAAI,MACnCa,OAAO2hB,iBACPJ,EAAeC,EAASta,WAAasa,EAASI,gBAC1CL,EAAaM,MAAM,KAAKjiB,OAAS,IACjC2hB,EAAeA,EAAaM,MAAM,MAAMC,IAAI,SAASnkB,GACjD,MAAOA,GAAEkY,QAAQ,IAAI,OACtBvD,KAAK,OAIZmP,EAAkB,GAAIzhB,QAAO2hB,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAG5EE,EAAkBD,EAASO,cAAgBP,EAASQ,YAAcR,EAASS,aAAeT,EAASU,aAAgBV,EAASta,WAAasa,EAASW,iBAAiB,aAAatM,QAAQ,aAAc,sBACtMyL,EAASG,EAAgBW,WAAWP,MAAM,MAGjC,MAAT5d,IAGIsd,EADAvhB,OAAO2hB,gBACQF,EAAgBY,IAER,KAAlBf,EAAO1hB,OACGgW,WAAW0L,EAAO,KAGlB1L,WAAW0L,EAAO,KAE5B,MAATrd,IAGIsd,EADAvhB,OAAO2hB,gBACQF,EAAgBa,IAER,KAAlBhB,EAAO1hB,OACGgW,WAAW0L,EAAO,KAGlB1L,WAAW0L,EAAO,KAErCtjB,EAAE4E,KAAO2e,IAAcA,GAAgBA,GACpCA,GAAgB,IAE3BvjB,EAAEmH,oBAAsB,SAAUlB,GAI9B,MAHoB,UAATA,IACPA,EAAOjG,EAAEoD,eAAiB,IAAM,KAE7BpD,EAAEqjB,aAAarjB,EAAE4T,QAAQ,GAAI3N,IAMxCjG,EAAE4C,aAoBF5C,EAAEukB,cAAgB,WACd,GAAIvkB,EAAEP,OAAOgS,eAET,IAAK,GADD+S,GAAmBxkB,EAAER,UAAU8B,UAC1B2D,EAAI,EAAGA,EAAIuf,EAAiB5iB,OAAQqD,IACzCpD,EAAa2iB,EAAiBvf,GAKtCpD,GAAa7B,EAAER,UAAU,IAAKkD,WAAW,IAGzCb,EAAa7B,EAAE4T,QAAQ,IAAKnR,YAAY,KAE5CzC,EAAEykB,oBAAsB,WACpB,IAAK,GAAIxf,GAAI,EAAGA,EAAIjF,EAAE4C,UAAUhB,OAAQqD,IACpCjF,EAAE4C,UAAUqC,GAAGyf,YAEnB1kB,GAAE4C,cAMN5C,EAAE2kB,WAAa,WAEX3kB,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,IAAM/D,EAAEP,OAAO0Q,qBAAqByU,QAEnF,IAAI1kB,GAASF,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAEjB,UAA3B/D,EAAEP,OAAOgN,eAA6BzM,EAAEP,OAAO8P,eAAcvP,EAAEP,OAAO8P,aAAerP,EAAO0B,QAE/F5B,EAAEuP,aAAetG,SAASjJ,EAAEP,OAAO8P,cAAgBvP,EAAEP,OAAOgN,cAAe,IAC3EzM,EAAEuP,aAAevP,EAAEuP,aAAevP,EAAEP,OAAO6P,qBACvCtP,EAAEuP,aAAerP,EAAO0B,SACxB5B,EAAEuP,aAAerP,EAAO0B,OAG5B,IAA2CqD,GAAvC4f,KAAoBC,IAOxB,KANA5kB,EAAOuB,KAAK,SAAUC,EAAOP,GACzB,GAAIqX,GAAQjZ,EAAED,KACVoC,GAAQ1B,EAAEuP,cAAcuV,EAAajiB,KAAK1B,GAC1CO,EAAQxB,EAAO0B,QAAUF,GAASxB,EAAO0B,OAAS5B,EAAEuP,cAAcsV,EAAchiB,KAAK1B,GACzFqX,EAAMnY,KAAK,0BAA2BqB,KAErCuD,EAAI,EAAGA,EAAI6f,EAAaljB,OAAQqD,IACjCjF,EAAE4T,QAAQmR,OAAOxlB,EAAEulB,EAAa7f,GAAG+f,WAAU,IAAOhR,SAAShU,EAAEP,OAAO0Q,qBAE1E,KAAKlL,EAAI4f,EAAcjjB,OAAS,EAAGqD,GAAK,EAAGA,IACvCjF,EAAE4T,QAAQqR,QAAQ1lB,EAAEslB,EAAc5f,GAAG+f,WAAU,IAAOhR,SAAShU,EAAEP,OAAO0Q,uBAGhFnQ,EAAEoT,YAAc,WACZpT,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,IAAM/D,EAAEP,OAAO0Q,qBAAqByU,SACnF5kB,EAAEE,OAAOglB,WAAW,4BAExBllB,EAAEqT,OAAS,SAAU8R,GACjB,GAAIC,GAAWplB,EAAEI,YAAcJ,EAAEuP,YACjCvP,GAAEoT,cACFpT,EAAE2kB,aACF3kB,EAAEuX,mBACE4N,GACAnlB,EAAEoc,QAAQgJ,EAAWplB,EAAEuP,aAAc,GAAG,IAIhDvP,EAAES,QAAU,WACR,GAAI4kB,EAEArlB,GAAEI,YAAcJ,EAAEuP,cAClB8V,EAAWrlB,EAAEE,OAAO0B,OAA0B,EAAjB5B,EAAEuP,aAAmBvP,EAAEI,YACpDilB,GAAsBrlB,EAAEuP,aACxBvP,EAAEoc,QAAQiJ,EAAU,GAAG,GAAO,KAGG,SAA3BrlB,EAAEP,OAAOgN,eAA4BzM,EAAEI,aAAgC,EAAjBJ,EAAEuP,cAAsBvP,EAAEI,YAAcJ,EAAEE,OAAO0B,OAAkC,EAAzB5B,EAAEP,OAAOgN,iBAC/H4Y,GAAYrlB,EAAEE,OAAO0B,OAAS5B,EAAEI,YAAcJ,EAAEuP,aAChD8V,GAAsBrlB,EAAEuP,aACxBvP,EAAEoc,QAAQiJ,EAAU,GAAG,GAAO,KAMtCrlB,EAAEslB,YAAc,SAAUplB,GAItB,GAHIF,EAAEP,OAAOe,MACTR,EAAEoT,cAEgB,gBAAXlT,IAAuBA,EAAO0B,OACrC,IAAK,GAAIqD,GAAI,EAAGA,EAAI/E,EAAO0B,OAAQqD,IAC3B/E,EAAO+E,IAAIjF,EAAE4T,QAAQmR,OAAO7kB,EAAO+E,QAI3CjF,GAAE4T,QAAQmR,OAAO7kB,EAEjBF,GAAEP,OAAOe,MACTR,EAAE2kB,aAEA3kB,EAAEP,OAAO0C,UAAYnC,EAAEwT,QAAQrR,UACjCnC,EAAEoW,QAAO,IAGjBpW,EAAEulB,aAAe,SAAUrlB,GACnBF,EAAEP,OAAOe,MACTR,EAAEoT,aAEN,IAAIgH,GAAiBpa,EAAEI,YAAc,CACrC,IAAsB,gBAAXF,IAAuBA,EAAO0B,OAAQ,CAC7C,IAAK,GAAIqD,GAAI,EAAGA,EAAI/E,EAAO0B,OAAQqD,IAC3B/E,EAAO+E,IAAIjF,EAAE4T,QAAQqR,QAAQ/kB,EAAO+E,GAE5CmV,GAAiBpa,EAAEI,YAAcF,EAAO0B,WAGxC5B,GAAE4T,QAAQqR,QAAQ/kB,EAElBF,GAAEP,OAAOe,MACTR,EAAE2kB,aAEA3kB,EAAEP,OAAO0C,UAAYnC,EAAEwT,QAAQrR,UACjCnC,EAAEoW,QAAO,GAEbpW,EAAEoc,QAAQhC,EAAgB,GAAG,IAEjCpa,EAAEwlB,YAAc,SAAUC,GAClBzlB,EAAEP,OAAOe,OACTR,EAAEoT,cACFpT,EAAEE,OAASF,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,YAEjD,IACI2hB,GADAtL,EAAiBpa,EAAEI,WAEvB,IAA6B,gBAAlBqlB,IAA8BA,EAAc7jB,OAAQ,CAC3D,IAAK,GAAIqD,GAAI,EAAGA,EAAIwgB,EAAc7jB,OAAQqD,IACtCygB,EAAgBD,EAAcxgB,GAC1BjF,EAAEE,OAAOwlB,IAAgB1lB,EAAEE,OAAOC,GAAGulB,GAAed,SACpDc,EAAgBtL,GAAgBA,GAExCA,GAAiBxa,KAAKwY,IAAIgC,EAAgB,OAG1CsL,GAAgBD,EACZzlB,EAAEE,OAAOwlB,IAAgB1lB,EAAEE,OAAOC,GAAGulB,GAAed,SACpDc,EAAgBtL,GAAgBA,IACpCA,EAAiBxa,KAAKwY,IAAIgC,EAAgB,EAG1Cpa,GAAEP,OAAOe,MACTR,EAAE2kB,aAGA3kB,EAAEP,OAAO0C,UAAYnC,EAAEwT,QAAQrR,UACjCnC,EAAEoW,QAAO,GAETpW,EAAEP,OAAOe,KACTR,EAAEoc,QAAQhC,EAAiBpa,EAAEuP,aAAc,GAAG,GAG9CvP,EAAEoc,QAAQhC,EAAgB,GAAG,IAIrCpa,EAAE2lB,gBAAkB,WAEhB,IAAK,GADDF,MACKxgB,EAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IACjCwgB,EAAc5iB,KAAKoC,EAEvBjF,GAAEwlB,YAAYC,IAOlBzlB,EAAEgjB,SACE5X,MACIgY,aAAc,WACV,IAAK,GAAIne,GAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IAAK,CACtC,GAAIuT,GAAQxY,EAAEE,OAAOC,GAAG8E,GACpBN,EAAS6T,EAAM,GAAGc,kBAClBsM,GAAMjhB,CACL3E,GAAEP,OAAO6K,mBAAkBsb,GAAU5lB,EAAEuU,UAC5C,IAAIsR,GAAK,CACJ7lB,GAAEoD,iBACHyiB,EAAKD,EACLA,EAAK,EAET,IAAIE,GAAe9lB,EAAEP,OAAO2L,KAAKC,UACzBzL,KAAKwY,IAAI,EAAIxY,KAAKmH,IAAIyR,EAAM,GAAG1P,UAAW,GAC1C,EAAIlJ,KAAKoc,IAAIpc,KAAKwY,IAAII,EAAM,GAAG1P,UAAU,GAAK,EACtD0P,GACKtE,KACG6R,QAASD,IAEZ5c,UAAU,eAAiB0c,EAAK,OAASC,EAAK,cAK3D5C,cAAe,SAAUH,GAErB,GADA9iB,EAAEE,OAAOmb,WAAWyH,GAChB9iB,EAAEP,OAAO6K,kBAAiC,IAAbwY,EAAgB,CAC7C,GAAIkD,IAAiB,CACrBhmB,GAAEE,OAAO0W,cAAc,WACnB,IAAIoP,GACChmB,EAAL,CACAgmB,GAAiB,EACjBhmB,EAAE2I,WAAY,CAEd,KAAK,GADDsd,IAAiB,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACzFhhB,EAAI,EAAGA,EAAIghB,EAAcrkB,OAAQqD,IACtCjF,EAAE4T,QAAQkN,QAAQmF,EAAchhB,UAMpD6F,MACIsY,aAAc,WACV,IAAK,GAAIne,GAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IAAK,CACtC,GAAIuT,GAAQxY,EAAEE,OAAOC,GAAG8E,GACpB6D,EAAW0P,EAAM,GAAG1P,QACpB9I,GAAEP,OAAOqL,KAAKC,gBACdjC,EAAWlJ,KAAKwY,IAAIxY,KAAKoc,IAAIxD,EAAM,GAAG1P,SAAU,IAAI,GAExD,IAAInE,GAAS6T,EAAM,GAAGc,kBAClB7O,GAAS,IAAO3B,EAChBod,EAAUzb,EACV0b,EAAU,EACVP,GAAMjhB,EACNkhB,EAAK,CAaT,IAZK7lB,EAAEoD,eAMEpD,EAAE4E,MACPshB,GAAWA,IANXL,EAAKD,EACLA,EAAK,EACLO,GAAWD,EACXA,EAAU,GAMd1N,EAAM,GAAGtD,MAAMkR,QAAUxmB,KAAKmH,IAAInH,KAAKF,MAAMoJ,IAAa9I,EAAEE,OAAO0B,OAE/D5B,EAAEP,OAAOqL,KAAKD,aAAc,CAE5B,GAAIwb,GAAermB,EAAEoD,eAAiBoV,EAAMzE,KAAK,6BAA+ByE,EAAMzE,KAAK,4BACvFuS,EAActmB,EAAEoD,eAAiBoV,EAAMzE,KAAK,8BAAgCyE,EAAMzE,KAAK,8BAC/D,KAAxBsS,EAAazkB,SACbykB,EAAe9mB,EAAE,oCAAsCS,EAAEoD,eAAiB,OAAS,OAAS,YAC5FoV,EAAMuM,OAAOsB,IAEU,IAAvBC,EAAY1kB,SACZ0kB,EAAc/mB,EAAE,oCAAsCS,EAAEoD,eAAiB,QAAU,UAAY,YAC/FoV,EAAMuM,OAAOuB,IAEbD,EAAazkB,SAAQykB,EAAa,GAAGnR,MAAM6Q,QAAUnmB,KAAKwY,KAAKtP,EAAU,IACzEwd,EAAY1kB,SAAQ0kB,EAAY,GAAGpR,MAAM6Q,QAAUnmB,KAAKwY,IAAItP,EAAU,IAG9E0P,EACKtP,UAAU,eAAiB0c,EAAK,OAASC,EAAK,oBAAsBM,EAAU,gBAAkBD,EAAU,UAGvHjD,cAAe,SAAUH,GAErB,GADA9iB,EAAEE,OAAOmb,WAAWyH,GAAU/O,KAAK,gHAAgHsH,WAAWyH,GAC1J9iB,EAAEP,OAAO6K,kBAAiC,IAAbwY,EAAgB,CAC7C,GAAIkD,IAAiB,CACrBhmB,GAAEE,OAAOC,GAAGH,EAAEI,aAAawW,cAAc,WACrC,IAAIoP,GACChmB,GACAT,EAAED,MAAMmb,SAASza,EAAEP,OAAOuE,kBAA/B,CACAgiB,GAAiB,EACjBhmB,EAAE2I,WAAY,CAEd,KAAK,GADDsd,IAAiB,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACzFhhB,EAAI,EAAGA,EAAIghB,EAAcrkB,OAAQqD,IACtCjF,EAAE4T,QAAQkN,QAAQmF,EAAchhB,UAMpD+F,MACIoY,aAAc,WACV,GAAuBmD,GAAnBC,EAAgB,CAChBxmB,GAAEP,OAAOuL,KAAKC,SACVjL,EAAEoD,gBACFmjB,EAAavmB,EAAE4T,QAAQG,KAAK,uBACF,IAAtBwS,EAAW3kB,SACX2kB,EAAahnB,EAAE,0CACfS,EAAE4T,QAAQmR,OAAOwB,IAErBA,EAAWrS,KAAKlP,OAAQhF,EAAE+E,MAAQ,SAGlCwhB,EAAavmB,EAAER,UAAUuU,KAAK,uBACJ,IAAtBwS,EAAW3kB,SACX2kB,EAAahnB,EAAE,0CACfS,EAAER,UAAUulB,OAAOwB,KAI/B,KAAK,GAAIthB,GAAI,EAAGA,EAAIjF,EAAEE,OAAO0B,OAAQqD,IAAK,CACtC,GAAIuT,GAAQxY,EAAEE,OAAOC,GAAG8E,GACpBwhB,EAAiB,GAAJxhB,EACbvF,EAAQE,KAAKC,MAAM4mB,EAAa,IAChCzmB,GAAE4E,MACF6hB,GAAcA,EACd/mB,EAAQE,KAAKC,OAAO4mB,EAAa,KAErC,IAAI3d,GAAWlJ,KAAKwY,IAAIxY,KAAKoc,IAAIxD,EAAM,GAAG1P,SAAU,IAAI,GACpD8c,EAAK,EAAGC,EAAK,EAAGa,EAAK,CACrBzhB,GAAI,GAAM,GACV2gB,EAAe,GAARlmB,EAAYM,EAAEsX,KACrBoP,EAAK,IAECzhB,EAAI,GAAK,GAAM,GACrB2gB,EAAK,EACLc,EAAe,GAARhnB,EAAYM,EAAEsX,OAEfrS,EAAI,GAAK,GAAM,GACrB2gB,EAAK5lB,EAAEsX,KAAe,EAAR5X,EAAYM,EAAEsX,KAC5BoP,EAAK1mB,EAAEsX,OAEDrS,EAAI,GAAK,GAAM,IACrB2gB,GAAO5lB,EAAEsX,KACToP,EAAK,EAAI1mB,EAAEsX,KAAgB,EAATtX,EAAEsX,KAAW5X,GAE/BM,EAAE4E,MACFghB,GAAMA,GAGL5lB,EAAEoD,iBACHyiB,EAAKD,EACLA,EAAK,EAGT,IAAI1c,GAAY,YAAclJ,EAAEoD,eAAiB,GAAKqjB,GAAc,iBAAmBzmB,EAAEoD,eAAiBqjB,EAAa,GAAK,oBAAsBb,EAAK,OAASC,EAAK,OAASa,EAAK,KAMnL,IALI5d,GAAY,GAAKA,GAAW,IAC5B0d,EAAoB,GAAJvhB,EAAoB,GAAX6D,EACrB9I,EAAE4E,MAAK4hB,EAAqB,IAAJvhB,EAAoB,GAAX6D,IAEzC0P,EAAMtP,UAAUA,GACZlJ,EAAEP,OAAOuL,KAAKH,aAAc,CAE5B,GAAIwb,GAAermB,EAAEoD,eAAiBoV,EAAMzE,KAAK,6BAA+ByE,EAAMzE,KAAK,4BACvFuS,EAActmB,EAAEoD,eAAiBoV,EAAMzE,KAAK,8BAAgCyE,EAAMzE,KAAK,8BAC/D,KAAxBsS,EAAazkB,SACbykB,EAAe9mB,EAAE,oCAAsCS,EAAEoD,eAAiB,OAAS,OAAS,YAC5FoV,EAAMuM,OAAOsB,IAEU,IAAvBC,EAAY1kB,SACZ0kB,EAAc/mB,EAAE,oCAAsCS,EAAEoD,eAAiB,QAAU,UAAY,YAC/FoV,EAAMuM,OAAOuB,IAEbD,EAAazkB,SAAQykB,EAAa,GAAGnR,MAAM6Q,QAAUnmB,KAAKwY,KAAKtP,EAAU,IACzEwd,EAAY1kB,SAAQ0kB,EAAY,GAAGpR,MAAM6Q,QAAUnmB,KAAKwY,IAAItP,EAAU,KAUlF,GAPA9I,EAAE4T,QAAQM,KACNyS,2BAA4B,YAAe3mB,EAAEsX,KAAO,EAAK,KACzDsP,wBAAyB,YAAe5mB,EAAEsX,KAAO,EAAK,KACtDuP,uBAAwB,YAAe7mB,EAAEsX,KAAO,EAAK,KACrDwP,mBAAoB,YAAe9mB,EAAEsX,KAAO,EAAK,OAGjDtX,EAAEP,OAAOuL,KAAKC,OACd,GAAIjL,EAAEoD,eACFmjB,EAAWrd,UAAU,qBAAuBlJ,EAAE+E,MAAQ,EAAI/E,EAAEP,OAAOuL,KAAKE,cAAgB,QAAWlL,EAAE+E,MAAQ,EAAK,0CAA6C/E,EAAEP,OAAOuL,KAAgB,YAAI,SAE3L,CACD,GAAI+b,GAAcnnB,KAAKmH,IAAIyf,GAA4D,GAA3C5mB,KAAKC,MAAMD,KAAKmH,IAAIyf,GAAiB,IAC7EQ,EAAa,KAAOpnB,KAAKqnB,IAAkB,EAAdF,EAAkBnnB,KAAKihB,GAAK,KAAO,EAAIjhB,KAAKsnB,IAAkB,EAAdH,EAAkBnnB,KAAKihB,GAAK,KAAO,GAChHsG,EAASnnB,EAAEP,OAAOuL,KAAKG,YACvBic,EAASpnB,EAAEP,OAAOuL,KAAKG,YAAc6b,EACrCriB,EAAS3E,EAAEP,OAAOuL,KAAKE,YAC3Bqb,GAAWrd,UAAU,WAAaie,EAAS,QAAUC,EAAS,uBAAyBpnB,EAAEgF,OAAS,EAAIL,GAAU,QAAW3E,EAAEgF,OAAS,EAAIoiB,EAAU,uBAG5J,GAAIC,GAAWrnB,EAAEsnB,UAAYtnB,EAAEunB,aAAiBvnB,EAAEsX,KAAO,EAAK,CAC9DtX,GAAE4T,QAAQ1K,UAAU,qBAAuBme,EAAU,gBAAkBrnB,EAAEoD,eAAiB,EAAIojB,GAAiB,iBAAmBxmB,EAAEoD,gBAAkBojB,EAAgB,GAAK,SAE/KvD,cAAe,SAAUH,GACrB9iB,EAAEE,OAAOmb,WAAWyH,GAAU/O,KAAK,gHAAgHsH,WAAWyH,GAC1J9iB,EAAEP,OAAOuL,KAAKC,SAAWjL,EAAEoD,gBAC3BpD,EAAER,UAAUuU,KAAK,uBAAuBsH,WAAWyH,KAI/DtY,WACI4Y,aAAc,WAMV,IAAK,GALDla,GAAYlJ,EAAEuU,UACdiT,EAASxnB,EAAEoD,gBAAkB8F,EAAYlJ,EAAE+E,MAAQ,GAAKmE,EAAYlJ,EAAEgF,OAAS,EAC/EyF,EAASzK,EAAEoD,eAAiBpD,EAAEP,OAAO+K,UAAUC,QAASzK,EAAEP,OAAO+K,UAAUC,OAC3E8J,EAAYvU,EAAEP,OAAO+K,UAAUG,MAE1B1F,EAAI,EAAGrD,EAAS5B,EAAEE,OAAO0B,OAAQqD,EAAIrD,EAAQqD,IAAK,CACvD,GAAIuT,GAAQxY,EAAEE,OAAOC,GAAG8E,GACpBoT,EAAYrY,EAAEyX,gBAAgBxS,GAC9BwiB,EAAcjP,EAAM,GAAGc,kBACvBoO,GAAoBF,EAASC,EAAcpP,EAAY,GAAKA,EAAYrY,EAAEP,OAAO+K,UAAUI,SAE3Fsb,EAAUlmB,EAAEoD,eAAiBqH,EAASid,EAAmB,EACzDvB,EAAUnmB,EAAEoD,eAAiB,EAAIqH,EAASid,EAE1CC,GAAcpT,EAAY3U,KAAKmH,IAAI2gB,GAEnCE,EAAa5nB,EAAEoD,eAAiB,EAAIpD,EAAEP,OAAO+K,UAAUE,QAAU,EACjEmd,EAAa7nB,EAAEoD,eAAiBpD,EAAEP,OAAO+K,UAAUE,QAAU,EAAqB,CAGlF9K,MAAKmH,IAAI8gB,GAAc,OAAOA,EAAa,GAC3CjoB,KAAKmH,IAAI6gB,GAAc,OAAOA,EAAa,GAC3ChoB,KAAKmH,IAAI4gB,GAAc,OAAOA,EAAa,GAC3C/nB,KAAKmH,IAAImf,GAAW,OAAOA,EAAU,GACrCtmB,KAAKmH,IAAIof,GAAW,OAAOA,EAAU,EAEzC,IAAI2B,GAAiB,eAAiBD,EAAa,MAAQD,EAAa,MAAQD,EAAa,gBAAkBxB,EAAU,gBAAkBD,EAAU,MAIrJ,IAFA1N,EAAMtP,UAAU4e,GAChBtP,EAAM,GAAGtD,MAAMkR,OAAmD,EAAzCxmB,KAAKmH,IAAInH,KAAKF,MAAMgoB,IACzC1nB,EAAEP,OAAO+K,UAAUK,aAAc,CAEjC,GAAIwb,GAAermB,EAAEoD,eAAiBoV,EAAMzE,KAAK,6BAA+ByE,EAAMzE,KAAK,4BACvFuS,EAActmB,EAAEoD,eAAiBoV,EAAMzE,KAAK,8BAAgCyE,EAAMzE,KAAK,8BAC/D,KAAxBsS,EAAazkB,SACbykB,EAAe9mB,EAAE,oCAAsCS,EAAEoD,eAAiB,OAAS,OAAS,YAC5FoV,EAAMuM,OAAOsB,IAEU,IAAvBC,EAAY1kB,SACZ0kB,EAAc/mB,EAAE,oCAAsCS,EAAEoD,eAAiB,QAAU,UAAY,YAC/FoV,EAAMuM,OAAOuB,IAEbD,EAAazkB,SAAQykB,EAAa,GAAGnR,MAAM6Q,QAAU2B,EAAmB,EAAIA,EAAmB,GAC/FpB,EAAY1kB,SAAQ0kB,EAAY,GAAGpR,MAAM6Q,SAAY2B,EAAoB,GAAKA,EAAmB,IAK7G,GAAI1nB,EAAEud,QAAQC,GAAI,CACLxd,EAAE4T,QAAQ,GAAGsB,MACnB6S,kBAAoBP,EAAS,WAGxCvE,cAAe,SAAUH,GACrB9iB,EAAEE,OAAOmb,WAAWyH,GAAU/O,KAAK,gHAAgHsH,WAAWyH,MAS1K9iB,EAAEqI,MACE2f,oBAAoB,EACpBC,iBAAkB,SAAUvmB,EAAOwmB,GAC/B,GAAqB,SAAVxmB,IACoB,SAApBwmB,IAAiCA,GAAkB,GACtC,IAApBloB,EAAEE,OAAO0B,QAAb,CAEA,GAAI4W,GAAQxY,EAAEE,OAAOC,GAAGuB,GACpBymB,EAAM3P,EAAMzE,KAAK,IAAM/T,EAAEP,OAAOyR,iBAAmB,SAAWlR,EAAEP,OAAO2R,sBAAwB,UAAYpR,EAAEP,OAAO0R,uBAAyB,MAC7IqH,EAAMiC,SAASza,EAAEP,OAAOyR,mBAAsBsH,EAAMiC,SAASza,EAAEP,OAAO2R,wBAA2BoH,EAAMiC,SAASza,EAAEP,OAAO0R,0BACzHgX,EAAMA,EAAIC,IAAI5P,EAAM,KAEL,IAAf2P,EAAIvmB,QAERumB,EAAI1mB,KAAK,WACL,GAAI4mB,GAAO9oB,EAAED,KACb+oB,GAAKrU,SAAShU,EAAEP,OAAO0R,uBACvB,IAAImX,GAAaD,EAAKhoB,KAAK,mBACvBmV,EAAM6S,EAAKhoB,KAAK,YAChBoV,EAAS4S,EAAKhoB,KAAK,eACnBqV,EAAQ2S,EAAKhoB,KAAK,aACtBL,GAAEsV,UAAU+S,EAAK,GAAK7S,GAAO8S,EAAa7S,EAAQC,GAAO,EAAO,WAC5D,GAAiB,SAAN1V,GAA2B,OAANA,GAAeA,EAA/C,CAuBA,GAtBIsoB,GACAD,EAAKnU,IAAI,mBAAoB,QAAUoU,EAAa,MACpDD,EAAKnD,WAAW,qBAGZzP,IACA4S,EAAKhoB,KAAK,SAAUoV,GACpB4S,EAAKnD,WAAW,gBAEhBxP,IACA2S,EAAKhoB,KAAK,QAASqV,GACnB2S,EAAKnD,WAAW,eAEhB1P,IACA6S,EAAKhoB,KAAK,MAAOmV,GACjB6S,EAAKnD,WAAW,cAKxBmD,EAAKrU,SAAShU,EAAEP,OAAO2R,uBAAuB2I,YAAY/Z,EAAEP,OAAO0R,wBACnEqH,EAAMzE,KAAK,IAAM/T,EAAEP,OAAO4R,mBAAqB,MAAQrR,EAAEP,OAAO8R,gBAAgBqT,SAC5E5kB,EAAEP,OAAOe,MAAQ0nB,EAAiB,CAClC,GAAIK,GAAqB/P,EAAMnY,KAAK,0BACpC,IAAImY,EAAMiC,SAASza,EAAEP,OAAO0Q,qBAAsB,CAC9C,GAAIqY,GAAgBxoB,EAAE4T,QAAQC,SAAS,6BAA+B0U,EAAqB,WAAavoB,EAAEP,OAAO0Q,oBAAsB,IACvInQ,GAAEqI,KAAK4f,iBAAiBO,EAAc9mB,SAAS,OAE9C,CACD,GAAI+mB,GAAkBzoB,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAO0Q,oBAAsB,6BAA+BoY,EAAqB,KAClIvoB,GAAEqI,KAAK4f,iBAAiBQ,EAAgB/mB,SAAS,IAGzD1B,EAAEW,KAAK,mBAAoBX,EAAGwY,EAAM,GAAI6P,EAAK,OAGjDroB,EAAEW,KAAK,kBAAmBX,EAAGwY,EAAM,GAAI6P,EAAK,QAIpD/f,KAAM,WACF,GAAIrD,GACAwH,EAAgBzM,EAAEP,OAAOgN,aAK7B,IAJsB,SAAlBA,IACAA,EAAgB,GAEfzM,EAAEqI,KAAK2f,qBAAoBhoB,EAAEqI,KAAK2f,oBAAqB,GACxDhoB,EAAEP,OAAOmP,sBACT5O,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOyQ,mBAAmBzO,KAAK,WACtDzB,EAAEqI,KAAK4f,iBAAiB1oB,EAAED,MAAMoC,eAIpC,IAAI+K,EAAgB,EAChB,IAAKxH,EAAIjF,EAAEI,YAAa6E,EAAIjF,EAAEI,YAAcqM,EAAgBxH,IACpDjF,EAAEE,OAAO+E,IAAIjF,EAAEqI,KAAK4f,iBAAiBhjB,OAI7CjF,GAAEqI,KAAK4f,iBAAiBjoB,EAAEI,YAGlC,IAAIJ,EAAEP,OAAOwP,sBACT,GAAIxC,EAAgB,GAAMzM,EAAEP,OAAOyP,6BAA+BlP,EAAEP,OAAOyP,4BAA8B,EAAI,CACzG,GAAIwZ,GAAS1oB,EAAEP,OAAOyP,4BAClByK,EAAMlN,EACNkc,EAAW/oB,KAAKoc,IAAIhc,EAAEI,YAAcuZ,EAAM/Z,KAAKwY,IAAIsQ,EAAQ/O,GAAM3Z,EAAEE,OAAO0B,QAC1EgnB,EAAWhpB,KAAKwY,IAAIpY,EAAEI,YAAcR,KAAKwY,IAAIuB,EAAK+O,GAAS,EAE/D,KAAKzjB,EAAIjF,EAAEI,YAAcqM,EAAexH,EAAI0jB,EAAU1jB,IAC9CjF,EAAEE,OAAO+E,IAAIjF,EAAEqI,KAAK4f,iBAAiBhjB,EAG7C,KAAKA,EAAI2jB,EAAU3jB,EAAIjF,EAAEI,YAAc6E,IAC/BjF,EAAEE,OAAO+E,IAAIjF,EAAEqI,KAAK4f,iBAAiBhjB,OAG5C,CACD,GAAIyV,GAAY1a,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAO2Q,eAC9CsK,GAAU9Y,OAAS,GAAG5B,EAAEqI,KAAK4f,iBAAiBvN,EAAUhZ,QAE5D,IAAIkZ,GAAY5a,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAO6Q,eAC9CsK,GAAUhZ,OAAS,GAAG5B,EAAEqI,KAAK4f,iBAAiBrN,EAAUlZ,WAIxEsgB,kBAAmB,WACXhiB,EAAEP,OAAO2I,cACLpI,EAAEP,OAAO0P,+BAAkCnP,EAAEP,OAAO0P,+BAAiCnP,EAAEqI,KAAK2f,qBAC5FhoB,EAAEqI,KAAKC,QAInB2Z,gBAAiB,WACTjiB,EAAEP,OAAO2I,cAAgBpI,EAAEP,OAAO0P,8BAClCnP,EAAEqI,KAAKC,SASnBtI,EAAE2L,WACEmT,WAAW,EACX+J,gBAAiB,SAAU5nB,GACvB,GAAI6nB,GAAK9oB,EAAE2L,UAGPod,EAAkB/oB,EAAEoD,eACP,eAAXnC,EAAEmf,MAAoC,cAAXnf,EAAEmf,KAAwBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,OAAStf,EAAE+nB,QAClF,eAAX/nB,EAAEmf,MAAoC,cAAXnf,EAAEmf,KAAwBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,OAASvf,EAAEgoB,QAC/F/hB,EAAW,EAAoB4hB,EAAGI,MAAMvkB,SAAS3E,EAAEoD,eAAiB,OAAS,OAAS0lB,EAAGK,SAAW,EACpGC,GAAeppB,EAAEwH,eAAiBshB,EAAGO,YACrCC,GAAetpB,EAAEyH,eAAiBqhB,EAAGO,WACrCniB,GAAWkiB,EACXliB,EAAWkiB,EAENliB,EAAWoiB,IAChBpiB,EAAWoiB,GAEfpiB,GAAYA,EAAW4hB,EAAGO,YAC1BrpB,EAAE4H,eAAeV,GACjBlH,EAAE2H,oBAAoBT,GAAU,IAEpCqiB,UAAW,SAAUtoB,GACjB,GAAI6nB,GAAK9oB,EAAE2L,SACXmd,GAAGhK,WAAY,EACf7d,EAAEkE,iBACFlE,EAAEsd,kBAEFuK,EAAGD,gBAAgB5nB,GACnB+G,aAAa8gB,EAAGU,aAEhBV,EAAGI,MAAM7N,WAAW,GAChBrb,EAAEP,OAAOmM,eACTkd,EAAGI,MAAMhV,IAAI,UAAW,GAE5BlU,EAAE4T,QAAQyH,WAAW,KACrByN,EAAGW,KAAKpO,WAAW,KACnBrb,EAAEW,KAAK,uBAAwBX,IAEnC0pB,SAAU,SAAUzoB,GAChB,GAAI6nB,GAAK9oB,EAAE2L,SACNmd,GAAGhK,YACJ7d,EAAEkE,eAAgBlE,EAAEkE,iBACnBlE,EAAEmE,aAAc,EACrB0jB,EAAGD,gBAAgB5nB,GACnBjB,EAAE4T,QAAQyH,WAAW,GACrByN,EAAGI,MAAM7N,WAAW,GACpByN,EAAGW,KAAKpO,WAAW,GACnBrb,EAAEW,KAAK,sBAAuBX,KAElC2pB,QAAS,SAAU1oB,GACf,GAAI6nB,GAAK9oB,EAAE2L,SACNmd,GAAGhK,YACRgK,EAAGhK,WAAY,EACX9e,EAAEP,OAAOmM,gBACT5D,aAAa8gB,EAAGU,aAChBV,EAAGU,YAAcjpB,WAAW,WACxBuoB,EAAGI,MAAMhV,IAAI,UAAW,GACxB4U,EAAGI,MAAM7N,WAAW,MACrB,MAGPrb,EAAEW,KAAK,qBAAsBX,GACzBA,EAAEP,OAAOqM,wBACT9L,EAAEmI,eAGVyhB,gBAAiB,WACb,MAAK5pB,GAAEP,OAAO0N,iBAAkB,GAAUnN,EAAEwT,QAAQG,MACxC3T,EAAEgd,YADqDhd,EAAEyc,sBAGzEoN,gBAAiB,WACb,GAAIf,GAAK9oB,EAAE2L,UACPvK,EAASpB,EAAEwT,QAAQG,MAAQmV,EAAGI,MAAQxlB,QAC1CnE,GAAEupB,EAAGI,OAAOY,GAAGhB,EAAGc,gBAAgBlN,MAAOoM,EAAGS,WAC5ChqB,EAAE6B,GAAQ0oB,GAAGhB,EAAGc,gBAAgBjN,KAAMmM,EAAGY,UACzCnqB,EAAE6B,GAAQ0oB,GAAGhB,EAAGc,gBAAgBhN,IAAKkM,EAAGa,UAE5CI,iBAAkB,WACd,GAAIjB,GAAK9oB,EAAE2L,UACPvK,EAASpB,EAAEwT,QAAQG,MAAQmV,EAAGI,MAAQxlB,QAC1CnE,GAAEupB,EAAGI,OAAOc,IAAIlB,EAAGc,gBAAgBlN,MAAOoM,EAAGS,WAC7ChqB,EAAE6B,GAAQ4oB,IAAIlB,EAAGc,gBAAgBjN,KAAMmM,EAAGY,UAC1CnqB,EAAE6B,GAAQ4oB,IAAIlB,EAAGc,gBAAgBhN,IAAKkM,EAAGa,UAE7C1N,IAAK,WACD,GAAKjc,EAAEP,OAAOkM,UAAd,CACA,GAAImd,GAAK9oB,EAAE2L,SACXmd,GAAGI,MAAQ3pB,EAAES,EAAEP,OAAOkM,WAClB3L,EAAEP,OAAOoO,mBAAmD,gBAAvB7N,GAAEP,OAAOkM,WAA0Bmd,EAAGI,MAAMtnB,OAAS,GAAqD,IAAhD5B,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOkM,WAAW/J,SACpIknB,EAAGI,MAAQlpB,EAAER,UAAUuU,KAAK/T,EAAEP,OAAOkM,YAEzCmd,EAAGW,KAAOX,EAAGI,MAAMnV,KAAK,0BACD,IAAnB+U,EAAGW,KAAK7nB,SACRknB,EAAGW,KAAOlqB,EAAE,6CACZupB,EAAGI,MAAMnE,OAAO+D,EAAGW,OAEvBX,EAAGW,KAAK,GAAGvU,MAAMnQ,MAAQ,GACzB+jB,EAAGW,KAAK,GAAGvU,MAAMlQ,OAAS,GAC1B8jB,EAAGmB,UAAYjqB,EAAEoD,eAAiB0lB,EAAGI,MAAM,GAAGgB,YAAcpB,EAAGI,MAAM,GAAGhS,aAExE4R,EAAGqB,QAAUnqB,EAAEsX,KAAOtX,EAAE8X,YACxBgR,EAAGO,YAAcP,EAAGqB,SAAWrB,EAAGmB,UAAYjqB,EAAEsX,MAChDwR,EAAGK,SAAWL,EAAGmB,UAAYnB,EAAGqB,QAE5BnqB,EAAEoD,eACF0lB,EAAGW,KAAK,GAAGvU,MAAMnQ,MAAQ+jB,EAAGK,SAAW,KAGvCL,EAAGW,KAAK,GAAGvU,MAAMlQ,OAAS8jB,EAAGK,SAAW,KAGxCL,EAAGqB,SAAW,EACdrB,EAAGI,MAAM,GAAGhU,MAAMkV,QAAU,OAG5BtB,EAAGI,MAAM,GAAGhU,MAAMkV,QAAU,GAE5BpqB,EAAEP,OAAOmM,gBACTkd,EAAGI,MAAM,GAAGhU,MAAM6Q,QAAU,KAGpC3C,aAAc,WACV,GAAKpjB,EAAEP,OAAOkM,UAAd,CACA,GAGI0e,GAFAvB,EAAK9oB,EAAE2L,UAIP2e,GAHYtqB,EAAEuU,UAGJuU,EAAGK,SACjBkB,IAAUvB,EAAGmB,UAAYnB,EAAGK,UAAYnpB,EAAE8I,SACtC9I,EAAE4E,KAAO5E,EAAEoD,gBACXinB,GAAUA,EACNA,EAAS,GACTC,EAAUxB,EAAGK,SAAWkB,EACxBA,EAAS,IAEHA,EAASvB,EAAGK,SAAWL,EAAGmB,YAChCK,EAAUxB,EAAGmB,UAAYI,IAIzBA,EAAS,GACTC,EAAUxB,EAAGK,SAAWkB,EACxBA,EAAS,GAEJA,EAASvB,EAAGK,SAAWL,EAAGmB,YAC/BK,EAAUxB,EAAGmB,UAAYI,GAG7BrqB,EAAEoD,gBACEpD,EAAEwT,QAAQE,aACVoV,EAAGW,KAAKvgB,UAAU,eAAiB,EAAW,aAG9C4f,EAAGW,KAAKvgB,UAAU,cAAgB,EAAW,OAEjD4f,EAAGW,KAAK,GAAGvU,MAAMnQ,MAAQulB,EAAU,OAG/BtqB,EAAEwT,QAAQE,aACVoV,EAAGW,KAAKvgB,UAAU,oBAAsB,EAAW,UAGnD4f,EAAGW,KAAKvgB,UAAU,cAAgB,EAAW,OAEjD4f,EAAGW,KAAK,GAAGvU,MAAMlQ,OAASslB,EAAU,MAEpCtqB,EAAEP,OAAOmM,gBACT5D,aAAa8gB,EAAG5gB,SAChB4gB,EAAGI,MAAM,GAAGhU,MAAM6Q,QAAU,EAC5B+C,EAAG5gB,QAAU3H,WAAW,WACpBuoB,EAAGI,MAAM,GAAGhU,MAAM6Q,QAAU,EAC5B+C,EAAGI,MAAM7N,WAAW,MACrB,QAGX4H,cAAe,SAAUH,GAChB9iB,EAAEP,OAAOkM,WACd3L,EAAE2L,UAAU8d,KAAKpO,WAAWyH,KAQpC9iB,EAAEkc,YACEqO,aAAc,SAAUrH,EAAGC,GACvB,GAAIqH,GAAe,WACf,GAAI7B,GAAUC,EAAU6B,CACxB,OAAO,UAASC,EAAOC,GAGnB,IAFA/B,GAAW,EACXD,EAAW+B,EAAM9oB,OACV+mB,EAAWC,EAAW,GACrB8B,EAAMD,EAAQ9B,EAAWC,GAAY,IAAM+B,EAC3C/B,EAAW6B,EAEX9B,EAAW8B,CAEnB,OAAO9B,MAGfrpB,MAAK4jB,EAAIA,EACT5jB,KAAK6jB,EAAIA,EACT7jB,KAAKsrB,UAAY1H,EAAEthB,OAAS,CAI5B,IAAIipB,GAAIC,CACAxrB,MAAK4jB,EAAEthB,MAEftC,MAAKyrB,YAAc,SAAUC,GACzB,MAAKA,IAGLF,EAAKN,EAAalrB,KAAK4jB,EAAG8H,GAC1BH,EAAKC,EAAK,GAIDE,EAAK1rB,KAAK4jB,EAAE2H,KAAQvrB,KAAK6jB,EAAE2H,GAAMxrB,KAAK6jB,EAAE0H,KAASvrB,KAAK4jB,EAAE4H,GAAMxrB,KAAK4jB,EAAE2H,IAAOvrB,KAAK6jB,EAAE0H,IAR5E,IAYxBI,uBAAwB,SAASC,GACzBlrB,EAAEkc,WAAWC,SAAQnc,EAAEkc,WAAWC,OAASnc,EAAEP,OAAOe,KACpD,GAAIR,GAAEkc,WAAWqO,aAAavqB,EAAEwX,WAAY0T,EAAE1T,YAC9C,GAAIxX,GAAEkc,WAAWqO,aAAavqB,EAAE6W,SAAUqU,EAAErU,YAEpDuM,aAAc,SAAU7O,EAAWwO,GAGhC,QAASoI,GAAuBD,GAK3B3W,EAAY2W,EAAEtmB,KAA8B,eAAvBsmB,EAAEzrB,OAAO+J,WAA8BxJ,EAAEuU,UAAYvU,EAAEuU,UACjD,UAAvBvU,EAAEP,OAAOiQ,YACT1P,EAAEkc,WAAW+O,uBAAuBC,GAGpCE,GAAuBprB,EAAEkc,WAAWC,OAAO4O,aAAaxW,IAGxD6W,GAA8C,cAAvBprB,EAAEP,OAAOiQ,YAChCsX,GAAckE,EAAEzjB,eAAiByjB,EAAE1jB,iBAAmBxH,EAAEyH,eAAiBzH,EAAEwH,gBAC3E4jB,GAAuB7W,EAAYvU,EAAEwH,gBAAkBwf,EAAakE,EAAE1jB,gBAGtExH,EAAEP,OAAOgQ,iBACT2b,EAAsBF,EAAEzjB,eAAiB2jB,GAE7CF,EAAEtjB,eAAewjB,GACjBF,EAAEvjB,oBAAoByjB,GAAqB,EAAOprB,GAClDkrB,EAAErjB,oBAzBP,GACImf,GAAYoE,EADZC,EAAarrB,EAAEP,OAAO+P,OA2B1B,IAAI8b,MAAMC,QAAQF,GACd,IAAK,GAAIpmB,GAAI,EAAGA,EAAIomB,EAAWzpB,OAAQqD,IAC/BomB,EAAWpmB,KAAO8d,GAAgBsI,EAAWpmB,YAAc7F,IAC3D+rB,EAAuBE,EAAWpmB,QAIrComB,aAAsBjsB,IAAU2jB,IAAiBsI,GAEtDF,EAAuBE,IAG9BpI,cAAe,SAAUH,EAAUC,GAG/B,QAASyI,GAAwBN,GAC7BA,EAAExjB,qBAAqBob,EAAU9iB,GAChB,IAAb8iB,IACAoI,EAAElJ,oBACFkJ,EAAEtX,QAAQgD,cAAc,WACfyU,IACDH,EAAEzrB,OAAOe,MAA+B,UAAvBR,EAAEP,OAAOiQ,WAC1Bwb,EAAEzqB,UAENyqB,EAAEjJ,sBAXd,GACIhd,GADAomB,EAAarrB,EAAEP,OAAO+P,OAgB1B,IAAI8b,MAAMC,QAAQF,GACd,IAAKpmB,EAAI,EAAGA,EAAIomB,EAAWzpB,OAAQqD,IAC3BomB,EAAWpmB,KAAO8d,GAAgBsI,EAAWpmB,YAAc7F,IAC3DosB,EAAwBH,EAAWpmB,QAItComB,aAAsBjsB,IAAU2jB,IAAiBsI,GACtDG,EAAwBH,KASpCrrB,EAAEkM,SACEuf,YAAa,SAAUxqB,EAAGtB,GACtB,GAAI+rB,GAAUhoB,SAASioB,SAASC,KAAK/T,QAAQ,IAAK,GAE9C6T,KADkB1rB,EAAEE,OAAOC,GAAGH,EAAEI,aAAaC,KAAK,cAElDL,EAAEoc,QAAQpc,EAAE4T,QAAQC,SAAS,IAAM7T,EAAEP,OAAOsE,WAAa,eAAiB,EAAY,MAAMrC;yIAGpG0c,aAAc,SAAUlB,GACpB,GAAIE,GAASF,EAAS,MAAQ,IAC9B3d,GAAEyC,QAAQob,GAAQ,aAAcpd,EAAEkM,QAAQuf,cAE9ChJ,QAAS,WACL,GAAKziB,EAAEkM,QAAQ2f,aAAgB7rB,EAAEP,OAAOyM,QACxC,GAAIlM,EAAEP,OAAO4M,cAAgBrK,OAAOoK,SAAWpK,OAAOoK,QAAQC,aAC1DrK,OAAOoK,QAAQC,aAAa,KAAM,KAAO,IAAMrM,EAAEE,OAAOC,GAAGH,EAAEI,aAAaC,KAAK,cAAgB,QAC5F,CACH,GAAImY,GAAQxY,EAAEE,OAAOC,GAAGH,EAAEI,aACtBwrB,EAAOpT,EAAMnY,KAAK,cAAgBmY,EAAMnY,KAAK,eACjDqD,UAASioB,SAASC,KAAOA,GAAQ,KAGzCE,KAAM,WACF,GAAK9rB,EAAEP,OAAOyM,UAAWlM,EAAEP,OAAO2M,QAAlC,CACApM,EAAEkM,QAAQ2f,aAAc,CACxB,IAAID,GAAOloB,SAASioB,SAASC,KAAK/T,QAAQ,IAAK,GAC/C,IAAI+T,EAEA,IAAK,GAAI3mB,GAAI,EAAGrD,EAAS5B,EAAEE,OAAO0B,OAAQqD,EAAIrD,EAAQqD,IAAK,CACvD,GAAIuT,GAAQxY,EAAEE,OAAOC,GAAG8E,GACpB8mB,EAAYvT,EAAMnY,KAAK,cAAgBmY,EAAMnY,KAAK,eACtD,IAAI0rB,IAAcH,IAASpT,EAAMiC,SAASza,EAAEP,OAAO0Q,qBAAsB,CACrE,GAAIzO,GAAQ8W,EAAM9W,OAClB1B,GAAEoc,QAAQ1a,EANN,EAMoB1B,EAAEP,OAAOuS,oBAAoB,IAI7DhS,EAAEP,OAAO0M,mBAAmBnM,EAAEkM,QAAQkS,iBAE9C4N,QAAS,WACDhsB,EAAEP,OAAO0M,mBAAmBnM,EAAEkM,QAAQkS,cAAa,KAQ/Dpe,EAAEoM,SACE0f,KAAM,WACF,GAAK9rB,EAAEP,OAAO2M,QAAd,CACA,IAAKpK,OAAOoK,UAAYpK,OAAOoK,QAAQ6f,UAGnC,MAFAjsB,GAAEP,OAAO2M,SAAU,OACnBpM,EAAEP,OAAOyM,SAAU,EAGvBlM,GAAEoM,QAAQyf,aAAc,EACxBvsB,KAAK4sB,MAAQ5sB,KAAK6sB,iBACb7sB,KAAK4sB,MAAME,KAAQ9sB,KAAK4sB,MAAMG,SACnC/sB,KAAKgtB,cAAc,EAAGhtB,KAAK4sB,MAAMG,MAAOrsB,EAAEP,OAAOuS,oBAC5ChS,EAAEP,OAAO4M,cACVrK,OAAOuqB,iBAAiB,WAAYjtB,KAAKktB,uBAGjDA,mBAAoB,WAChBxsB,EAAEoM,QAAQ8f,MAAQlsB,EAAEoM,QAAQ+f,gBAC5BnsB,EAAEoM,QAAQkgB,cAActsB,EAAEP,OAAOkK,MAAO3J,EAAEoM,QAAQ8f,MAAMG,OAAO,IAEnEF,cAAe,WACX,GAAIM,GAAYzqB,OAAO2pB,SAASe,SAASC,MAAM,GAAG9I,MAAM,KACpD9I,EAAQ0R,EAAU7qB,MAGtB,QAASwqB,IAFCK,EAAU1R,EAAQ,GAETsR,MADPI,EAAU1R,EAAQ,KAGlCyH,WAAY,SAAU4J,EAAK1qB,GACvB,GAAK1B,EAAEoM,QAAQyf,aAAgB7rB,EAAEP,OAAO2M,QAAxC,CACA,GAAIoM,GAAQxY,EAAEE,OAAOC,GAAGuB,GACpB2qB,EAAQ/sB,KAAKstB,QAAQpU,EAAMnY,KAAK,gBAC/B2B,QAAO2pB,SAASe,SAASG,SAAST,KACnCC,EAAQD,EAAM,IAAMC,GAEpBrsB,EAAEP,OAAO4M,aACTrK,OAAOoK,QAAQC,aAAa,KAAM,KAAMggB,GAExCrqB,OAAOoK,QAAQ6f,UAAU,KAAM,KAAMI,KAG7CO,QAAS,SAAS3R,GACd,MAAOA,GAAKmJ,WAAWvgB,cAClBgU,QAAQ,OAAQ,KAChBA,QAAQ,YAAa,IACrBA,QAAQ,SAAU,KAClBA,QAAQ,MAAO,IACfA,QAAQ,MAAO,KAExByU,cAAe,SAAS3iB,EAAO0iB,EAAO/J,GAClC,GAAI+J,EACA,IAAK,GAAIpnB,GAAI,EAAGrD,EAAS5B,EAAEE,OAAO0B,OAAQqD,EAAIrD,EAAQqD,IAAK,CACvD,GAAIuT,GAAQxY,EAAEE,OAAOC,GAAG8E,GACpB6nB,EAAextB,KAAKstB,QAAQpU,EAAMnY,KAAK,gBAC3C,IAAIysB,IAAiBT,IAAU7T,EAAMiC,SAASza,EAAEP,OAAO0Q,qBAAsB,CACzE,GAAIzO,GAAQ8W,EAAM9W,OAClB1B,GAAEoc,QAAQ1a,EAAOiI,EAAO2Y,QAIhCtiB,GAAEoc,QAAQ,EAAGzS,EAAO2Y,KA2EhCtiB,EAAE+sB,uBAAyB,WACvB/sB,EAAEP,OAAOsM,iBAAkB,EAC3BxM,EAAEmE,UAAUsmB,IAAI,UAAWlnB,IAE/B9C,EAAEgtB,sBAAwB,WACtBhtB,EAAEP,OAAOsM,iBAAkB,EAC3BxM,EAAEmE,UAAUomB,GAAG,UAAWhnB,IAO9B9C,EAAEiI,YACEzC,OAAO,EACPkD,gBAAgB,GAAK1G,QAAOwG,MAAQC,WA4LpCzI,EAAEP,OAAOuM,oBAMThM,EAAEiI,WAAWzC,MAASqX,UAAUoQ,UAAUjkB,QAAQ,YAAa,EAC3D,iBAjMR,WACI,GACIkkB,GADY,WACexpB,SAE/B,KAAKwpB,EAAa,CACd,GAAIC,GAAUzpB,SAAS0pB,cAAc,MACrCD,GAAQE,aALI,UAKoB,WAChCH,EAA4C,kBAAvBC,GAAiB,QAa1C,OAVKD,GACDxpB,SAAS4pB,gBACT5pB,SAAS4pB,eAAeC,YAGxB7pB,SAAS4pB,eAAeC,WAAW,GAAI,OAAQ,IAE/CL,EAAcxpB,SAAS4pB,eAAeC,WAAW,eAAgB,QAG9DL,KA+KC,QAAU,cA0FtBltB,EAAEwtB,yBAA2B,WACzB,IAAKxtB,EAAEiI,WAAWzC,MAAO,OAAO,CAChC,IAAIpE,GAASpB,EAAER,SAMf,OALwC,cAApCQ,EAAEP,OAAOwM,yBACT7K,EAAS7B,EAAES,EAAEP,OAAOwM,yBAExB7K,EAAO4oB,IAAIhqB,EAAEiI,WAAWzC,MAAOkB,GAC/B1G,EAAEP,OAAOuM,mBAAoB,GACtB,GAGXhM,EAAEytB,wBAA0B,WACxB,IAAKztB,EAAEiI,WAAWzC,MAAO,OAAO,CAChC,IAAIpE,GAASpB,EAAER,SAMf,OALwC,cAApCQ,EAAEP,OAAOwM,yBACT7K,EAAS7B,EAAES,EAAEP,OAAOwM,yBAExB7K,EAAO0oB,GAAG9pB,EAAEiI,WAAWzC,MAAOkB,GAC9B1G,EAAEP,OAAOuM,mBAAoB,GACtB,GA6CXhM,EAAEsL,UACE8X,aAAc,WACVpjB,EAAER,UAAUqU,SAAS,8EAA8EpS,KAAK,WACpGoH,EAAqBvJ,KAAMU,EAAE8I,YAGjC9I,EAAEE,OAAOuB,KAAK,WACV,GAAI+W,GAAQjZ,EAAED,KACdkZ,GAAMzE,KAAK,8EAA8EtS,KAAK,WAE1FoH,EAAqBvJ,KADNM,KAAKoc,IAAIpc,KAAKwY,IAAII,EAAM,GAAG1P,UAAU,GAAK,SAKrEma,cAAe,SAAUH,GACG,SAAbA,IAA0BA,EAAW9iB,EAAEP,OAAOkK,OACzD3J,EAAER,UAAUuU,KAAK,8EAA8EtS,KAAK,WAChG,GAAIN,GAAK5B,EAAED,MACPouB,EAAmBzkB,SAAS9H,EAAGd,KAAK,iCAAkC,KAAOyiB,CAChE,KAAbA,IAAgB4K,EAAmB,GACvCvsB,EAAGka,WAAWqS,OAS1B1tB,EAAEuL,MAEE2P,MAAO,EACPyS,aAAc,EACdC,WAAW,EACXC,SACIrV,MAAOjM,OACPuhB,WAAYvhB,OACZwhB,YAAaxhB,OACbuJ,MAAOvJ,OACPyhB,UAAWzhB,OACXf,QAASxL,EAAEP,OAAO+L,SAEtBsK,OACIgJ,UAAWvS,OACXwS,QAASxS,OACTwT,SAAUxT,OACVyT,SAAUzT,OACV0hB,KAAM1hB,OACN2hB,KAAM3hB,OACN4hB,KAAM5hB,OACN6hB,KAAM7hB,OACNxH,MAAOwH,OACPvH,OAAQuH,OACRsT,OAAQtT,OACRuT,OAAQvT,OACR8hB,gBACAC,mBAEJ9Z,UACI0O,EAAG3W,OACH4W,EAAG5W,OACHgiB,cAAehiB,OACfiiB,cAAejiB,OACfkiB,SAAUliB,QAGdmiB,0BAA2B,SAAUztB,GACjC,GAAIA,EAAEqf,cAAc1e,OAAS,EAAG,MAAO,EACvC,IAAI+sB,GAAK1tB,EAAEqf,cAAc,GAAGC,MACxBqO,EAAK3tB,EAAEqf,cAAc,GAAGE,MACxBwK,EAAK/pB,EAAEqf,cAAc,GAAGC,MACxBsO,EAAK5tB,EAAEqf,cAAc,GAAGE,KAE5B,OADe5gB,MAAKkvB,KAAKlvB,KAAKohB,IAAIgK,EAAK2D,EAAI,GAAK/uB,KAAKohB,IAAI6N,EAAKD,EAAI,KAItEG,eAAgB,SAAU9tB,GACtB,GAAI+tB,GAAIhvB,EAAEuL,IACV,KAAKvL,EAAEwT,QAAQyb,SAAU,CACrB,GAAe,eAAXhuB,EAAEmf,MAAoC,eAAXnf,EAAEmf,MAAyBnf,EAAEqf,cAAc1e,OAAS,EAC/E,MAEJotB,GAAEnB,QAAQqB,WAAaF,EAAEN,0BAA0BztB,GAEvD,KAAK+tB,EAAEnB,QAAQrV,OAAUwW,EAAEnB,QAAQrV,MAAM5W,SACrCotB,EAAEnB,QAAQrV,MAAQjZ,EAAED,MACW,IAA3B0vB,EAAEnB,QAAQrV,MAAM5W,SAAcotB,EAAEnB,QAAQrV,MAAQxY,EAAEE,OAAOC,GAAGH,EAAEI,cAClE4uB,EAAEnB,QAAQ/X,MAAQkZ,EAAEnB,QAAQrV,MAAMzE,KAAK,oBACvCib,EAAEnB,QAAQG,UAAYgB,EAAEnB,QAAQ/X,MAAMqZ,OAAO,IAAMnvB,EAAEP,OAAO+R,oBAC5Dwd,EAAEnB,QAAQriB,QAAUwjB,EAAEnB,QAAQG,UAAU3tB,KAAK,qBAAuBL,EAAEP,OAAO+L,QAC1C,IAA/BwjB,EAAEnB,QAAQG,UAAUpsB,SAEpB,YADAotB,EAAEnB,QAAQ/X,MAAQvJ,OAI1ByiB,GAAEnB,QAAQ/X,MAAMuF,WAAW,GAC3B2T,EAAEpB,WAAY,GAElBwB,gBAAiB,SAAUnuB,GACvB,GAAI+tB,GAAIhvB,EAAEuL,IACV,KAAKvL,EAAEwT,QAAQyb,SAAU,CACrB,GAAe,cAAXhuB,EAAEmf,MAAmC,cAAXnf,EAAEmf,MAAwBnf,EAAEqf,cAAc1e,OAAS,EAC7E,MAEJotB,GAAEnB,QAAQwB,UAAYL,EAAEN,0BAA0BztB,GAEjD+tB,EAAEnB,QAAQ/X,OAAoC,IAA3BkZ,EAAEnB,QAAQ/X,MAAMlU,SACpC5B,EAAEwT,QAAQyb,SACVD,EAAE9T,MAAQja,EAAEia,MAAQ8T,EAAErB,aAGtBqB,EAAE9T,MAAS8T,EAAEnB,QAAQwB,UAAYL,EAAEnB,QAAQqB,WAAcF,EAAErB,aAE3DqB,EAAE9T,MAAQ8T,EAAEnB,QAAQriB,UACpBwjB,EAAE9T,MAAQ8T,EAAEnB,QAAQriB,QAAU,EAAI5L,KAAKohB,IAAKgO,EAAE9T,MAAQ8T,EAAEnB,QAAQriB,QAAU,EAAI,KAE9EwjB,EAAE9T,MAAQlb,EAAEP,OAAOgM,UACnBujB,EAAE9T,MAASlb,EAAEP,OAAOgM,QAAU,EAAI7L,KAAKohB,IAAKhhB,EAAEP,OAAOgM,QAAUujB,EAAE9T,MAAQ,EAAI,KAEjF8T,EAAEnB,QAAQ/X,MAAM5M,UAAU,4BAA8B8lB,EAAE9T,MAAQ,OAEtEoU,aAAc,SAAUruB,GACpB,GAAI+tB,GAAIhvB,EAAEuL,MACLvL,EAAEwT,QAAQyb,WACI,aAAXhuB,EAAEmf,MAAkC,aAAXnf,EAAEmf,MAAuBnf,EAAEsuB,eAAe3tB,OAAS,IAI/EotB,EAAEnB,QAAQ/X,OAAoC,IAA3BkZ,EAAEnB,QAAQ/X,MAAMlU,SACxCotB,EAAE9T,MAAQtb,KAAKwY,IAAIxY,KAAKoc,IAAIgT,EAAE9T,MAAO8T,EAAEnB,QAAQriB,SAAUxL,EAAEP,OAAOgM,SAClEujB,EAAEnB,QAAQ/X,MAAMuF,WAAWrb,EAAEP,OAAOkK,OAAOT,UAAU,4BAA8B8lB,EAAE9T,MAAQ,KAC7F8T,EAAErB,aAAeqB,EAAE9T,MACnB8T,EAAEpB,WAAY,EACE,IAAZoB,EAAE9T,QAAa8T,EAAEnB,QAAQrV,MAAQjM,UAEzCkR,aAAc,SAAUzd,EAAGiB,GACvB,GAAI+tB,GAAIhvB,EAAEuL,IACLyjB,GAAEnB,QAAQ/X,OAAoC,IAA3BkZ,EAAEnB,QAAQ/X,MAAMlU,SACpCotB,EAAElZ,MAAMgJ,YACQ,YAAhB9e,EAAEoU,OAAOob,IAAkBvuB,EAAEkE,iBACjC6pB,EAAElZ,MAAMgJ,WAAY,EACpBkQ,EAAElZ,MAAMuY,aAAanL,EAAe,eAAXjiB,EAAEmf,KAAwBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,MAChFyO,EAAElZ,MAAMuY,aAAalL,EAAe,eAAXliB,EAAEmf,KAAwBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,SAEpF9C,YAAa,SAAUzc,GACnB,GAAI+tB,GAAIhvB,EAAEuL,IACV,IAAKyjB,EAAEnB,QAAQ/X,OAAoC,IAA3BkZ,EAAEnB,QAAQ/X,MAAMlU,SACxC5B,EAAEse,YAAa,EACV0Q,EAAElZ,MAAMgJ,WAAckQ,EAAEnB,QAAQrV,OAArC,CAEKwW,EAAElZ,MAAMiJ,UACTiQ,EAAElZ,MAAM/Q,MAAQiqB,EAAEnB,QAAQ/X,MAAM,GAAGoU,YACnC8E,EAAElZ,MAAM9Q,OAASgqB,EAAEnB,QAAQ/X,MAAM,GAAGoB,aACpC8X,EAAElZ,MAAM+J,OAAS7f,EAAEqjB,aAAa2L,EAAEnB,QAAQG,UAAU,GAAI,MAAQ,EAChEgB,EAAElZ,MAAMgK,OAAS9f,EAAEqjB,aAAa2L,EAAEnB,QAAQG,UAAU,GAAI,MAAQ,EAChEgB,EAAEnB,QAAQC,WAAakB,EAAEnB,QAAQrV,MAAM,GAAG0R,YAC1C8E,EAAEnB,QAAQE,YAAciB,EAAEnB,QAAQrV,MAAM,GAAGtB,aAC3C8X,EAAEnB,QAAQG,UAAU3S,WAAW,GAC3Brb,EAAE4E,MAAKoqB,EAAElZ,MAAM+J,QAAUmP,EAAElZ,MAAM+J,QACjC7f,EAAE4E,MAAKoqB,EAAElZ,MAAMgK,QAAUkP,EAAElZ,MAAMgK,QAGzC,IAAI2P,GAAcT,EAAElZ,MAAM/Q,MAAQiqB,EAAE9T,MAChCwU,EAAeV,EAAElZ,MAAM9Q,OAASgqB,EAAE9T,KAEtC,MAAIuU,EAAcT,EAAEnB,QAAQC,YAAc4B,EAAeV,EAAEnB,QAAQE,aAAnE,CAUA,GARAiB,EAAElZ,MAAMmY,KAAOruB,KAAKoc,IAAKgT,EAAEnB,QAAQC,WAAa,EAAI2B,EAAc,EAAI,GACtET,EAAElZ,MAAMqY,MAAQa,EAAElZ,MAAMmY,KACxBe,EAAElZ,MAAMoY,KAAOtuB,KAAKoc,IAAKgT,EAAEnB,QAAQE,YAAc,EAAI2B,EAAe,EAAI,GACxEV,EAAElZ,MAAMsY,MAAQY,EAAElZ,MAAMoY,KAExBc,EAAElZ,MAAMwY,eAAepL,EAAe,cAAXjiB,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGC,MAAQtf,EAAEsf,MACjFyO,EAAElZ,MAAMwY,eAAenL,EAAe,cAAXliB,EAAEmf,KAAuBnf,EAAEqf,cAAc,GAAGE,MAAQvf,EAAEuf,OAE5EwO,EAAElZ,MAAMiJ,UAAYiQ,EAAEpB,UAAW,CAClC,GAAI5tB,EAAEoD,gBACDxD,KAAKC,MAAMmvB,EAAElZ,MAAMmY,QAAUruB,KAAKC,MAAMmvB,EAAElZ,MAAM+J,SAAWmP,EAAElZ,MAAMwY,eAAepL,EAAI8L,EAAElZ,MAAMuY,aAAanL,GAC3GtjB,KAAKC,MAAMmvB,EAAElZ,MAAMqY,QAAUvuB,KAAKC,MAAMmvB,EAAElZ,MAAM+J,SAAWmP,EAAElZ,MAAMwY,eAAepL,EAAI8L,EAAElZ,MAAMuY,aAAanL,EAG5G,YADA8L,EAAElZ,MAAMgJ,WAAY,EAGnB,KAAK9e,EAAEoD,gBACPxD,KAAKC,MAAMmvB,EAAElZ,MAAMoY,QAAUtuB,KAAKC,MAAMmvB,EAAElZ,MAAMgK,SAAWkP,EAAElZ,MAAMwY,eAAenL,EAAI6L,EAAElZ,MAAMuY,aAAalL,GAC3GvjB,KAAKC,MAAMmvB,EAAElZ,MAAMsY,QAAUxuB,KAAKC,MAAMmvB,EAAElZ,MAAMgK,SAAWkP,EAAElZ,MAAMwY,eAAenL,EAAI6L,EAAElZ,MAAMuY,aAAalL,EAG5G,YADA6L,EAAElZ,MAAMgJ,WAAY,GAI5B7d,EAAEkE,iBACFlE,EAAEsd,kBAEFyQ,EAAElZ,MAAMiJ,SAAU,EAClBiQ,EAAElZ,MAAMiK,SAAWiP,EAAElZ,MAAMwY,eAAepL,EAAI8L,EAAElZ,MAAMuY,aAAanL,EAAI8L,EAAElZ,MAAM+J,OAC/EmP,EAAElZ,MAAMkK,SAAWgP,EAAElZ,MAAMwY,eAAenL,EAAI6L,EAAElZ,MAAMuY,aAAalL,EAAI6L,EAAElZ,MAAMgK,OAE3EkP,EAAElZ,MAAMiK,SAAWiP,EAAElZ,MAAMmY,OAC3Be,EAAElZ,MAAMiK,SAAYiP,EAAElZ,MAAMmY,KAAO,EAAIruB,KAAKohB,IAAKgO,EAAElZ,MAAMmY,KAAOe,EAAElZ,MAAMiK,SAAW,EAAI,KAEvFiP,EAAElZ,MAAMiK,SAAWiP,EAAElZ,MAAMqY,OAC3Ba,EAAElZ,MAAMiK,SAAWiP,EAAElZ,MAAMqY,KAAO,EAAIvuB,KAAKohB,IAAKgO,EAAElZ,MAAMiK,SAAWiP,EAAElZ,MAAMqY,KAAO,EAAI,KAGtFa,EAAElZ,MAAMkK,SAAWgP,EAAElZ,MAAMoY,OAC3Bc,EAAElZ,MAAMkK,SAAYgP,EAAElZ,MAAMoY,KAAO,EAAItuB,KAAKohB,IAAKgO,EAAElZ,MAAMoY,KAAOc,EAAElZ,MAAMkK,SAAW,EAAI,KAEvFgP,EAAElZ,MAAMkK,SAAWgP,EAAElZ,MAAMsY,OAC3BY,EAAElZ,MAAMkK,SAAWgP,EAAElZ,MAAMsY,KAAO,EAAIxuB,KAAKohB,IAAKgO,EAAElZ,MAAMkK,SAAWgP,EAAElZ,MAAMsY,KAAO,EAAI,KAIrFY,EAAExa,SAAS+Z,gBAAeS,EAAExa,SAAS+Z,cAAgBS,EAAElZ,MAAMwY,eAAepL,GAC5E8L,EAAExa,SAASga,gBAAeQ,EAAExa,SAASga,cAAgBQ,EAAElZ,MAAMwY,eAAenL,GAC5E6L,EAAExa,SAASia,WAAUO,EAAExa,SAASia,SAAWjmB,KAAKkX,OACrDsP,EAAExa,SAAS0O,GAAK8L,EAAElZ,MAAMwY,eAAepL,EAAI8L,EAAExa,SAAS+Z,gBAAkB/lB,KAAKkX,MAAQsP,EAAExa,SAASia,UAAY,EAC5GO,EAAExa,SAAS2O,GAAK6L,EAAElZ,MAAMwY,eAAenL,EAAI6L,EAAExa,SAASga,gBAAkBhmB,KAAKkX,MAAQsP,EAAExa,SAASia,UAAY,EACxG7uB,KAAKmH,IAAIioB,EAAElZ,MAAMwY,eAAepL,EAAI8L,EAAExa,SAAS+Z,eAAiB,IAAGS,EAAExa,SAAS0O,EAAI,GAClFtjB,KAAKmH,IAAIioB,EAAElZ,MAAMwY,eAAenL,EAAI6L,EAAExa,SAASga,eAAiB,IAAGQ,EAAExa,SAAS2O,EAAI,GACtF6L,EAAExa,SAAS+Z,cAAgBS,EAAElZ,MAAMwY,eAAepL,EAClD8L,EAAExa,SAASga,cAAgBQ,EAAElZ,MAAMwY,eAAenL,EAClD6L,EAAExa,SAASia,SAAWjmB,KAAKkX,MAE3BsP,EAAEnB,QAAQG,UAAU9kB,UAAU,eAAiB8lB,EAAElZ,MAAMiK,SAAW,OAASiP,EAAElZ,MAAMkK,SAAW,YAElGrC,WAAY,SAAU3d,EAAGiB,GACrB,GAAI+tB,GAAIhvB,EAAEuL,IACV,IAAKyjB,EAAEnB,QAAQ/X,OAAoC,IAA3BkZ,EAAEnB,QAAQ/X,MAAMlU,OAAxC,CACA,IAAKotB,EAAElZ,MAAMgJ,YAAckQ,EAAElZ,MAAMiJ,QAG/B,MAFAiQ,GAAElZ,MAAMgJ,WAAY,OACpBkQ,EAAElZ,MAAMiJ,SAAU,EAGtBiQ,GAAElZ,MAAMgJ,WAAY,EACpBkQ,EAAElZ,MAAMiJ,SAAU,CAClB,IAAI4Q,GAAoB,IACpBC,EAAoB,IACpBC,EAAoBb,EAAExa,SAAS0O,EAAIyM,EACnCG,EAAed,EAAElZ,MAAMiK,SAAW8P,EAClCE,EAAoBf,EAAExa,SAAS2O,EAAIyM,EACnCI,EAAehB,EAAElZ,MAAMkK,SAAW+P,CAGjB,KAAjBf,EAAExa,SAAS0O,IAASyM,EAAoB/vB,KAAKmH,KAAK+oB,EAAed,EAAElZ,MAAMiK,UAAYiP,EAAExa,SAAS0O,IAC/E,IAAjB8L,EAAExa,SAAS2O,IAASyM,EAAoBhwB,KAAKmH,KAAKipB,EAAehB,EAAElZ,MAAMkK,UAAYgP,EAAExa,SAAS2O,GACpG,IAAIzB,GAAmB9hB,KAAKwY,IAAIuX,EAAmBC,EAEnDZ,GAAElZ,MAAMiK,SAAW+P,EACnBd,EAAElZ,MAAMkK,SAAWgQ,CAGnB,IAAIP,GAAcT,EAAElZ,MAAM/Q,MAAQiqB,EAAE9T,MAChCwU,EAAeV,EAAElZ,MAAM9Q,OAASgqB,EAAE9T,KACtC8T,GAAElZ,MAAMmY,KAAOruB,KAAKoc,IAAKgT,EAAEnB,QAAQC,WAAa,EAAI2B,EAAc,EAAI,GACtET,EAAElZ,MAAMqY,MAAQa,EAAElZ,MAAMmY,KACxBe,EAAElZ,MAAMoY,KAAOtuB,KAAKoc,IAAKgT,EAAEnB,QAAQE,YAAc,EAAI2B,EAAe,EAAI,GACxEV,EAAElZ,MAAMsY,MAAQY,EAAElZ,MAAMoY,KACxBc,EAAElZ,MAAMiK,SAAWngB,KAAKwY,IAAIxY,KAAKoc,IAAIgT,EAAElZ,MAAMiK,SAAUiP,EAAElZ,MAAMqY,MAAOa,EAAElZ,MAAMmY,MAC9Ee,EAAElZ,MAAMkK,SAAWpgB,KAAKwY,IAAIxY,KAAKoc,IAAIgT,EAAElZ,MAAMkK,SAAUgP,EAAElZ,MAAMsY,MAAOY,EAAElZ,MAAMoY,MAE9Ec,EAAEnB,QAAQG,UAAU3S,WAAWqG,GAAkBxY,UAAU,eAAiB8lB,EAAElZ,MAAMiK,SAAW,OAASiP,EAAElZ,MAAMkK,SAAW,WAE/HiC,gBAAiB,SAAUjiB,GACvB,GAAIgvB,GAAIhvB,EAAEuL,IACNyjB,GAAEnB,QAAQrV,OAASxY,EAAEsa,gBAAkBta,EAAEI,cACzC4uB,EAAEnB,QAAQ/X,MAAM5M,UAAU,+BAC1B8lB,EAAEnB,QAAQG,UAAU9kB,UAAU,sBAC9B8lB,EAAEnB,QAAQrV,MAAQwW,EAAEnB,QAAQ/X,MAAQkZ,EAAEnB,QAAQG,UAAYzhB,OAC1DyiB,EAAE9T,MAAQ8T,EAAErB,aAAe,IAInCsC,WAAY,SAAUjwB,EAAGiB,GACrB,GAAI+tB,GAAIhvB,EAAEuL,IAMV,IALKyjB,EAAEnB,QAAQrV,QACXwW,EAAEnB,QAAQrV,MAAQxY,EAAE2e,aAAepf,EAAES,EAAE2e,cAAgB3e,EAAEE,OAAOC,GAAGH,EAAEI,aACrE4uB,EAAEnB,QAAQ/X,MAAQkZ,EAAEnB,QAAQrV,MAAMzE,KAAK,oBACvCib,EAAEnB,QAAQG,UAAYgB,EAAEnB,QAAQ/X,MAAMqZ,OAAO,IAAMnvB,EAAEP,OAAO+R,qBAE3Dwd,EAAEnB,QAAQ/X,OAAoC,IAA3BkZ,EAAEnB,QAAQ/X,MAAMlU,OAAxC,CAEA,GAAIsuB,GAAQC,EAAQC,EAASC,EAASC,EAAOC,EAAO1I,EAAYD,EAAY4I,EAAYC,EAAahB,EAAaC,EAAcgB,EAAeC,EAAeC,EAAeC,EAAe/C,EAAYC,CAElK,UAA3BiB,EAAElZ,MAAMuY,aAAanL,GAAqBjiB,GACjDivB,EAAoB,aAAXjvB,EAAEmf,KAAsBnf,EAAEsuB,eAAe,GAAGhP,MAAQtf,EAAEsf,MAC/D4P,EAAoB,aAAXlvB,EAAEmf,KAAsBnf,EAAEsuB,eAAe,GAAG/O,MAAQvf,EAAEuf,QAG/D0P,EAASlB,EAAElZ,MAAMuY,aAAanL,EAC9BiN,EAASnB,EAAElZ,MAAMuY,aAAalL,GAG9B6L,EAAE9T,OAAqB,IAAZ8T,EAAE9T,OAEb8T,EAAE9T,MAAQ8T,EAAErB,aAAe,EAC3BqB,EAAEnB,QAAQG,UAAU3S,WAAW,KAAKnS,UAAU,sBAC9C8lB,EAAEnB,QAAQ/X,MAAMuF,WAAW,KAAKnS,UAAU,+BAC1C8lB,EAAEnB,QAAQrV,MAAQjM,SAIlByiB,EAAE9T,MAAQ8T,EAAErB,aAAeqB,EAAEnB,QAAQG,UAAU3tB,KAAK,qBAAuBL,EAAEP,OAAO+L,QAChFvK,GACA6sB,EAAakB,EAAEnB,QAAQrV,MAAM,GAAG0R,YAChC6D,EAAciB,EAAEnB,QAAQrV,MAAM,GAAGtB,aACjCkZ,EAAUpB,EAAEnB,QAAQrV,MAAM7T,SAAST,KACnCmsB,EAAUrB,EAAEnB,QAAQrV,MAAM7T,SAASP,IACnCksB,EAAQF,EAAUtC,EAAW,EAAIoC,EACjCK,EAAQF,EAAUtC,EAAY,EAAIoC,EAElCK,EAAaxB,EAAEnB,QAAQ/X,MAAM,GAAGoU,YAChCuG,EAAczB,EAAEnB,QAAQ/X,MAAM,GAAGoB,aACjCuY,EAAce,EAAaxB,EAAE9T,MAC7BwU,EAAee,EAAczB,EAAE9T,MAE/BwV,EAAgB9wB,KAAKoc,IAAK8R,EAAa,EAAI2B,EAAc,EAAI,GAC7DkB,EAAgB/wB,KAAKoc,IAAK+R,EAAc,EAAI2B,EAAe,EAAI,GAC/DkB,GAAiBF,EACjBG,GAAiBF,EAEjB9I,EAAayI,EAAQtB,EAAE9T,MACvB0M,EAAa2I,EAAQvB,EAAE9T,MAEnB2M,EAAa6I,IACb7I,EAAc6I,GAEd7I,EAAa+I,IACb/I,EAAa+I,GAGbhJ,EAAa+I,IACb/I,EAAc+I,GAEd/I,EAAaiJ,IACbjJ,EAAaiJ,KAIjBhJ,EAAa,EACbD,EAAa,GAEjBoH,EAAEnB,QAAQG,UAAU3S,WAAW,KAAKnS,UAAU,eAAiB2e,EAAa,OAASD,EAAa,SAClGoH,EAAEnB,QAAQ/X,MAAMuF,WAAW,KAAKnS,UAAU,4BAA8B8lB,EAAE9T,MAAQ,QAI1FkD,aAAc,SAAUlB,GACpB,GAAIE,GAASF,EAAS,MAAQ,IAE9B,IAAIld,EAAEP,OAAO8L,KAAM,CACf,GACIqS,IADS5d,EAAEE,SAC+B,eAAxBF,EAAEgd,YAAYN,QAA0B1c,EAAEwT,QAAQoK,kBAAmB5d,EAAEP,OAAOsQ,oBAAoB8N,SAAS,EAAMC,SAAS,GAE5I9d,GAAEwT,QAAQyb,UACVjvB,EAAEE,OAAOkd,GAAQ,eAAgBpd,EAAEuL,KAAKwjB,eAAgBnR,GACxD5d,EAAEE,OAAOkd,GAAQ,gBAAiBpd,EAAEuL,KAAK6jB,gBAAiBxR,GAC1D5d,EAAEE,OAAOkd,GAAQ,aAAcpd,EAAEuL,KAAK+jB,aAAc1R,IAEvB,eAAxB5d,EAAEgd,YAAYN,QACnB1c,EAAEE,OAAOkd,GAAQpd,EAAEgd,YAAYN,MAAO1c,EAAEuL,KAAKwjB,eAAgBnR,GAC7D5d,EAAEE,OAAOkd,GAAQpd,EAAEgd,YAAYL,KAAM3c,EAAEuL,KAAK6jB,gBAAiBxR,GAC7D5d,EAAEE,OAAOkd,GAAQpd,EAAEgd,YAAYJ,IAAK5c,EAAEuL,KAAK+jB,aAAc1R,IAI7D5d,EAAEod,GAAQ,aAAcpd,EAAEuL,KAAKkS,cAC/Bzd,EAAEE,OAAOuB,KAAK,SAAUC,EAAO8W,GACvBjZ,EAAEiZ,GAAOzE,KAAK,IAAM/T,EAAEP,OAAO+R,oBAAoB5P,OAAS,GAC1DrC,EAAEiZ,GAAO4E,GAAQpd,EAAEgd,YAAYL,KAAM3c,EAAEuL,KAAKmS,eAGpD1d,EAAEod,GAAQ,WAAYpd,EAAEuL,KAAKoS,YAG7B3d,EAAEod,GAAQ,gBAAiBpd,EAAEuL,KAAK0W,iBAC9BjiB,EAAEP,OAAOiM,YACT1L,EAAE8pB,GAAG,YAAa9pB,EAAEuL,KAAK0kB,cAIrCnE,KAAM,WACF9rB,EAAEuL,KAAK6S,gBAEX4N,QAAS,WACLhsB,EAAEuL,KAAK6S,cAAa,KAQ5Bpe,EAAE8wB,WACF,KAAK,GAAIC,KAAU/wB,GAAEgxB,QAAS,CAC1B,GAAIjoB,GAAI/I,EAAEgxB,QAAQD,GAAQ/wB,EAAGA,EAAEP,OAAOsxB,GAClChoB,IAAG/I,EAAE8wB,SAASjuB,KAAKkG,GAoU3B,MAjUA/I,GAAEixB,YAAc,SAAU7nB,GACtB,IAAK,GAAInE,GAAI,EAAGA,EAAIjF,EAAE8wB,SAASlvB,OAAQqD,IAC/BmE,IAAapJ,GAAE8wB,SAAS7rB,IACxBjF,EAAE8wB,SAAS7rB,GAAGmE,GAAW8nB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAoBvGlxB,EAAEmxB,yBAGFnxB,EAAEW,KAAO,SAAUyI,GAEXpJ,EAAEP,OAAO2J,IACTpJ,EAAEP,OAAO2J,GAAW8nB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAE1F,IAAIjsB,EAEJ,IAAIjF,EAAEmxB,sBAAsB/nB,GACxB,IAAKnE,EAAI,EAAGA,EAAIjF,EAAEmxB,sBAAsB/nB,GAAWxH,OAAQqD,IACvDjF,EAAEmxB,sBAAsB/nB,GAAWnE,GAAGisB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAI5GlxB,GAAEixB,aAAajxB,EAAEixB,YAAY7nB,EAAW8nB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAElHlxB,EAAE8pB,GAAK,SAAU1gB,EAAWgoB,GAIxB,MAHAhoB,GAAYD,EAAmBC,GAC1BpJ,EAAEmxB,sBAAsB/nB,KAAYpJ,EAAEmxB,sBAAsB/nB,OACjEpJ,EAAEmxB,sBAAsB/nB,GAAWvG,KAAKuuB,GACjCpxB,GAEXA,EAAEgqB,IAAM,SAAU5gB,EAAWgoB,GACzB,GAAInsB,EAEJ,IADAmE,EAAYD,EAAmBC,GACR,SAAZgoB,EAGP,MADApxB,GAAEmxB,sBAAsB/nB,MACjBpJ,CAEX,IAAKA,EAAEmxB,sBAAsB/nB,IAA4D,IAA9CpJ,EAAEmxB,sBAAsB/nB,GAAWxH,OAA9E,CACA,IAAKqD,EAAI,EAAGA,EAAIjF,EAAEmxB,sBAAsB/nB,GAAWxH,OAAQqD,IACpDjF,EAAEmxB,sBAAsB/nB,GAAWnE,KAAOmsB,GAASpxB,EAAEmxB,sBAAsB/nB,GAAWioB,OAAOpsB,EAAG,EAEvG,OAAOjF,KAEXA,EAAEsxB,KAAO,SAAUloB,EAAWgoB,GAC1BhoB,EAAYD,EAAmBC,EAC/B,IAAImoB,GAAW,WACXH,EAAQF,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,IAC1ElxB,EAAEgqB,IAAI5gB,EAAWmoB,GAGrB,OADAvxB,GAAE8pB,GAAG1gB,EAAWmoB,GACTvxB,GAKXA,EAAE0R,MACE8f,cAAe,SAAUC,GAErB,MADAA,GAAIpxB,KAAK,WAAY,KACdoxB,GAEXC,QAAS,SAAUD,EAAKE,GAEpB,MADAF,GAAIpxB,KAAK,OAAQsxB,GACVF,GAGXG,SAAU,SAAUH,EAAKI,GAErB,MADAJ,GAAIpxB,KAAK,aAAcwxB,GAChBJ,GAGXlW,QAAS,SAAUkW,GAEf,MADAA,GAAIpxB,KAAK,iBAAiB,GACnBoxB,GAGXjW,OAAQ,SAAUiW,GAEd,MADAA,GAAIpxB,KAAK,iBAAiB,GACnBoxB,GAGXxT,WAAY,SAAUzY,GACI,KAAlBA,EAAMvC,UACN1D,EAAEiG,EAAMpE,QAAQC,GAAGrB,EAAEP,OAAOgP,aAC5BzO,EAAEge,YAAYxY,GACVxF,EAAEY,MACFZ,EAAE0R,KAAKogB,OAAO9xB,EAAEP,OAAOqS,kBAGvB9R,EAAE0R,KAAKogB,OAAO9xB,EAAEP,OAAOmS,mBAGtBrS,EAAEiG,EAAMpE,QAAQC,GAAGrB,EAAEP,OAAOiP,cACjC1O,EAAEke,YAAY1Y,GACVxF,EAAEsH,YACFtH,EAAE0R,KAAKogB,OAAO9xB,EAAEP,OAAOoS,mBAGvB7R,EAAE0R,KAAKogB,OAAO9xB,EAAEP,OAAOkS,mBAG3BpS,EAAEiG,EAAMpE,QAAQC,GAAG,IAAMrB,EAAEP,OAAOgR,cAClClR,EAAEiG,EAAMpE,QAAQ,GAAG2wB,UAI3BC,WAAYzyB,EAAE,gBAAkBS,EAAEP,OAAO6R,kBAAoB,sDAE7DwgB,OAAQ,SAAUG,GACd,GAAIC,GAAelyB,EAAE0R,KAAKsgB,UACE,KAAxBE,EAAatwB,SACjBswB,EAAa5W,KAAK,IAClB4W,EAAa5W,KAAK2W,KAEtBnG,KAAM,WAEE9rB,EAAEP,OAAOgP,YAAczO,EAAEyO,YAAczO,EAAEyO,WAAW7M,OAAS,IAC7D5B,EAAE0R,KAAK8f,cAAcxxB,EAAEyO,YACvBzO,EAAE0R,KAAKggB,QAAQ1xB,EAAEyO,WAAY,UAC7BzO,EAAE0R,KAAKkgB,SAAS5xB,EAAEyO,WAAYzO,EAAEP,OAAOmS,mBAEvC5R,EAAEP,OAAOiP,YAAc1O,EAAE0O,YAAc1O,EAAE0O,WAAW9M,OAAS,IAC7D5B,EAAE0R,KAAK8f,cAAcxxB,EAAE0O,YACvB1O,EAAE0R,KAAKggB,QAAQ1xB,EAAE0O,WAAY,UAC7B1O,EAAE0R,KAAKkgB,SAAS5xB,EAAE0O,WAAY1O,EAAEP,OAAOkS,mBAG3CpS,EAAES,EAAER,WAAWulB,OAAO/kB,EAAE0R,KAAKsgB,aAEjCpW,eAAgB,WACR5b,EAAEP,OAAOqO,YAAc9N,EAAEP,OAAOuO,qBAAuBhO,EAAEgb,SAAWhb,EAAEgb,QAAQpZ,QAC9E5B,EAAEgb,QAAQvZ,KAAK,WACX,GAAI0wB,GAAS5yB,EAAED,KACfU,GAAE0R,KAAK8f,cAAcW,GACrBnyB,EAAE0R,KAAKggB,QAAQS,EAAQ,UACvBnyB,EAAE0R,KAAKkgB,SAASO,EAAQnyB,EAAEP,OAAOsS,wBAAwB8F,QAAQ,YAAasa,EAAOzwB,QAAU,OAI3GsqB,QAAS,WACDhsB,EAAE0R,KAAKsgB,YAAchyB,EAAE0R,KAAKsgB,WAAWpwB,OAAS,GAAG5B,EAAE0R,KAAKsgB,WAAWpN,WAQjF5kB,EAAE8rB,KAAO,WACD9rB,EAAEP,OAAOe,MAAMR,EAAE2kB,aACrB3kB,EAAEmX,sBACFnX,EAAEuX,mBACFvX,EAAEyb,mBACEzb,EAAEP,OAAOkM,WAAa3L,EAAE2L,YACxB3L,EAAE2L,UAAUsQ,MACRjc,EAAEP,OAAOoM,oBACT7L,EAAE2L,UAAUke,mBAGI,UAApB7pB,EAAEP,OAAO8K,QAAsBvK,EAAEgjB,QAAQhjB,EAAEP,OAAO8K,UAC7CvK,EAAEP,OAAOe,MAAMR,EAAE4H,iBACtB5H,EAAEgjB,QAAQhjB,EAAEP,OAAO8K,QAAQ6Y,gBAE3BpjB,EAAEP,OAAOe,KACTR,EAAEoc,QAAQpc,EAAEP,OAAOiK,aAAe1J,EAAEuP,aAAc,EAAGvP,EAAEP,OAAOuS,qBAG9DhS,EAAEoc,QAAQpc,EAAEP,OAAOiK,aAAc,EAAG1J,EAAEP,OAAOuS,oBACf,IAA1BhS,EAAEP,OAAOiK,eACL1J,EAAEsL,UAAYtL,EAAEP,OAAO6L,UAAUtL,EAAEsL,SAAS8X,eAC5CpjB,EAAEqI,MAAQrI,EAAEP,OAAO2I,cACnBpI,EAAEqI,KAAKC,OACPtI,EAAEqI,KAAK2f,oBAAqB,KAIxChoB,EAAEoe,eACEpe,EAAEP,OAAO0C,UAAYnC,EAAEwT,QAAQrR,UAC/BnC,EAAEukB,gBAEFvkB,EAAEP,OAAO2P,gBAAkBpP,EAAEP,OAAO2I,aACpCpI,EAAEoP,gBAEFpP,EAAEP,OAAO8L,MAAQvL,EAAEuL,MACnBvL,EAAEuL,KAAKugB,OAEP9rB,EAAEP,OAAOK,UACTE,EAAEyW,gBAEFzW,EAAEP,OAAOsM,iBACL/L,EAAEgtB,uBAAuBhtB,EAAEgtB,wBAE/BhtB,EAAEP,OAAOuM,mBACLhM,EAAEytB,yBAAyBztB,EAAEytB,0BAGjCztB,EAAEP,OAAO2yB,sBACTpyB,EAAEP,OAAO4M,aAAerM,EAAEP,OAAO2yB,qBAEjCpyB,EAAEP,OAAO2M,SACLpM,EAAEoM,SAASpM,EAAEoM,QAAQ0f,OAEzB9rB,EAAEP,OAAOyM,SACLlM,EAAEkM,SAASlM,EAAEkM,QAAQ4f,OAEzB9rB,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0R,KAAKoa,OACpC9rB,EAAEW,KAAK,SAAUX,IAIrBA,EAAEqyB,cAAgB,WAEdryB,EAAER,UAAUua,YAAY/Z,EAAEwS,WAAW8B,KAAK,MAAM4Q,WAAW,SAG3DllB,EAAE4T,QAAQsR,WAAW,SAGjBllB,EAAEE,QAAUF,EAAEE,OAAO0B,QACrB5B,EAAEE,OACG6Z,aACC/Z,EAAEP,OAAOyQ,kBACTlQ,EAAEP,OAAOuE,iBACThE,EAAEP,OAAO2Q,eACTpQ,EAAEP,OAAO6Q,gBACTgE,KAAK,MACN4Q,WAAW,SACXA,WAAW,sBACXA,WAAW,mBAIhBllB,EAAE8T,qBAAuB9T,EAAE8T,oBAAoBlS,QAC/C5B,EAAE8T,oBAAoBiG,YAAY/Z,EAAEP,OAAOqR,uBAE3C9Q,EAAEgb,SAAWhb,EAAEgb,QAAQpZ,QACvB5B,EAAEgb,QAAQjB,YAAY/Z,EAAEP,OAAOiR,mBAI/B1Q,EAAEP,OAAOiP,YAAYnP,EAAES,EAAEP,OAAOiP,YAAYqL,YAAY/Z,EAAEP,OAAOkR,qBACjE3Q,EAAEP,OAAOgP,YAAYlP,EAAES,EAAEP,OAAOgP,YAAYsL,YAAY/Z,EAAEP,OAAOkR,qBAGjE3Q,EAAEP,OAAOkM,WAAa3L,EAAE2L,YACpB3L,EAAE2L,UAAUud,OAASlpB,EAAE2L,UAAUud,MAAMtnB,QAAQ5B,EAAE2L,UAAUud,MAAMhE,WAAW,SAC5EllB,EAAE2L,UAAU8d,MAAQzpB,EAAE2L,UAAU8d,KAAK7nB,QAAQ5B,EAAE2L,UAAU8d,KAAKvE,WAAW,WAKrFllB,EAAEgsB,QAAU,SAAUsG,EAAgBD,GAElCryB,EAAEqe,eAEFre,EAAEc,eAEEd,EAAEP,OAAOkM,WAAa3L,EAAE2L,WACpB3L,EAAEP,OAAOoM,oBACT7L,EAAE2L,UAAUoe,mBAIhB/pB,EAAEP,OAAOe,MACTR,EAAEoT,cAGFif,GACAryB,EAAEqyB,gBAGNryB,EAAEykB,sBAGEzkB,EAAEP,OAAO8L,MAAQvL,EAAEuL,MACnBvL,EAAEuL,KAAKygB,UAGPhsB,EAAEP,OAAOsM,iBACL/L,EAAE+sB,wBAAwB/sB,EAAE+sB,yBAEhC/sB,EAAEP,OAAOuM,mBACLhM,EAAEwtB,0BAA0BxtB,EAAEwtB,2BAGlCxtB,EAAEP,OAAOiS,MAAQ1R,EAAE0R,MAAM1R,EAAE0R,KAAKsa,UAEhChsB,EAAEP,OAAO2M,UAAYpM,EAAEP,OAAO4M,cAC9BrK,OAAOuwB,oBAAoB,WAAYvyB,EAAEoM,QAAQogB,oBAEjDxsB,EAAEP,OAAOyM,SAAWlM,EAAEkM,SACtBlM,EAAEkM,QAAQ8f,UAGdhsB,EAAEW,KAAK,aAEH2xB,KAAmB,IAAOtyB,EAAI,OAGtCA,EAAE8rB,OAKK9rB,GAOXZ,GAAOozB,WACHlL,SAAU,WACN,GAAImL,GAAKzwB,OAAO6a,UAAUoQ,UAAUppB,aACpC,OAAQ4uB,GAAGzpB,QAAQ,WAAa,GAAKypB,EAAGzpB,QAAQ,UAAY,GAAKypB,EAAGzpB,QAAQ,WAAa,KAE7Fue,YAAa,+CAA+CmL,KAAK1wB,OAAO6a,UAAUoQ,WAClF1B,QAAS,SAAUoH,GACf,MAAgD,mBAAzCC,OAAOJ,UAAUpO,SAASyO,MAAMF,IAK3CpV,SACIC,GAAIxb,OAAO6a,UAAUC,gBAAkB9a,OAAO6a,UAAUE,iBACxD+V,QAAU9wB,OAAO6a,UAAUE,kBAAoB/a,OAAO6a,UAAUkW,iBAAmB,GAAO/wB,OAAO6a,UAAUC,gBAAkB9a,OAAO6a,UAAUmW,eAAiB,EAC/JzQ,OAAQ,WAEJ,GAAI0Q,GAAMvvB,SAAS0pB,cAAc,MAIjC,OAFA6F,GAAIC,UAAY,wCAEgC,IAAzCD,EAAIE,qBAAqB,KAAKvxB,WAM7CwS,OAAQ,WACJ,GAAIqe,GAAKzwB,OAAO6a,UAAUoQ,UACtB5Y,EAAUoe,EAAGW,MAAM,+BACnBC,EAAOZ,EAAGW,MAAM,wBAChBE,EAAOb,EAAGW,MAAM,2BAChBG,GAAUF,GAAQZ,EAAGW,MAAM,6BAC/B,QACIrV,IAAKsV,GAAQE,GAAUD,EACvBjf,QAASA,MAMjBb,SACIG,MAAS3R,OAAOwxB,WAAaA,UAAU7f,SAAU,GAAS,WACtD,SAAW,gBAAkB3R,SAAWA,OAAOyxB,eAAiB/vB,mBAAoB+vB,mBAGxF/f,aAAgB1R,OAAOwxB,WAAaA,UAAUE,mBAAoB,GAAS,WACvE,GAAIT,GAAMvvB,SAAS0pB,cAAc,OAAOlY,KACxC,OAAQ,qBAAuB+d,IAAO,kBAAoBA,IAAO,gBAAkBA,IAAO,iBAAmBA,IAAO,eAAiBA,MAGzIxf,QAAS,WAGL,IAAK,GAFDwf,GAAMvvB,SAAS0pB,cAAc,OAAOlY,MACpCye,EAAS,yKAA2K9P,MAAM,KACrL5e,EAAI,EAAGA,EAAI0uB,EAAO/xB,OAAQqD,IAC/B,GAAI0uB,EAAO1uB,IAAMguB,GAAK,OAAO,KAIrC9wB,SAAU,WACN,MAAQ,oBAAsBH,SAAU,0BAA4BA,WAGxE4b,gBAAiB,WACb,GAAIgW,IAAkB,CACtB,KACI,GAAIC,GAAOjB,OAAOkB,kBAAmB,WACjCC,IAAK,WACDH,GAAkB,IAG1B5xB,QAAOuqB,iBAAiB,sBAAuB,KAAMsH,GACvD,MAAO5yB,IACT,MAAO2yB,MAGX3E,SAAU,WACN,MAAO,kBAAoBjtB,YAMnCgvB,YAeJ,SAA0BgD,GACtBA,EAAIC,GAAG1gB,OAAS,SAAU9T,GACtB,GAAIy0B,EAKJ,OAJAF,GAAI10B,MAAMmC,KAAK,WACX,GAAIzB,GAAI,GAAIZ,GAAOE,KAAMG,EACpBy0B,KAAeA,EAAgBl0B,KAEjCk0B,IAfE30B,EAEjB,IAAI40B,GAAS50B,CAyEhB,OAxDO40B,KACM,iBAAmBA,GAAOF,KAC5BE,EAAOF,GAAGrd,cAAgB,SAAUhB,GAGhC,QAASwe,GAAanzB,GAElB,GAAIA,EAAEG,SAAW9B,KAEjB,IADAsW,EAASye,KAAK/0B,KAAM2B,GACfgE,EAAI,EAAGA,EAAIqvB,EAAO1yB,OAAQqD,IAC3BsvB,EAAIvK,IAAIsK,EAAOrvB,GAAImvB,GAP3B,GACInvB,GADAqvB,GAAU,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACjFC,EAAMj1B,IAShB,IAAIsW,EACA,IAAK3Q,EAAI,EAAGA,EAAIqvB,EAAO1yB,OAAQqD,IAC3BsvB,EAAIzK,GAAGwK,EAAOrvB,GAAImvB,EAG1B,OAAO90B,QAGT,aAAe60B,GAAOF,KACxBE,EAAOF,GAAG/qB,UAAY,SAAUA,GAC5B,IAAK,GAAIjE,GAAI,EAAGA,EAAI3F,KAAKsC,OAAQqD,IAAK,CAClC,GAAIuvB,GAAUl1B,KAAK2F,GAAGiQ,KACtBsf,GAAQ5Q,gBAAkB4Q,EAAQvQ,YAAcuQ,EAAQtQ,YAAcsQ,EAAQzQ,aAAeyQ,EAAQxQ,WAAawQ,EAAQtrB,UAAYA,EAE1I,MAAO5J,QAGT,cAAgB60B,GAAOF,KACzBE,EAAOF,GAAG5Y,WAAa,SAAUyH,GACL,gBAAbA,KACPA,GAAsB,KAE1B,KAAK,GAAI7d,GAAI,EAAGA,EAAI3F,KAAKsC,OAAQqD,IAAK,CAClC,GAAIuvB,GAAUl1B,KAAK2F,GAAGiQ,KACtBsf,GAAQC,yBAA2BD,EAAQE,qBAAuBF,EAAQG,qBAAuBH,EAAQI,sBAAwBJ,EAAQK,oBAAsBL,EAAQM,mBAAqBhS,EAEhM,MAAOxjB,QAGT,cAAgB60B,GAAOF,KACzBE,EAAOF,GAAGhb,WAAa,SAAU8b,GAC7B,MAAIz1B,MAAKsC,OAAS,EACVmzB,EACOz1B,KAAK,GAAG4qB,YAActS,WAAWtY,KAAK4U,IAAI,iBAAmB0D,WAAWtY,KAAK4U,IAAI,gBAEjF5U,KAAK,GAAG4qB,YAEX,QAMpB9qB","file":"../swiper.jquery.umd.min.js","sourcesContent":["/**\n * Swiper 3.4.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2017, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: March 10, 2017\n */\n(function (root, factory) {\n\t'use strict';\n\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory(require('jquery'));\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.Swiper = factory(root.jQuery);\n\t}\n}(this, function ($) {\n\t'use strict';\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n \n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 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', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Zoom\n zoom: false,\n zoomMax: 3,\n zoomMin: 1,\n zoomToggle: true,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n mousewheelEventsTarged: 'container',\n // Hash Navigation\n hashnav: false,\n hashnavWatchState: false,\n // History\n history: false,\n // Commong Nav State\n replaceState: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\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 onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\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 // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n normalizeSlideIndex: true,\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\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 bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n paginationClickableClass: 'swiper-pagination-clickable', // NEW\n paginationModifierClass: 'swiper-pagination-', // NEW\n lazyLoadingClass: 'swiper-lazy',\n lazyStatusLoadingClass: 'swiper-lazy-loading',\n lazyStatusLoadedClass: 'swiper-lazy-loaded',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n notificationClass: 'swiper-notification',\n preloaderClass: 'preloader',\n zoomContainerClass: 'swiper-zoom-container',\n \n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\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 // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onBeforeResize: function (swiper)\n onAfterResize: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n onKeyPress: function (swiper, keyCode)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push(s.params.containerModifierClass + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push(s.params.containerModifierClass + 'free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push(s.params.containerModifierClass + 'no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push(s.params.containerModifierClass + 'autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Max resistance when touchReleaseOnEdges\n if (s.params.touchReleaseOnEdges) {\n s.params.resistanceRatio = 0;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push(s.params.containerModifierClass + '3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push(s.params.containerModifierClass + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push(s.params.containerModifierClass + 'rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push(s.params.containerModifierClass + 'multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push(s.params.containerModifierClass + 'android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n if (s.params.allowSwipeToNext === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n if (s.params.grabCursor) s.unsetGrabCursor();\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n if (s.params.allowSwipeToNext === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n if (s.params.grabCursor) s.setGrabCursor();\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n s.setGrabCursor = function(moving) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n s.container[0].style.cursor = moving ? 'grabbing': 'grab';\n };\n s.unsetGrabCursor = function () {\n s.container[0].style.cursor = '';\n };\n if (s.params.grabCursor) {\n s.setGrabCursor();\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n var autoplayDelay = s.params.autoplay;\n var activeSlide = s.slides.eq(s.activeIndex);\n if (activeSlide.attr('data-swiper-autoplay')) {\n autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;\n }\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, autoplayDelay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n var activeSlides = [];\n var newHeight = 0;\n var i;\n \n // Find slides currently in view\n if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {\n var index = s.activeIndex + i;\n if(index > s.slides.length) break;\n activeSlides.push(s.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(s.slides.eq(s.activeIndex)[0]);\n }\n \n // Find new height from heighest slide in view\n for (i = 0; i < activeSlides.length; i++) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n \n // Update Height\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .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 }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css(\n 'margin-' + (s.isHorizontal() ? 'top' : 'left'),\n (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Dynamic Slides Per View\n ===========================*/\n s.currentSlidesPerView = function () {\n var spv = 1, i, j;\n if (s.params.centeredSlides) {\n var size = s.slides[s.activeIndex].swiperSlideSize;\n var breakLoop;\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slides[i] && !breakLoop) {\n size += s.slides[i].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n for (j = s.activeIndex - 1; j >= 0; j--) {\n if (s.slides[j] && !breakLoop) {\n size += s.slides[j].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n }\n else {\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {\n spv++;\n }\n }\n }\n return spv;\n };\n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n }\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n s.updateRealIndex();\n };\n s.updateRealIndex = function(){\n s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n nextSlide = s.slides.eq(0);\n nextSlide.addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n prevSlide = s.slides.eq(-1);\n prevSlide.addClass(s.params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n if (!s) return;\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n var newTranslate;\n function forceSetTranslate() {\n var translate = s.rtl ? -s.translate : s.translate;\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n if (s.params.onBeforeResize) s.params.onBeforeResize(s);\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n if (s.params.onAfterResize) s.params.onAfterResize(s);\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};\n if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};\n else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides,\n slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button, video',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {\n if (!s.isHorizontal()) {\n // Vertical\n if (\n (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||\n (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n else {\n if (\n (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||\n (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle;\n if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {\n isScrolling = false;\n }\n else {\n touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined') {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(true);\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n \n if (!s.params.followFinger) return;\n \n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(false);\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\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 if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n s.updateRealIndex();\n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0 || s.browser.lteIE9) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.history && s.history) {\n s.history.setHistory(s.params.history, s.activeIndex);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n s.disableTouchControl = function () {\n s.params.onlyExternal = true;\n return true;\n };\n s.enableTouchControl = function () {\n s.params.onlyExternal = false;\n return true;\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\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 (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\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 \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\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 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\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 \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n \n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');\n if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass(s.params.lazyStatusLoadingClass);\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset'),\n sizes = _img.attr('data-sizes');\n s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (sizes) {\n _img.attr('sizes', sizes);\n _img.removeAttr('data-sizes');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);\n slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n var slidesPerView = s.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n draggableEvents: (function () {\n if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;\n else return s.touchEvents;\n })(),\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(sb.draggableEvents.start, sb.dragStart);\n $(target).on(sb.draggableEvents.move, sb.dragMove);\n $(target).on(sb.draggableEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(sb.draggableEvents.start, sb.dragStart);\n $(target).off(sb.draggableEvents.move, sb.dragMove);\n $(target).off(sb.draggableEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n \n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // 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 var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\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 translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // 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 controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n \n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n onHashCange: function (e, a) {\n var newHash = document.location.hash.replace('#', '');\n var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash=\"' + (newHash) + '\"]').index());\n }\n },\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n $(window)[action]('hashchange', s.hashnav.onHashCange);\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n if (s.params.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));\n } else {\n var slide = s.slides.eq(s.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n }\n },\n init: function () {\n if (!s.params.hashnav || s.params.history) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n }\n if (s.params.hashnavWatchState) s.hashnav.attachEvents();\n },\n destroy: function () {\n if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);\n }\n };\n \n\n /*=========================\n History Api with fallback to Hashnav\n ===========================*/\n s.history = {\n init: function () {\n if (!s.params.history) return;\n if (!window.history || !window.history.pushState) {\n s.params.history = false;\n s.params.hashnav = true;\n return;\n }\n s.history.initialized = true;\n this.paths = this.getPathValues();\n if (!this.paths.key && !this.paths.value) return;\n this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);\n if (!s.params.replaceState) {\n window.addEventListener('popstate', this.setHistoryPopState);\n }\n },\n setHistoryPopState: function() {\n s.history.paths = s.history.getPathValues();\n s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);\n },\n getPathValues: function() {\n var pathArray = window.location.pathname.slice(1).split('/');\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function (key, index) {\n if (!s.history.initialized || !s.params.history) return;\n var slide = s.slides.eq(index);\n var value = this.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = key + '/' + value;\n }\n if (s.params.replaceState) {\n window.history.replaceState(null, null, value);\n } else {\n window.history.pushState(null, null, value);\n }\n },\n slugify: function(text) {\n return text.toString().toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w\\-]+/g, '')\n .replace(/\\-\\-+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function(speed, value, runCallbacks) {\n if (value) {\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHistory = this.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n s.slideTo(0, speed, runCallbacks);\n }\n }\n };\n \n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n s.emit('onKeyPress', s, kc);\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in document;\n \n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n \n if (!isSupported &&\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n \n return isSupported;\n }\n /**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\n function normalizeWheel( /*object*/ event ) /*object*/ {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n \n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n \n // Legacy\n if( 'detail' in event ) {\n sY = event.detail;\n }\n if( 'wheelDelta' in event ) {\n sY = -event.wheelDelta / 120;\n }\n if( 'wheelDeltaY' in event ) {\n sY = -event.wheelDeltaY / 120;\n }\n if( 'wheelDeltaX' in event ) {\n sX = -event.wheelDeltaX / 120;\n }\n \n // side scrolling on FF with DOMMouseScroll\n if( 'axis' in event && event.axis === event.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 event ) {\n pY = event.deltaY;\n }\n if( 'deltaX' in event ) {\n pX = event.deltaX;\n }\n \n if( (pX || pY) && event.deltaMode ) {\n if( event.deltaMode === 1 ) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n \n // Fall-back if spin cannot be determined\n if( pX && !sX ) {\n sX = (pX < 1) ? -1 : 1;\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 if (s.params.mousewheelControl) {\n /**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\n s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?\n 'DOMMouseScroll' :\n isEventSupported() ?\n 'wheel' : 'mousewheel';\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n var data = normalizeWheel( e );\n \n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n else return;\n }\n }\n else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;\n }\n \n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) {\n s.slideNext();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) {\n s.slidePrev();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n // Emit event\n s.emit('onScroll', s, e);\n \n // Stop autoplay\n if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.off(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = false;\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.on(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = true;\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Zoom\n ===========================*/\n s.zoom = {\n // \"Global\" Props\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n slide: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n image: undefined,\n imageWrap: undefined,\n zoomMax: s.params.zoomMax\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 // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function (e) {\n if (e.targetTouches.length < 2) return 1;\n var x1 = e.targetTouches[0].pageX,\n y1 = e.targetTouches[0].pageY,\n x2 = e.targetTouches[1].pageX,\n 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 (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleStart = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.slide || !z.gesture.slide.length) {\n z.gesture.slide = $(this);\n if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;\n if (z.gesture.imageWrap.length === 0) {\n z.gesture.image = undefined;\n return;\n }\n }\n z.gesture.image.transition(0);\n z.isScaling = true;\n },\n onGestureChange: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleMove = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (s.support.gestures) {\n z.scale = e.scale * z.currentScale;\n }\n else {\n z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;\n }\n if (z.scale > z.gesture.zoomMax) {\n z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);\n }\n if (z.scale < s.params.zoomMin) {\n z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);\n }\n z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');\n },\n onGestureEnd: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {\n return;\n }\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);\n z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n z.currentScale = z.scale;\n z.isScaling = false;\n if (z.scale === 1) z.gesture.slide = undefined;\n },\n onTouchStart: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (z.image.isTouched) return;\n if (s.device.os === 'android') e.preventDefault();\n z.image.isTouched = true;\n z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function (e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n s.allowClick = false;\n if (!z.image.isTouched || !z.gesture.slide) return;\n \n if (!z.image.isMoved) {\n z.image.width = z.gesture.image[0].offsetWidth;\n z.image.height = z.gesture.image[0].offsetHeight;\n z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;\n z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;\n z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;\n z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;\n z.gesture.imageWrap.transition(0);\n if (s.rtl) z.image.startX = -z.image.startX;\n if (s.rtl) z.image.startY = -z.image.startY;\n }\n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n \n if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;\n \n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n \n z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (!z.image.isMoved && !z.isScaling) {\n if (s.isHorizontal() &&\n (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||\n (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)\n ) {\n z.image.isTouched = false;\n return;\n }\n else if (!s.isHorizontal() &&\n (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||\n (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)\n ) {\n z.image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n \n z.image.isMoved = true;\n z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;\n z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;\n \n if (z.image.currentX < z.image.minX) {\n z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);\n }\n if (z.image.currentX > z.image.maxX) {\n z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);\n }\n \n if (z.image.currentY < z.image.minY) {\n z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);\n }\n if (z.image.currentY > z.image.maxY) {\n z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);\n }\n \n //Velocity\n if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;\n if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;\n if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();\n z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;\n z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;\n if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;\n if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;\n z.velocity.prevPositionX = z.image.touchesCurrent.x;\n z.velocity.prevPositionY = z.image.touchesCurrent.y;\n z.velocity.prevTime = Date.now();\n \n z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTouchEnd: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (!z.image.isTouched || !z.image.isMoved) {\n z.image.isTouched = false;\n z.image.isMoved = false;\n return;\n }\n z.image.isTouched = false;\n z.image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = z.velocity.x * momentumDurationX;\n var newPositionX = z.image.currentX + momentumDistanceX;\n var momentumDistanceY = z.velocity.y * momentumDurationY;\n var newPositionY = z.image.currentY + momentumDistanceY;\n \n //Fix duration\n if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);\n if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n \n z.image.currentX = newPositionX;\n z.image.currentY = newPositionY;\n \n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);\n z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);\n \n z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTransitionEnd: function (s) {\n var z = s.zoom;\n if (z.gesture.slide && s.previousIndex !== s.activeIndex) {\n z.gesture.image.transform('translate3d(0,0,0) scale(1)');\n z.gesture.imageWrap.transform('translate3d(0,0,0)');\n z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;\n z.scale = z.currentScale = 1;\n }\n },\n // Toggle Zoom\n toggleZoom: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.slide) {\n z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n \n var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;\n \n if (typeof z.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 }\n else {\n touchX = z.image.touchesStart.x;\n touchY = z.image.touchesStart.y;\n }\n \n if (z.scale && z.scale !== 1) {\n // Zoom Out\n z.scale = z.currentScale = 1;\n z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');\n z.gesture.slide = undefined;\n }\n else {\n // Zoom In\n z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;\n if (e) {\n slideWidth = z.gesture.slide[0].offsetWidth;\n slideHeight = z.gesture.slide[0].offsetHeight;\n offsetX = z.gesture.slide.offset().left;\n offsetY = z.gesture.slide.offset().top;\n diffX = offsetX + slideWidth/2 - touchX;\n diffY = offsetY + slideHeight/2 - touchY;\n \n imageWidth = z.gesture.image[0].offsetWidth;\n imageHeight = z.gesture.image[0].offsetHeight;\n scaledWidth = imageWidth * z.scale;\n scaledHeight = imageHeight * z.scale;\n \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 \n translateX = diffX * z.scale;\n translateY = diffY * z.scale;\n \n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n \n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n }\n else {\n translateX = 0;\n translateY = 0;\n }\n z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n }\n },\n // Attach/Detach Events\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n \n if (s.params.zoom) {\n var target = s.slides;\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n // Scale image\n if (s.support.gestures) {\n s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);\n s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);\n s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);\n }\n else if (s.touchEvents.start === 'touchstart') {\n s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);\n s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);\n s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);\n }\n \n // Move image\n s[action]('touchStart', s.zoom.onTouchStart);\n s.slides.each(function (index, slide){\n if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {\n $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);\n }\n });\n s[action]('touchEnd', s.zoom.onTouchEnd);\n \n // Scale Out\n s[action]('transitionEnd', s.zoom.onTransitionEnd);\n if (s.params.zoomToggle) {\n s.on('doubleTap', s.zoom.toggleZoom);\n }\n }\n },\n init: function () {\n s.zoom.attachEvents();\n },\n destroy: function () {\n s.zoom.attachEvents(true);\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n \n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n \n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.zoom && s.zoom) {\n s.zoom.init();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history\n if (s.params.hashnavReplaceState) {\n s.params.replaceState = s.params.hashnavReplaceState;\n }\n if (s.params.history) {\n if (s.history) s.history.init();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n \n // Destroy zoom\n if (s.params.zoom && s.zoom) {\n s.zoom.destroy();\n }\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Delete history popstate\n if (s.params.history && !s.params.replaceState) {\n window.removeEventListener('popstate', s.history.setHistoryPopState);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.destroy();\n }\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),\n lteIE9: (function() {\n // create temporary DIV\n var div = document.createElement('div');\n // add content to tmp DIV which is wrapped into the IE HTML conditional statement\n div.innerHTML = '';\n // return true / false value based on what will browser render\n return div.getElementsByTagName('i').length === 1;\n })()\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = window.navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\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 return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })(),\n \n passiveListener: (function () {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {}\n return supportsPassive;\n })(),\n \n gestures: (function () {\n return 'ongesturestart' in window;\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Get jQuery\n ===========================*/\n addLibraryPlugin($);\n \n var domLib = $;\n \n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n if (!('outerWidth' in domLib.fn)) {\n domLib.fn.outerWidth = function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n };\n }\n }\n \n\n\treturn Swiper;\n}));\n\n//# sourceMappingURL=maps/swiper.jquery.umd.js.map\n"]} \ No newline at end of file diff --git a/dist/js/maps/swiper.min.js.map b/dist/js/maps/swiper.min.js.map deleted file mode 100755 index 83676fd7e..000000000 --- a/dist/js/maps/swiper.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["swiper.js"],"names":["$","Swiper","container","params","round","a","Math","floor","autoplay","autoplayDelay","s","activeSlide","slides","eq","activeIndex","attr","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","each","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","slideClass","slideActiveClass","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","normalizeWheel","event","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMousewheel","delta","rtlFactor","data","mousewheelForceToAxis","abs","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","mousewheel","timeout","slideReset","lazyLoading","lazy","load","autoplayDisableOnInteraction","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","this","defaults","direction","touchEventsTarget","initialSlide","speed","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","zoom","zoomMax","zoomMin","zoomToggle","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","mousewheelEventsTarged","hashnav","hashnavWatchState","history","replaceState","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","touchReleaseOnEdges","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","normalizeSlideIndex","swipeHandler","noSwiping","noSwipingClass","passiveListeners","containerModifierClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","paginationClickableClass","paginationModifierClass","lazyLoadingClass","lazyStatusLoadingClass","lazyStatusLoadedClass","lazyPreloaderClass","notificationClass","preloaderClass","zoomContainerClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","swiper","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","unsetGrabCursor","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","setGrabCursor","unlockSwipeToPrev","unlockSwipes","moving","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","sizes","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","activeSlides","newHeight","ceil","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","max","slideSize","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","currentSlidesPerView","j","spv","breakLoop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","translatesDiff","newActiveIndex","snapIndex","previousIndex","updateRealIndex","realIndex","hasClass","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","controller","spline","slideTo","forceUpdatePagination","onBeforeResize","slideChangedBySlideTo","onAfterResize","touchEventsDesktop","start","move","end","navigator","pointerEnabled","msPointerEnabled","touchEvents","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","passiveListener","passive","capture","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","lteIE9","setHistory","setHash","clientLeft","_slidePrev","disableTouchControl","enableTouchControl","duration","byController","effects","setTransition","x","y","setTranslate","getTranslate","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","draggableEvents","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","binarySearch","guess","array","val","lastIndex","i1","i3","interpolate","x2","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","Array","isArray","setControlledTransition","onHashCange","newHash","location","hash","initialized","init","slideHash","destroy","pushState","paths","getPathValues","key","value","scrollToSlide","addEventListener","setHistoryPopState","pathArray","pathname","slice","slugify","includes","slideHistory","disableKeyboardControl","enableKeyboardControl","userAgent","isSupported","element","createElement","setAttribute","implementation","hasFeature","disableMousewheelControl","enableMousewheelControl","parallaxDuration","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrap","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","sqrt","onGestureStart","z","gestures","scaleStart","parent","onGestureChange","scaleMove","onGestureEnd","changedTouches","os","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","toggleZoom","touchX","touchY","offsetX","offsetY","diffX","diffY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","hashnavReplaceState","cleanupStyles","deleteInstance","removeEventListener","prototype","ua","test","arr","Object","apply","ieTouch","msMaxTouchPoints","maxTouchPoints","div","innerHTML","getElementsByTagName","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","styles","supportsPassive","opts","defineProperty","get","_this","context","els","tempParent","trim","toCreate","childNodes","querySelectorAll","getElementById","className","classes","classList","contains","toggle","attrs","attrName","removeAttribute","dom7ElementDataStorage","dataKey","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","targetSelector","listener","handleLiveEvent","call","k","events","dom7LiveListeners","liveListener","proxy","dom","eventData","evt","CustomEvent","bubbles","cancelable","createEvent","initEvent","dispatchEvent","fireCallBack","includeMargins","box","getBoundingClientRect","body","clientTop","scrollTop","props","prop","textContent","compareWith","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","appendChild","insertBefore","before","parentNode","insertAfter","after","nextSibling","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","unique","foundElements","removeChild","toAdd","fn","swiperDomPlugins","lib","firstInstance","domLib","module","exports","define","amd"],"mappings":"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","file":"../swiper.min.js","sourcesContent":["/**\n * Swiper 3.4.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2017, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: March 10, 2017\n */\n(function () {\n 'use strict';\n var $;\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n \n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 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', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Zoom\n zoom: false,\n zoomMax: 3,\n zoomMin: 1,\n zoomToggle: true,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n mousewheelEventsTarged: 'container',\n // Hash Navigation\n hashnav: false,\n hashnavWatchState: false,\n // History\n history: false,\n // Commong Nav State\n replaceState: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\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 onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\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 // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n normalizeSlideIndex: true,\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\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 bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n paginationClickableClass: 'swiper-pagination-clickable', // NEW\n paginationModifierClass: 'swiper-pagination-', // NEW\n lazyLoadingClass: 'swiper-lazy',\n lazyStatusLoadingClass: 'swiper-lazy-loading',\n lazyStatusLoadedClass: 'swiper-lazy-loaded',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n notificationClass: 'swiper-notification',\n preloaderClass: 'preloader',\n zoomContainerClass: 'swiper-zoom-container',\n \n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\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 // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onBeforeResize: function (swiper)\n onAfterResize: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n onKeyPress: function (swiper, keyCode)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push(s.params.containerModifierClass + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push(s.params.containerModifierClass + 'free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push(s.params.containerModifierClass + 'no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push(s.params.containerModifierClass + 'autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Max resistance when touchReleaseOnEdges\n if (s.params.touchReleaseOnEdges) {\n s.params.resistanceRatio = 0;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push(s.params.containerModifierClass + '3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push(s.params.containerModifierClass + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push(s.params.containerModifierClass + 'rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push(s.params.containerModifierClass + 'multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push(s.params.containerModifierClass + 'android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n if (s.params.allowSwipeToNext === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n if (s.params.grabCursor) s.unsetGrabCursor();\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n if (s.params.allowSwipeToNext === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n if (s.params.grabCursor) s.setGrabCursor();\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n s.setGrabCursor = function(moving) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n s.container[0].style.cursor = moving ? 'grabbing': 'grab';\n };\n s.unsetGrabCursor = function () {\n s.container[0].style.cursor = '';\n };\n if (s.params.grabCursor) {\n s.setGrabCursor();\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n var autoplayDelay = s.params.autoplay;\n var activeSlide = s.slides.eq(s.activeIndex);\n if (activeSlide.attr('data-swiper-autoplay')) {\n autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;\n }\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, autoplayDelay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n var activeSlides = [];\n var newHeight = 0;\n var i;\n \n // Find slides currently in view\n if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {\n var index = s.activeIndex + i;\n if(index > s.slides.length) break;\n activeSlides.push(s.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(s.slides.eq(s.activeIndex)[0]);\n }\n \n // Find new height from heighest slide in view\n for (i = 0; i < activeSlides.length; i++) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n \n // Update Height\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .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 }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css(\n 'margin-' + (s.isHorizontal() ? 'top' : 'left'),\n (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Dynamic Slides Per View\n ===========================*/\n s.currentSlidesPerView = function () {\n var spv = 1, i, j;\n if (s.params.centeredSlides) {\n var size = s.slides[s.activeIndex].swiperSlideSize;\n var breakLoop;\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slides[i] && !breakLoop) {\n size += s.slides[i].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n for (j = s.activeIndex - 1; j >= 0; j--) {\n if (s.slides[j] && !breakLoop) {\n size += s.slides[j].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n }\n else {\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {\n spv++;\n }\n }\n }\n return spv;\n };\n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n }\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n s.updateRealIndex();\n };\n s.updateRealIndex = function(){\n s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n nextSlide = s.slides.eq(0);\n nextSlide.addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n prevSlide = s.slides.eq(-1);\n prevSlide.addClass(s.params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n if (!s) return;\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n var newTranslate;\n function forceSetTranslate() {\n var translate = s.rtl ? -s.translate : s.translate;\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n if (s.params.onBeforeResize) s.params.onBeforeResize(s);\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n if (s.params.onAfterResize) s.params.onAfterResize(s);\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};\n if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};\n else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides,\n slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button, video',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {\n if (!s.isHorizontal()) {\n // Vertical\n if (\n (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||\n (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n else {\n if (\n (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||\n (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle;\n if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {\n isScrolling = false;\n }\n else {\n touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined') {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(true);\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n \n if (!s.params.followFinger) return;\n \n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(false);\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\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 if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n s.updateRealIndex();\n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0 || s.browser.lteIE9) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.history && s.history) {\n s.history.setHistory(s.params.history, s.activeIndex);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n s.disableTouchControl = function () {\n s.params.onlyExternal = true;\n return true;\n };\n s.enableTouchControl = function () {\n s.params.onlyExternal = false;\n return true;\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\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 (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\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 \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\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 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\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 \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n \n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');\n if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass(s.params.lazyStatusLoadingClass);\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset'),\n sizes = _img.attr('data-sizes');\n s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (sizes) {\n _img.attr('sizes', sizes);\n _img.removeAttr('data-sizes');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);\n slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n var slidesPerView = s.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n draggableEvents: (function () {\n if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;\n else return s.touchEvents;\n })(),\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(sb.draggableEvents.start, sb.dragStart);\n $(target).on(sb.draggableEvents.move, sb.dragMove);\n $(target).on(sb.draggableEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(sb.draggableEvents.start, sb.dragStart);\n $(target).off(sb.draggableEvents.move, sb.dragMove);\n $(target).off(sb.draggableEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n \n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // 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 var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\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 translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // 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 controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n \n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n onHashCange: function (e, a) {\n var newHash = document.location.hash.replace('#', '');\n var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash=\"' + (newHash) + '\"]').index());\n }\n },\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n $(window)[action]('hashchange', s.hashnav.onHashCange);\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n if (s.params.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));\n } else {\n var slide = s.slides.eq(s.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n }\n },\n init: function () {\n if (!s.params.hashnav || s.params.history) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n }\n if (s.params.hashnavWatchState) s.hashnav.attachEvents();\n },\n destroy: function () {\n if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);\n }\n };\n \n\n /*=========================\n History Api with fallback to Hashnav\n ===========================*/\n s.history = {\n init: function () {\n if (!s.params.history) return;\n if (!window.history || !window.history.pushState) {\n s.params.history = false;\n s.params.hashnav = true;\n return;\n }\n s.history.initialized = true;\n this.paths = this.getPathValues();\n if (!this.paths.key && !this.paths.value) return;\n this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);\n if (!s.params.replaceState) {\n window.addEventListener('popstate', this.setHistoryPopState);\n }\n },\n setHistoryPopState: function() {\n s.history.paths = s.history.getPathValues();\n s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);\n },\n getPathValues: function() {\n var pathArray = window.location.pathname.slice(1).split('/');\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function (key, index) {\n if (!s.history.initialized || !s.params.history) return;\n var slide = s.slides.eq(index);\n var value = this.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = key + '/' + value;\n }\n if (s.params.replaceState) {\n window.history.replaceState(null, null, value);\n } else {\n window.history.pushState(null, null, value);\n }\n },\n slugify: function(text) {\n return text.toString().toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w\\-]+/g, '')\n .replace(/\\-\\-+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function(speed, value, runCallbacks) {\n if (value) {\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHistory = this.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n s.slideTo(0, speed, runCallbacks);\n }\n }\n };\n \n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n s.emit('onKeyPress', s, kc);\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in document;\n \n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n \n if (!isSupported &&\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n \n return isSupported;\n }\n /**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\n function normalizeWheel( /*object*/ event ) /*object*/ {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n \n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n \n // Legacy\n if( 'detail' in event ) {\n sY = event.detail;\n }\n if( 'wheelDelta' in event ) {\n sY = -event.wheelDelta / 120;\n }\n if( 'wheelDeltaY' in event ) {\n sY = -event.wheelDeltaY / 120;\n }\n if( 'wheelDeltaX' in event ) {\n sX = -event.wheelDeltaX / 120;\n }\n \n // side scrolling on FF with DOMMouseScroll\n if( 'axis' in event && event.axis === event.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 event ) {\n pY = event.deltaY;\n }\n if( 'deltaX' in event ) {\n pX = event.deltaX;\n }\n \n if( (pX || pY) && event.deltaMode ) {\n if( event.deltaMode === 1 ) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n \n // Fall-back if spin cannot be determined\n if( pX && !sX ) {\n sX = (pX < 1) ? -1 : 1;\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 if (s.params.mousewheelControl) {\n /**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\n s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?\n 'DOMMouseScroll' :\n isEventSupported() ?\n 'wheel' : 'mousewheel';\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n var data = normalizeWheel( e );\n \n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n else return;\n }\n }\n else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;\n }\n \n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) {\n s.slideNext();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) {\n s.slidePrev();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n // Emit event\n s.emit('onScroll', s, e);\n \n // Stop autoplay\n if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.off(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = false;\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.on(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = true;\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Zoom\n ===========================*/\n s.zoom = {\n // \"Global\" Props\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n slide: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n image: undefined,\n imageWrap: undefined,\n zoomMax: s.params.zoomMax\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 // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function (e) {\n if (e.targetTouches.length < 2) return 1;\n var x1 = e.targetTouches[0].pageX,\n y1 = e.targetTouches[0].pageY,\n x2 = e.targetTouches[1].pageX,\n 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 (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleStart = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.slide || !z.gesture.slide.length) {\n z.gesture.slide = $(this);\n if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;\n if (z.gesture.imageWrap.length === 0) {\n z.gesture.image = undefined;\n return;\n }\n }\n z.gesture.image.transition(0);\n z.isScaling = true;\n },\n onGestureChange: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleMove = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (s.support.gestures) {\n z.scale = e.scale * z.currentScale;\n }\n else {\n z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;\n }\n if (z.scale > z.gesture.zoomMax) {\n z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);\n }\n if (z.scale < s.params.zoomMin) {\n z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);\n }\n z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');\n },\n onGestureEnd: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {\n return;\n }\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);\n z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n z.currentScale = z.scale;\n z.isScaling = false;\n if (z.scale === 1) z.gesture.slide = undefined;\n },\n onTouchStart: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (z.image.isTouched) return;\n if (s.device.os === 'android') e.preventDefault();\n z.image.isTouched = true;\n z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function (e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n s.allowClick = false;\n if (!z.image.isTouched || !z.gesture.slide) return;\n \n if (!z.image.isMoved) {\n z.image.width = z.gesture.image[0].offsetWidth;\n z.image.height = z.gesture.image[0].offsetHeight;\n z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;\n z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;\n z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;\n z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;\n z.gesture.imageWrap.transition(0);\n if (s.rtl) z.image.startX = -z.image.startX;\n if (s.rtl) z.image.startY = -z.image.startY;\n }\n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n \n if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;\n \n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n \n z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (!z.image.isMoved && !z.isScaling) {\n if (s.isHorizontal() &&\n (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||\n (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)\n ) {\n z.image.isTouched = false;\n return;\n }\n else if (!s.isHorizontal() &&\n (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||\n (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)\n ) {\n z.image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n \n z.image.isMoved = true;\n z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;\n z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;\n \n if (z.image.currentX < z.image.minX) {\n z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);\n }\n if (z.image.currentX > z.image.maxX) {\n z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);\n }\n \n if (z.image.currentY < z.image.minY) {\n z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);\n }\n if (z.image.currentY > z.image.maxY) {\n z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);\n }\n \n //Velocity\n if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;\n if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;\n if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();\n z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;\n z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;\n if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;\n if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;\n z.velocity.prevPositionX = z.image.touchesCurrent.x;\n z.velocity.prevPositionY = z.image.touchesCurrent.y;\n z.velocity.prevTime = Date.now();\n \n z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTouchEnd: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (!z.image.isTouched || !z.image.isMoved) {\n z.image.isTouched = false;\n z.image.isMoved = false;\n return;\n }\n z.image.isTouched = false;\n z.image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = z.velocity.x * momentumDurationX;\n var newPositionX = z.image.currentX + momentumDistanceX;\n var momentumDistanceY = z.velocity.y * momentumDurationY;\n var newPositionY = z.image.currentY + momentumDistanceY;\n \n //Fix duration\n if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);\n if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n \n z.image.currentX = newPositionX;\n z.image.currentY = newPositionY;\n \n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);\n z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);\n \n z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTransitionEnd: function (s) {\n var z = s.zoom;\n if (z.gesture.slide && s.previousIndex !== s.activeIndex) {\n z.gesture.image.transform('translate3d(0,0,0) scale(1)');\n z.gesture.imageWrap.transform('translate3d(0,0,0)');\n z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;\n z.scale = z.currentScale = 1;\n }\n },\n // Toggle Zoom\n toggleZoom: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.slide) {\n z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n \n var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;\n \n if (typeof z.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 }\n else {\n touchX = z.image.touchesStart.x;\n touchY = z.image.touchesStart.y;\n }\n \n if (z.scale && z.scale !== 1) {\n // Zoom Out\n z.scale = z.currentScale = 1;\n z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');\n z.gesture.slide = undefined;\n }\n else {\n // Zoom In\n z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;\n if (e) {\n slideWidth = z.gesture.slide[0].offsetWidth;\n slideHeight = z.gesture.slide[0].offsetHeight;\n offsetX = z.gesture.slide.offset().left;\n offsetY = z.gesture.slide.offset().top;\n diffX = offsetX + slideWidth/2 - touchX;\n diffY = offsetY + slideHeight/2 - touchY;\n \n imageWidth = z.gesture.image[0].offsetWidth;\n imageHeight = z.gesture.image[0].offsetHeight;\n scaledWidth = imageWidth * z.scale;\n scaledHeight = imageHeight * z.scale;\n \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 \n translateX = diffX * z.scale;\n translateY = diffY * z.scale;\n \n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n \n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n }\n else {\n translateX = 0;\n translateY = 0;\n }\n z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n }\n },\n // Attach/Detach Events\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n \n if (s.params.zoom) {\n var target = s.slides;\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n // Scale image\n if (s.support.gestures) {\n s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);\n s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);\n s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);\n }\n else if (s.touchEvents.start === 'touchstart') {\n s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);\n s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);\n s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);\n }\n \n // Move image\n s[action]('touchStart', s.zoom.onTouchStart);\n s.slides.each(function (index, slide){\n if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {\n $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);\n }\n });\n s[action]('touchEnd', s.zoom.onTouchEnd);\n \n // Scale Out\n s[action]('transitionEnd', s.zoom.onTransitionEnd);\n if (s.params.zoomToggle) {\n s.on('doubleTap', s.zoom.toggleZoom);\n }\n }\n },\n init: function () {\n s.zoom.attachEvents();\n },\n destroy: function () {\n s.zoom.attachEvents(true);\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n \n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n \n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.zoom && s.zoom) {\n s.zoom.init();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history\n if (s.params.hashnavReplaceState) {\n s.params.replaceState = s.params.hashnavReplaceState;\n }\n if (s.params.history) {\n if (s.history) s.history.init();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n \n // Destroy zoom\n if (s.params.zoom && s.zoom) {\n s.zoom.destroy();\n }\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Delete history popstate\n if (s.params.history && !s.params.replaceState) {\n window.removeEventListener('popstate', s.history.setHistoryPopState);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.destroy();\n }\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),\n lteIE9: (function() {\n // create temporary DIV\n var div = document.createElement('div');\n // add content to tmp DIV which is wrapped into the IE HTML conditional statement\n div.innerHTML = '';\n // return true / false value based on what will browser render\n return div.getElementsByTagName('i').length === 1;\n })()\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = window.navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\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 return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })(),\n \n passiveListener: (function () {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {}\n return supportsPassive;\n })(),\n \n gestures: (function () {\n return 'ongesturestart' in window;\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Dom7 Library\n ===========================*/\n var Dom7 = (function () {\n var Dom7 = function (arr) {\n var _this = this, i = 0;\n // Create array-like object\n for (i = 0; i < arr.length; i++) {\n _this[i] = arr[i];\n }\n _this.length = arr.length;\n // Return collection with methods\n return this;\n };\n var $ = function (selector, context) {\n var arr = [], i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els, tempParent, html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.split('#')[1])];\n }\n else {\n // Other selectors\n els = (context || document).querySelectorAll(selector);\n }\n for (i = 0; i < els.length; i++) {\n if (els[i]) arr.push(els[i]);\n }\n }\n }\n // Node/element\n else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n }\n //Array of elements or instance of Dom\n else if (selector.length > 0 && selector[0].nodeType) {\n for (i = 0; i < selector.length; i++) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n };\n Dom7.prototype = {\n // Classes and attriutes\n addClass: function (className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.add(classes[i]);\n }\n }\n return this;\n },\n removeClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.remove(classes[i]);\n }\n }\n return this;\n },\n hasClass: function (className) {\n if (!this[0]) return false;\n else return this[0].classList.contains(className);\n },\n toggleClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n },\n attr: function (attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n else return undefined;\n }\n else {\n // Set attrs\n for (var i = 0; i < this.length; i++) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n }\n else {\n // Object\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n }\n },\n removeAttr: function (attr) {\n for (var i = 0; i < this.length; i++) {\n this[i].removeAttribute(attr);\n }\n return this;\n },\n data: function (key, value) {\n if (typeof value === 'undefined') {\n // Get value\n if (this[0]) {\n var dataKey = this[0].getAttribute('data-' + key);\n if (dataKey) return dataKey;\n else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];\n else return undefined;\n }\n else return undefined;\n }\n else {\n // Set value\n for (var i = 0; i < this.length; i++) {\n var el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n },\n // Transforms\n transform : function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n },\n transition: function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n },\n //Events\n on: function (eventName, targetSelector, listener, capture) {\n function handleLiveEvent(e) {\n var target = e.target;\n if ($(target).is(targetSelector)) listener.call(target, e);\n else {\n var parents = $(target).parents();\n for (var k = 0; k < parents.length; k++) {\n if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);\n }\n }\n }\n var events = eventName.split(' ');\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n for (j = 0; j < events.length; j++) {\n this[i].addEventListener(events[j], listener, capture);\n }\n }\n else {\n //Live events\n for (j = 0; j < events.length; j++) {\n if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];\n this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});\n this[i].addEventListener(events[j], handleLiveEvent, capture);\n }\n }\n }\n \n return this;\n },\n off: function (eventName, targetSelector, listener, capture) {\n var events = eventName.split(' ');\n for (var i = 0; i < events.length; i++) {\n for (var j = 0; j < this.length; j++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n this[j].removeEventListener(events[i], listener, capture);\n }\n else {\n // Live event\n if (this[j].dom7LiveListeners) {\n for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {\n if (this[j].dom7LiveListeners[k].listener === listener) {\n this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);\n }\n }\n }\n }\n }\n }\n return this;\n },\n once: function (eventName, targetSelector, listener, capture) {\n var dom = this;\n if (typeof targetSelector === 'function') {\n targetSelector = false;\n listener = arguments[1];\n capture = arguments[2];\n }\n function proxy(e) {\n listener(e);\n dom.off(eventName, targetSelector, proxy, capture);\n }\n dom.on(eventName, targetSelector, proxy, capture);\n },\n trigger: function (eventName, eventData) {\n for (var i = 0; i < this.length; i++) {\n var evt;\n try {\n evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});\n }\n catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(eventName, true, true);\n evt.detail = eventData;\n }\n this[i].dispatchEvent(evt);\n }\n return this;\n },\n transitionEnd: function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n // Sizing/Styles\n width: function () {\n if (this[0] === window) {\n return window.innerWidth;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n else {\n return null;\n }\n }\n },\n outerWidth: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n },\n height: function () {\n if (this[0] === window) {\n return window.innerHeight;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n else {\n return null;\n }\n }\n },\n outerHeight: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));\n else\n return this[0].offsetHeight;\n }\n else return null;\n },\n offset: function () {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = window.pageYOffset || el.scrollTop;\n var scrollLeft = window.pageXOffset || el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n else {\n return null;\n }\n },\n css: function (props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n }\n else {\n for (i = 0; i < this.length; i++) {\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i++) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n },\n \n //Dom manipulation\n each: function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback.call(this[i], i, this[i]);\n }\n return this;\n },\n html: function (html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].innerHTML = html;\n }\n return this;\n }\n },\n text: function (text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n else return null;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].textContent = text;\n }\n return this;\n }\n },\n is: function (selector) {\n if (!this[0]) return false;\n var compareWith, i;\n if (typeof selector === 'string') {\n var el = this[0];\n if (el === document) return selector === document;\n if (el === window) return selector === window;\n \n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n else {\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n }\n else if (selector === document) return this[0] === document;\n else if (selector === window) return this[0] === window;\n else {\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n return false;\n }\n \n },\n index: function () {\n if (this[0]) {\n var child = this[0];\n var i = 0;\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i++;\n }\n return i;\n }\n else return undefined;\n },\n eq: function (index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n else return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n },\n append: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].appendChild(newChild[j]);\n }\n }\n else {\n this[i].appendChild(newChild);\n }\n }\n return this;\n },\n prepend: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n // this[i].insertAdjacentHTML('afterbegin', newChild);\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n }\n else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n },\n insertBefore: function (selector) {\n var before = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n }\n else if (before.length > 1) {\n for (var j = 0; j < before.length; j++) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n },\n insertAfter: function (selector) {\n var after = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n }\n else if (after.length > 1) {\n for (var j = 0; j < after.length; j++) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n },\n next: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n nextAll: function (selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n var next = el.nextElementSibling;\n if (selector) {\n if($(next).is(selector)) nextEls.push(next);\n }\n else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n },\n prev: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n prevAll: function (selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling;\n if (selector) {\n if($(prev).is(selector)) prevEls.push(prev);\n }\n else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n },\n parent: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n }\n else {\n parents.push(this[i].parentNode);\n }\n }\n return $($.unique(parents));\n },\n parents: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n var parent = this[i].parentNode;\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n }\n else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $($.unique(parents));\n },\n find : function (selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i++) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j++) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n },\n children: function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var childNodes = this[i].childNodes;\n \n for (var j = 0; j < childNodes.length; j++) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n }\n else {\n if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);\n }\n }\n }\n return new Dom7($.unique(children));\n },\n remove: function () {\n for (var i = 0; i < this.length; i++) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n },\n add: function () {\n var dom = this;\n var i, j;\n for (i = 0; i < arguments.length; i++) {\n var toAdd = $(arguments[i]);\n for (j = 0; j < toAdd.length; j++) {\n dom[dom.length] = toAdd[j];\n dom.length++;\n }\n }\n return dom;\n }\n };\n $.fn = Dom7.prototype;\n $.unique = function (arr) {\n var unique = [];\n for (var i = 0; i < arr.length; i++) {\n if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);\n }\n return unique;\n };\n \n return $;\n })();\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n \n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n if (!('outerWidth' in domLib.fn)) {\n domLib.fn.outerWidth = function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n };\n }\n }\n \n\n window.Swiper = Swiper;\n})();\n\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n\n//# sourceMappingURL=maps/swiper.js.map\n"]} \ No newline at end of file diff --git a/dist/js/swiper.jquery.js b/dist/js/swiper.jquery.js deleted file mode 100644 index 2628ed8d0..000000000 --- a/dist/js/swiper.jquery.js +++ /dev/null @@ -1,4688 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -(function () { - 'use strict'; - var $; - - /*=========================== - Swiper - ===========================*/ - var Swiper = function (container, params) { - if (!(this instanceof Swiper)) return new Swiper(container, params); - - - var defaults = { - direction: 'horizontal', - touchEventsTarget: 'container', - initialSlide: 0, - speed: 300, - // autoplay - autoplay: false, - autoplayDisableOnInteraction: true, - autoplayStopOnLast: false, - // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView). - iOSEdgeSwipeDetection: false, - iOSEdgeSwipeThreshold: 20, - // Free mode - freeMode: false, - freeModeMomentum: true, - freeModeMomentumRatio: 1, - freeModeMomentumBounce: true, - freeModeMomentumBounceRatio: 1, - freeModeMomentumVelocityRatio: 1, - freeModeSticky: false, - freeModeMinimumVelocity: 0.02, - // Autoheight - autoHeight: false, - // Set wrapper width - setWrapperSize: false, - // Virtual Translate - virtualTranslate: false, - // Effects - effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' - coverflow: { - rotate: 50, - stretch: 0, - depth: 100, - modifier: 1, - slideShadows : true - }, - flip: { - slideShadows : true, - limitRotation: true - }, - cube: { - slideShadows: true, - shadow: true, - shadowOffset: 20, - shadowScale: 0.94 - }, - fade: { - crossFade: false - }, - // Parallax - parallax: false, - // Zoom - zoom: false, - zoomMax: 3, - zoomMin: 1, - zoomToggle: true, - // Scrollbar - scrollbar: null, - scrollbarHide: true, - scrollbarDraggable: false, - scrollbarSnapOnRelease: false, - // Keyboard Mousewheel - keyboardControl: false, - mousewheelControl: false, - mousewheelReleaseOnEdges: false, - mousewheelInvert: false, - mousewheelForceToAxis: false, - mousewheelSensitivity: 1, - mousewheelEventsTarged: 'container', - // Hash Navigation - hashnav: false, - hashnavWatchState: false, - // History - history: false, - // Commong Nav State - replaceState: false, - // Breakpoints - breakpoints: undefined, - // Slides grid - spaceBetween: 0, - slidesPerView: 1, - slidesPerColumn: 1, - slidesPerColumnFill: 'column', - slidesPerGroup: 1, - centeredSlides: false, - slidesOffsetBefore: 0, // in px - slidesOffsetAfter: 0, // in px - // Round length - roundLengths: false, - // Touches - touchRatio: 1, - touchAngle: 45, - simulateTouch: true, - shortSwipes: true, - longSwipes: true, - longSwipesRatio: 0.5, - longSwipesMs: 300, - followFinger: true, - onlyExternal: false, - threshold: 0, - touchMoveStopPropagation: true, - touchReleaseOnEdges: false, - // Unique Navigation Elements - uniqueNavElements: true, - // Pagination - pagination: null, - paginationElement: 'span', - paginationClickable: false, - paginationHide: false, - paginationBulletRender: null, - paginationProgressRender: null, - paginationFractionRender: null, - paginationCustomRender: null, - paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom' - // Resistance - resistance: true, - resistanceRatio: 0.85, - // Next/prev buttons - nextButton: null, - prevButton: null, - // Progress - watchSlidesProgress: false, - watchSlidesVisibility: false, - // Cursor - grabCursor: false, - // Clicks - preventClicks: true, - preventClicksPropagation: true, - slideToClickedSlide: false, - // Lazy Loading - lazyLoading: false, - lazyLoadingInPrevNext: false, - lazyLoadingInPrevNextAmount: 1, - lazyLoadingOnTransitionStart: false, - // Images - preloadImages: true, - updateOnImagesReady: true, - // loop - loop: false, - loopAdditionalSlides: 0, - loopedSlides: null, - // Control - control: undefined, - controlInverse: false, - controlBy: 'slide', //or 'container' - normalizeSlideIndex: true, - // Swiping/no swiping - allowSwipeToPrev: true, - allowSwipeToNext: true, - swipeHandler: null, //'.swipe-handler', - noSwiping: true, - noSwipingClass: 'swiper-no-swiping', - // Passive Listeners - passiveListeners: true, - // NS - containerModifierClass: 'swiper-container-', // NEW - slideClass: 'swiper-slide', - slideActiveClass: 'swiper-slide-active', - slideDuplicateActiveClass: 'swiper-slide-duplicate-active', - slideVisibleClass: 'swiper-slide-visible', - slideDuplicateClass: 'swiper-slide-duplicate', - slideNextClass: 'swiper-slide-next', - slideDuplicateNextClass: 'swiper-slide-duplicate-next', - slidePrevClass: 'swiper-slide-prev', - slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', - wrapperClass: 'swiper-wrapper', - bulletClass: 'swiper-pagination-bullet', - bulletActiveClass: 'swiper-pagination-bullet-active', - buttonDisabledClass: 'swiper-button-disabled', - paginationCurrentClass: 'swiper-pagination-current', - paginationTotalClass: 'swiper-pagination-total', - paginationHiddenClass: 'swiper-pagination-hidden', - paginationProgressbarClass: 'swiper-pagination-progressbar', - paginationClickableClass: 'swiper-pagination-clickable', // NEW - paginationModifierClass: 'swiper-pagination-', // NEW - lazyLoadingClass: 'swiper-lazy', - lazyStatusLoadingClass: 'swiper-lazy-loading', - lazyStatusLoadedClass: 'swiper-lazy-loaded', - lazyPreloaderClass: 'swiper-lazy-preloader', - notificationClass: 'swiper-notification', - preloaderClass: 'preloader', - zoomContainerClass: 'swiper-zoom-container', - - // Observer - observer: false, - observeParents: false, - // Accessibility - a11y: false, - prevSlideMessage: 'Previous slide', - nextSlideMessage: 'Next slide', - firstSlideMessage: 'This is the first slide', - lastSlideMessage: 'This is the last slide', - paginationBulletMessage: 'Go to slide {{index}}', - // Callbacks - runCallbacksOnInit: true - /* - Callbacks: - onInit: function (swiper) - onDestroy: function (swiper) - onBeforeResize: function (swiper) - onAfterResize: function (swiper) - onClick: function (swiper, e) - onTap: function (swiper, e) - onDoubleTap: function (swiper, e) - onSliderMove: function (swiper, e) - onSlideChangeStart: function (swiper) - onSlideChangeEnd: function (swiper) - onTransitionStart: function (swiper) - onTransitionEnd: function (swiper) - onImagesReady: function (swiper) - onProgress: function (swiper, progress) - onTouchStart: function (swiper, e) - onTouchMove: function (swiper, e) - onTouchMoveOpposite: function (swiper, e) - onTouchEnd: function (swiper, e) - onReachBeginning: function (swiper) - onReachEnd: function (swiper) - onSetTransition: function (swiper, duration) - onSetTranslate: function (swiper, translate) - onAutoplayStart: function (swiper) - onAutoplayStop: function (swiper), - onLazyImageLoad: function (swiper, slide, image) - onLazyImageReady: function (swiper, slide, image) - onKeyPress: function (swiper, keyCode) - */ - - }; - var initialVirtualTranslate = params && params.virtualTranslate; - - params = params || {}; - var originalParams = {}; - for (var param in params) { - if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) { - originalParams[param] = {}; - for (var deepParam in params[param]) { - originalParams[param][deepParam] = params[param][deepParam]; - } - } - else { - originalParams[param] = params[param]; - } - } - for (var def in defaults) { - if (typeof params[def] === 'undefined') { - params[def] = defaults[def]; - } - else if (typeof params[def] === 'object') { - for (var deepDef in defaults[def]) { - if (typeof params[def][deepDef] === 'undefined') { - params[def][deepDef] = defaults[def][deepDef]; - } - } - } - } - - // Swiper - var s = this; - - // Params - s.params = params; - s.originalParams = originalParams; - - // Classname - s.classNames = []; - /*========================= - Dom Library and plugins - ===========================*/ - if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){ - $ = Dom7; - } - if (typeof $ === 'undefined') { - if (typeof Dom7 === 'undefined') { - $ = window.Dom7 || window.Zepto || window.jQuery; - } - else { - $ = Dom7; - } - if (!$) return; - } - // Export it to Swiper instance - s.$ = $; - - /*========================= - Breakpoints - ===========================*/ - s.currentBreakpoint = undefined; - s.getActiveBreakpoint = function () { - //Get breakpoint for window width - if (!s.params.breakpoints) return false; - var breakpoint = false; - var points = [], point; - for ( point in s.params.breakpoints ) { - if (s.params.breakpoints.hasOwnProperty(point)) { - points.push(point); - } - } - points.sort(function (a, b) { - return parseInt(a, 10) > parseInt(b, 10); - }); - for (var i = 0; i < points.length; i++) { - point = points[i]; - if (point >= window.innerWidth && !breakpoint) { - breakpoint = point; - } - } - return breakpoint || 'max'; - }; - s.setBreakpoint = function () { - //Set breakpoint for window width and update parameters - var breakpoint = s.getActiveBreakpoint(); - if (breakpoint && s.currentBreakpoint !== breakpoint) { - var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; - var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); - for ( var param in breakPointsParams ) { - s.params[param] = breakPointsParams[param]; - } - s.currentBreakpoint = breakpoint; - if(needsReLoop && s.destroyLoop) { - s.reLoop(true); - } - } - }; - // Set breakpoint on load - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - /*========================= - Preparation - Define Container, Wrapper and Pagination - ===========================*/ - s.container = $(container); - if (s.container.length === 0) return; - if (s.container.length > 1) { - var swipers = []; - s.container.each(function () { - var container = this; - swipers.push(new Swiper(this, params)); - }); - return swipers; - } - - // Save instance in container HTML Element and in data - s.container[0].swiper = s; - s.container.data('swiper', s); - - s.classNames.push(s.params.containerModifierClass + s.params.direction); - - if (s.params.freeMode) { - s.classNames.push(s.params.containerModifierClass + 'free-mode'); - } - if (!s.support.flexbox) { - s.classNames.push(s.params.containerModifierClass + 'no-flexbox'); - s.params.slidesPerColumn = 1; - } - if (s.params.autoHeight) { - s.classNames.push(s.params.containerModifierClass + 'autoheight'); - } - // Enable slides progress when required - if (s.params.parallax || s.params.watchSlidesVisibility) { - s.params.watchSlidesProgress = true; - } - // Max resistance when touchReleaseOnEdges - if (s.params.touchReleaseOnEdges) { - s.params.resistanceRatio = 0; - } - // Coverflow / 3D - if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { - if (s.support.transforms3d) { - s.params.watchSlidesProgress = true; - s.classNames.push(s.params.containerModifierClass + '3d'); - } - else { - s.params.effect = 'slide'; - } - } - if (s.params.effect !== 'slide') { - s.classNames.push(s.params.containerModifierClass + s.params.effect); - } - if (s.params.effect === 'cube') { - s.params.resistanceRatio = 0; - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.centeredSlides = false; - s.params.spaceBetween = 0; - s.params.virtualTranslate = true; - } - if (s.params.effect === 'fade' || s.params.effect === 'flip') { - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.watchSlidesProgress = true; - s.params.spaceBetween = 0; - if (typeof initialVirtualTranslate === 'undefined') { - s.params.virtualTranslate = true; - } - } - - // Grab Cursor - if (s.params.grabCursor && s.support.touch) { - s.params.grabCursor = false; - } - - // Wrapper - s.wrapper = s.container.children('.' + s.params.wrapperClass); - - // Pagination - if (s.params.pagination) { - s.paginationContainer = $(s.params.pagination); - if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { - s.paginationContainer = s.container.find(s.params.pagination); - } - - if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { - s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable'); - } - else { - s.params.paginationClickable = false; - } - s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType); - } - // Next/Prev Buttons - if (s.params.nextButton || s.params.prevButton) { - if (s.params.nextButton) { - s.nextButton = $(s.params.nextButton); - if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { - s.nextButton = s.container.find(s.params.nextButton); - } - } - if (s.params.prevButton) { - s.prevButton = $(s.params.prevButton); - if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { - s.prevButton = s.container.find(s.params.prevButton); - } - } - } - - // Is Horizontal - s.isHorizontal = function () { - return s.params.direction === 'horizontal'; - }; - // s.isH = isH; - - // RTL - s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); - if (s.rtl) { - s.classNames.push(s.params.containerModifierClass + 'rtl'); - } - - // Wrong RTL support - if (s.rtl) { - s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; - } - - // Columns - if (s.params.slidesPerColumn > 1) { - s.classNames.push(s.params.containerModifierClass + 'multirow'); - } - - // Check for Android - if (s.device.android) { - s.classNames.push(s.params.containerModifierClass + 'android'); - } - - // Add classes - s.container.addClass(s.classNames.join(' ')); - - // Translate - s.translate = 0; - - // Progress - s.progress = 0; - - // Velocity - s.velocity = 0; - - /*========================= - Locks, unlocks - ===========================*/ - s.lockSwipeToNext = function () { - s.params.allowSwipeToNext = false; - if (s.params.allowSwipeToPrev === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipeToPrev = function () { - s.params.allowSwipeToPrev = false; - if (s.params.allowSwipeToNext === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; - if (s.params.grabCursor) s.unsetGrabCursor(); - }; - s.unlockSwipeToNext = function () { - s.params.allowSwipeToNext = true; - if (s.params.allowSwipeToPrev === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipeToPrev = function () { - s.params.allowSwipeToPrev = true; - if (s.params.allowSwipeToNext === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; - if (s.params.grabCursor) s.setGrabCursor(); - }; - - /*========================= - Round helper - ===========================*/ - function round(a) { - return Math.floor(a); - } - /*========================= - Set grab cursor - ===========================*/ - s.setGrabCursor = function(moving) { - s.container[0].style.cursor = 'move'; - s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; - s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; - s.container[0].style.cursor = moving ? 'grabbing': 'grab'; - }; - s.unsetGrabCursor = function () { - s.container[0].style.cursor = ''; - }; - if (s.params.grabCursor) { - s.setGrabCursor(); - } - /*========================= - Update on Images Ready - ===========================*/ - s.imagesToLoad = []; - s.imagesLoaded = 0; - - s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) { - var image; - function onReady () { - if (callback) callback(); - } - if (!imgElement.complete || !checkForComplete) { - if (src) { - image = new window.Image(); - image.onload = onReady; - image.onerror = onReady; - if (sizes) { - image.sizes = sizes; - } - if (srcset) { - image.srcset = srcset; - } - if (src) { - image.src = src; - } - } else { - onReady(); - } - - } else {//image already loaded... - onReady(); - } - }; - s.preloadImages = function () { - s.imagesToLoad = s.container.find('img'); - function _onReady() { - if (typeof s === 'undefined' || s === null || !s) return; - if (s.imagesLoaded !== undefined) s.imagesLoaded++; - if (s.imagesLoaded === s.imagesToLoad.length) { - if (s.params.updateOnImagesReady) s.update(); - s.emit('onImagesReady', s); - } - } - for (var i = 0; i < s.imagesToLoad.length; i++) { - s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady); - } - }; - - /*========================= - Autoplay - ===========================*/ - s.autoplayTimeoutId = undefined; - s.autoplaying = false; - s.autoplayPaused = false; - function autoplay() { - var autoplayDelay = s.params.autoplay; - var activeSlide = s.slides.eq(s.activeIndex); - if (activeSlide.attr('data-swiper-autoplay')) { - autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay; - } - s.autoplayTimeoutId = setTimeout(function () { - if (s.params.loop) { - s.fixLoop(); - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!s.isEnd) { - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!params.autoplayStopOnLast) { - s._slideTo(0); - s.emit('onAutoplay', s); - } - else { - s.stopAutoplay(); - } - } - } - }, autoplayDelay); - } - s.startAutoplay = function () { - if (typeof s.autoplayTimeoutId !== 'undefined') return false; - if (!s.params.autoplay) return false; - if (s.autoplaying) return false; - s.autoplaying = true; - s.emit('onAutoplayStart', s); - autoplay(); - }; - s.stopAutoplay = function (internal) { - if (!s.autoplayTimeoutId) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplaying = false; - s.autoplayTimeoutId = undefined; - s.emit('onAutoplayStop', s); - }; - s.pauseAutoplay = function (speed) { - if (s.autoplayPaused) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplayPaused = true; - if (speed === 0) { - s.autoplayPaused = false; - autoplay(); - } - else { - s.wrapper.transitionEnd(function () { - if (!s) return; - s.autoplayPaused = false; - if (!s.autoplaying) { - s.stopAutoplay(); - } - else { - autoplay(); - } - }); - } - }; - /*========================= - Min/Max Translate - ===========================*/ - s.minTranslate = function () { - return (-s.snapGrid[0]); - }; - s.maxTranslate = function () { - return (-s.snapGrid[s.snapGrid.length - 1]); - }; - /*========================= - Slider/slides sizes - ===========================*/ - s.updateAutoHeight = function () { - var activeSlides = []; - var newHeight = 0; - var i; - - // Find slides currently in view - if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) { - for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) { - var index = s.activeIndex + i; - if(index > s.slides.length) break; - activeSlides.push(s.slides.eq(index)[0]); - } - } else { - activeSlides.push(s.slides.eq(s.activeIndex)[0]); - } - - // Find new height from heighest slide in view - for (i = 0; i < activeSlides.length; i++) { - if (typeof activeSlides[i] !== 'undefined') { - var height = activeSlides[i].offsetHeight; - newHeight = height > newHeight ? height : newHeight; - } - } - - // Update Height - if (newHeight) s.wrapper.css('height', newHeight + 'px'); - }; - s.updateContainerSize = function () { - var width, height; - if (typeof s.params.width !== 'undefined') { - width = s.params.width; - } - else { - width = s.container[0].clientWidth; - } - if (typeof s.params.height !== 'undefined') { - height = s.params.height; - } - else { - height = s.container[0].clientHeight; - } - if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { - return; - } - - //Subtract paddings - width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); - height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); - - // Store values - s.width = width; - s.height = height; - s.size = s.isHorizontal() ? s.width : s.height; - }; - - s.updateSlidesSize = function () { - s.slides = s.wrapper.children('.' + s.params.slideClass); - s.snapGrid = []; - s.slidesGrid = []; - s.slidesSizesGrid = []; - - var spaceBetween = s.params.spaceBetween, - slidePosition = -s.params.slidesOffsetBefore, - i, - prevSlideSize = 0, - index = 0; - if (typeof s.size === 'undefined') return; - if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { - spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; - } - - s.virtualSize = -spaceBetween; - // reset margins - if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); - else s.slides.css({marginRight: '', marginBottom: ''}); - - var slidesNumberEvenToRows; - if (s.params.slidesPerColumn > 1) { - if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { - slidesNumberEvenToRows = s.slides.length; - } - else { - slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; - } - if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { - slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); - } - } - - // Calc slides - var slideSize; - var slidesPerColumn = s.params.slidesPerColumn; - var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; - var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); - for (i = 0; i < s.slides.length; i++) { - slideSize = 0; - var slide = s.slides.eq(i); - if (s.params.slidesPerColumn > 1) { - // Set slides order - var newSlideOrderIndex; - var column, row; - if (s.params.slidesPerColumnFill === 'column') { - column = Math.floor(i / slidesPerColumn); - row = i - column * slidesPerColumn; - if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { - if (++row >= slidesPerColumn) { - row = 0; - column++; - } - } - newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; - slide - .css({ - '-webkit-box-ordinal-group': newSlideOrderIndex, - '-moz-box-ordinal-group': newSlideOrderIndex, - '-ms-flex-order': newSlideOrderIndex, - '-webkit-order': newSlideOrderIndex, - 'order': newSlideOrderIndex - }); - } - else { - row = Math.floor(i / slidesPerRow); - column = i - row * slidesPerRow; - } - slide - .css( - 'margin-' + (s.isHorizontal() ? 'top' : 'left'), - (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') - ) - .attr('data-swiper-column', column) - .attr('data-swiper-row', row); - - } - if (slide.css('display') === 'none') continue; - if (s.params.slidesPerView === 'auto') { - slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); - if (s.params.roundLengths) slideSize = round(slideSize); - } - else { - slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; - if (s.params.roundLengths) slideSize = round(slideSize); - - if (s.isHorizontal()) { - s.slides[i].style.width = slideSize + 'px'; - } - else { - s.slides[i].style.height = slideSize + 'px'; - } - } - s.slides[i].swiperSlideSize = slideSize; - s.slidesSizesGrid.push(slideSize); - - - if (s.params.centeredSlides) { - slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; - if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - } - else { - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - slidePosition = slidePosition + slideSize + spaceBetween; - } - - s.virtualSize += slideSize + spaceBetween; - - prevSlideSize = slideSize; - - index ++; - } - s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; - var newSlidesGrid; - - if ( - s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { - s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - } - if (!s.support.flexbox || s.params.setWrapperSize) { - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - } - - if (s.params.slidesPerColumn > 1) { - s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; - s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - if (s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); - } - s.snapGrid = newSlidesGrid; - } - } - - // Remove last grid elements depending on width - if (!s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] <= s.virtualSize - s.size) { - newSlidesGrid.push(s.snapGrid[i]); - } - } - s.snapGrid = newSlidesGrid; - if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { - s.snapGrid.push(s.virtualSize - s.size); - } - } - if (s.snapGrid.length === 0) s.snapGrid = [0]; - - if (s.params.spaceBetween !== 0) { - if (s.isHorizontal()) { - if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); - else s.slides.css({marginRight: spaceBetween + 'px'}); - } - else s.slides.css({marginBottom: spaceBetween + 'px'}); - } - if (s.params.watchSlidesProgress) { - s.updateSlidesOffset(); - } - }; - s.updateSlidesOffset = function () { - for (var i = 0; i < s.slides.length; i++) { - s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; - } - }; - - /*========================= - Dynamic Slides Per View - ===========================*/ - s.currentSlidesPerView = function () { - var spv = 1, i, j; - if (s.params.centeredSlides) { - var size = s.slides[s.activeIndex].swiperSlideSize; - var breakLoop; - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slides[i] && !breakLoop) { - size += s.slides[i].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - for (j = s.activeIndex - 1; j >= 0; j--) { - if (s.slides[j] && !breakLoop) { - size += s.slides[j].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - } - else { - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) { - spv++; - } - } - } - return spv; - }; - /*========================= - Slider/slides progress - ===========================*/ - s.updateSlidesProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - if (s.slides.length === 0) return; - if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); - - var offsetCenter = -translate; - if (s.rtl) offsetCenter = translate; - - // Visible Slides - s.slides.removeClass(s.params.slideVisibleClass); - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides[i]; - var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); - if (s.params.watchSlidesVisibility) { - var slideBefore = -(offsetCenter - slide.swiperSlideOffset); - var slideAfter = slideBefore + s.slidesSizesGrid[i]; - var isVisible = - (slideBefore >= 0 && slideBefore < s.size) || - (slideAfter > 0 && slideAfter <= s.size) || - (slideBefore <= 0 && slideAfter >= s.size); - if (isVisible) { - s.slides.eq(i).addClass(s.params.slideVisibleClass); - } - } - slide.progress = s.rtl ? -slideProgress : slideProgress; - } - }; - s.updateProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - var translatesDiff = s.maxTranslate() - s.minTranslate(); - var wasBeginning = s.isBeginning; - var wasEnd = s.isEnd; - if (translatesDiff === 0) { - s.progress = 0; - s.isBeginning = s.isEnd = true; - } - else { - s.progress = (translate - s.minTranslate()) / (translatesDiff); - s.isBeginning = s.progress <= 0; - s.isEnd = s.progress >= 1; - } - if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); - if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); - - if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); - s.emit('onProgress', s, s.progress); - }; - s.updateActiveIndex = function () { - var translate = s.rtl ? s.translate : -s.translate; - var newActiveIndex, i, snapIndex; - for (i = 0; i < s.slidesGrid.length; i ++) { - if (typeof s.slidesGrid[i + 1] !== 'undefined') { - if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { - newActiveIndex = i; - } - else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { - newActiveIndex = i + 1; - } - } - else { - if (translate >= s.slidesGrid[i]) { - newActiveIndex = i; - } - } - } - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; - } - // for (i = 0; i < s.slidesGrid.length; i++) { - // if (- translate >= s.slidesGrid[i]) { - // newActiveIndex = i; - // } - // } - snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); - if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; - - if (newActiveIndex === s.activeIndex) { - return; - } - s.snapIndex = snapIndex; - s.previousIndex = s.activeIndex; - s.activeIndex = newActiveIndex; - s.updateClasses(); - s.updateRealIndex(); - }; - s.updateRealIndex = function(){ - s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10); - }; - - /*========================= - Classes - ===========================*/ - s.updateClasses = function () { - s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass); - var activeSlide = s.slides.eq(s.activeIndex); - // Active classes - activeSlide.addClass(s.params.slideActiveClass); - if (params.loop) { - // Duplicate to all looped slides - if (activeSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - } - // Next Slide - var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); - if (s.params.loop && nextSlide.length === 0) { - nextSlide = s.slides.eq(0); - nextSlide.addClass(s.params.slideNextClass); - } - // Prev Slide - var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); - if (s.params.loop && prevSlide.length === 0) { - prevSlide = s.slides.eq(-1); - prevSlide.addClass(s.params.slidePrevClass); - } - if (params.loop) { - // Duplicate to all looped slides - if (nextSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - if (prevSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - } - - // Pagination - if (s.paginationContainer && s.paginationContainer.length > 0) { - // Current/Total - var current, - total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - if (s.params.loop) { - current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); - if (current > s.slides.length - 1 - s.loopedSlides * 2) { - current = current - (s.slides.length - s.loopedSlides * 2); - } - if (current > total - 1) current = current - total; - if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; - } - else { - if (typeof s.snapIndex !== 'undefined') { - current = s.snapIndex; - } - else { - current = s.activeIndex || 0; - } - } - // Types - if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { - s.bullets.removeClass(s.params.bulletActiveClass); - if (s.paginationContainer.length > 1) { - s.bullets.each(function () { - if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); - }); - } - else { - s.bullets.eq(current).addClass(s.params.bulletActiveClass); - } - } - if (s.params.paginationType === 'fraction') { - s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); - s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); - } - if (s.params.paginationType === 'progress') { - var scale = (current + 1) / total, - scaleX = scale, - scaleY = 1; - if (!s.isHorizontal()) { - scaleY = scale; - scaleX = 1; - } - s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); - } - if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { - s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - - // Next/active buttons - if (!s.params.loop) { - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - if (s.isBeginning) { - s.prevButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); - } - else { - s.prevButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); - } - } - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - if (s.isEnd) { - s.nextButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); - } - else { - s.nextButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); - } - } - } - }; - - /*========================= - Pagination - ===========================*/ - s.updatePagination = function () { - if (!s.params.pagination) return; - if (s.paginationContainer && s.paginationContainer.length > 0) { - var paginationHTML = ''; - if (s.params.paginationType === 'bullets') { - var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - for (var i = 0; i < numberOfBullets; i++) { - if (s.params.paginationBulletRender) { - paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass); - } - else { - paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">'; - } - } - s.paginationContainer.html(paginationHTML); - s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); - if (s.params.paginationClickable && s.params.a11y && s.a11y) { - s.a11y.initPagination(); - } - } - if (s.params.paginationType === 'fraction') { - if (s.params.paginationFractionRender) { - paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); - } - else { - paginationHTML = - '' + - ' / ' + - ''; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType === 'progress') { - if (s.params.paginationProgressRender) { - paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); - } - else { - paginationHTML = ''; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType !== 'custom') { - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - }; - /*========================= - Common update method - ===========================*/ - s.update = function (updateTranslate) { - if (!s) return; - s.updateContainerSize(); - s.updateSlidesSize(); - s.updateProgress(); - s.updatePagination(); - s.updateClasses(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - var newTranslate; - function forceSetTranslate() { - var translate = s.rtl ? -s.translate : s.translate; - newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - } - if (updateTranslate) { - var translated; - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - if (s.params.freeMode) { - forceSetTranslate(); - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - translated = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - translated = s.slideTo(s.activeIndex, 0, false, true); - } - if (!translated) { - forceSetTranslate(); - } - } - } - else if (s.params.autoHeight) { - s.updateAutoHeight(); - } - }; - - /*========================= - Resize Handler - ===========================*/ - s.onResize = function (forceUpdatePagination) { - if (s.params.onBeforeResize) s.params.onBeforeResize(s); - //Breakpoints - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - // Disable locks on resize - var allowSwipeToPrev = s.params.allowSwipeToPrev; - var allowSwipeToNext = s.params.allowSwipeToNext; - s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; - - s.updateContainerSize(); - s.updateSlidesSize(); - if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - var slideChangedBySlideTo = false; - if (s.params.freeMode) { - var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - s.updateClasses(); - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); - } - } - if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { - s.lazy.load(); - } - // Return locks after resize - s.params.allowSwipeToPrev = allowSwipeToPrev; - s.params.allowSwipeToNext = allowSwipeToNext; - if (s.params.onAfterResize) s.params.onAfterResize(s); - }; - - /*========================= - Events - ===========================*/ - - //Define Touch Events - s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'}; - if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'}; - else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'}; - s.touchEvents = { - start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start, - move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move, - end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end - }; - - - // WP8 Touch Events Fix - if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { - (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); - } - - // Attach/detach events - s.initEvents = function (detach) { - var actionDom = detach ? 'off' : 'on'; - var action = detach ? 'removeEventListener' : 'addEventListener'; - var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; - var target = s.support.touch ? touchEventsTarget : document; - - var moveCapture = s.params.nested ? true : false; - - //Touch Events - if (s.browser.ie) { - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); - target[action](s.touchEvents.move, s.onTouchMove, moveCapture); - target[action](s.touchEvents.end, s.onTouchEnd, false); - } - else { - if (s.support.touch) { - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener); - touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); - touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener); - } - if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) { - touchEventsTarget[action]('mousedown', s.onTouchStart, false); - document[action]('mousemove', s.onTouchMove, moveCapture); - document[action]('mouseup', s.onTouchEnd, false); - } - } - window[action]('resize', s.onResize); - - // Next, Prev, Index - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.nextButton[actionDom]('click', s.onClickNext); - if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.prevButton[actionDom]('click', s.onClickPrev); - if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.pagination && s.params.paginationClickable) { - s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); - if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); - } - - // Prevent Links Clicks - if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); - }; - s.attachEvents = function () { - s.initEvents(); - }; - s.detachEvents = function () { - s.initEvents(true); - }; - - /*========================= - Handle Clicks - ===========================*/ - // Prevent Clicks - s.allowClick = true; - s.preventClicks = function (e) { - if (!s.allowClick) { - if (s.params.preventClicks) e.preventDefault(); - if (s.params.preventClicksPropagation && s.animating) { - e.stopPropagation(); - e.stopImmediatePropagation(); - } - } - }; - // Clicks - s.onClickNext = function (e) { - e.preventDefault(); - if (s.isEnd && !s.params.loop) return; - s.slideNext(); - }; - s.onClickPrev = function (e) { - e.preventDefault(); - if (s.isBeginning && !s.params.loop) return; - s.slidePrev(); - }; - s.onClickIndex = function (e) { - e.preventDefault(); - var index = $(this).index() * s.params.slidesPerGroup; - if (s.params.loop) index = index + s.loopedSlides; - s.slideTo(index); - }; - - /*========================= - Handle Touches - ===========================*/ - function findElementInEvent(e, selector) { - var el = $(e.target); - if (!el.is(selector)) { - if (typeof selector === 'string') { - el = el.parents(selector); - } - else if (selector.nodeType) { - var found; - el.parents().each(function (index, _el) { - if (_el === selector) found = selector; - }); - if (!found) return undefined; - else return selector; - } - } - if (el.length === 0) { - return undefined; - } - return el[0]; - } - s.updateClickedSlide = function (e) { - var slide = findElementInEvent(e, '.' + s.params.slideClass); - var slideFound = false; - if (slide) { - for (var i = 0; i < s.slides.length; i++) { - if (s.slides[i] === slide) slideFound = true; - } - } - - if (slide && slideFound) { - s.clickedSlide = slide; - s.clickedIndex = $(slide).index(); - } - else { - s.clickedSlide = undefined; - s.clickedIndex = undefined; - return; - } - if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { - var slideToIndex = s.clickedIndex, - realIndex, - duplicatedSlides, - slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView; - if (s.params.loop) { - if (s.animating) return; - realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10); - if (s.params.centeredSlides) { - if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - else { - if (slideToIndex > s.slides.length - slidesPerView) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - } - else { - s.slideTo(slideToIndex); - } - } - }; - - var isTouched, - isMoved, - allowTouchCallbacks, - touchStartTime, - isScrolling, - currentTranslate, - startTranslate, - allowThresholdMove, - // Form elements to match - formElements = 'input, select, textarea, button, video', - // Last click time - lastClickTime = Date.now(), clickTimeout, - //Velocities - velocities = [], - allowMomentumBounce; - - // Animating Flag - s.animating = false; - - // Touches information - s.touches = { - startX: 0, - startY: 0, - currentX: 0, - currentY: 0, - diff: 0 - }; - - // Touch handlers - var isTouchEvent, startMoving; - s.onTouchStart = function (e) { - if (e.originalEvent) e = e.originalEvent; - isTouchEvent = e.type === 'touchstart'; - if (!isTouchEvent && 'which' in e && e.which === 3) return; - if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { - s.allowClick = true; - return; - } - if (s.params.swipeHandler) { - if (!findElementInEvent(e, s.params.swipeHandler)) return; - } - - var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - - // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore - if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { - return; - } - - isTouched = true; - isMoved = false; - allowTouchCallbacks = true; - isScrolling = undefined; - startMoving = undefined; - s.touches.startX = startX; - s.touches.startY = startY; - touchStartTime = Date.now(); - s.allowClick = true; - s.updateContainerSize(); - s.swipeDirection = undefined; - if (s.params.threshold > 0) allowThresholdMove = false; - if (e.type !== 'touchstart') { - var preventDefault = true; - if ($(e.target).is(formElements)) preventDefault = false; - if (document.activeElement && $(document.activeElement).is(formElements)) { - document.activeElement.blur(); - } - if (preventDefault) { - e.preventDefault(); - } - } - s.emit('onTouchStart', s, e); - }; - - s.onTouchMove = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (isTouchEvent && e.type === 'mousemove') return; - if (e.preventedByNestedSwiper) { - s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - return; - } - if (s.params.onlyExternal) { - // isMoved = true; - s.allowClick = false; - if (isTouched) { - s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - touchStartTime = Date.now(); - } - return; - } - if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) { - if (!s.isHorizontal()) { - // Vertical - if ( - (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) || - (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate()) - ) { - return; - } - } - else { - if ( - (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) || - (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate()) - ) { - return; - } - } - } - if (isTouchEvent && document.activeElement) { - if (e.target === document.activeElement && $(e.target).is(formElements)) { - isMoved = true; - s.allowClick = false; - return; - } - } - if (allowTouchCallbacks) { - s.emit('onTouchMove', s, e); - } - if (e.targetTouches && e.targetTouches.length > 1) return; - - s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (typeof isScrolling === 'undefined') { - var touchAngle; - if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) { - isScrolling = false; - } - else { - touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; - isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); - } - } - if (isScrolling) { - s.emit('onTouchMoveOpposite', s, e); - } - if (typeof startMoving === 'undefined') { - if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { - startMoving = true; - } - } - if (!isTouched) return; - if (isScrolling) { - isTouched = false; - return; - } - if (!startMoving) { - return; - } - s.allowClick = false; - s.emit('onSliderMove', s, e); - e.preventDefault(); - if (s.params.touchMoveStopPropagation && !s.params.nested) { - e.stopPropagation(); - } - - if (!isMoved) { - if (params.loop) { - s.fixLoop(); - } - startTranslate = s.getWrapperTranslate(); - s.setWrapperTransition(0); - if (s.animating) { - s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); - } - if (s.params.autoplay && s.autoplaying) { - if (s.params.autoplayDisableOnInteraction) { - s.stopAutoplay(); - } - else { - s.pauseAutoplay(); - } - } - allowMomentumBounce = false; - //Grab Cursor - if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(true); - } - } - isMoved = true; - - var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - - diff = diff * s.params.touchRatio; - if (s.rtl) diff = -diff; - - s.swipeDirection = diff > 0 ? 'prev' : 'next'; - currentTranslate = diff + startTranslate; - - var disableParentSwiper = true; - if ((diff > 0 && currentTranslate > s.minTranslate())) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); - } - else if (diff < 0 && currentTranslate < s.maxTranslate()) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); - } - - if (disableParentSwiper) { - e.preventedByNestedSwiper = true; - } - - // Directions locks - if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { - currentTranslate = startTranslate; - } - if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { - currentTranslate = startTranslate; - } - - - // Threshold - if (s.params.threshold > 0) { - if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { - if (!allowThresholdMove) { - allowThresholdMove = true; - s.touches.startX = s.touches.currentX; - s.touches.startY = s.touches.currentY; - currentTranslate = startTranslate; - s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - return; - } - } - else { - currentTranslate = startTranslate; - return; - } - } - - if (!s.params.followFinger) return; - - // Update active index in free mode - if (s.params.freeMode || s.params.watchSlidesProgress) { - s.updateActiveIndex(); - } - if (s.params.freeMode) { - //Velocity - if (velocities.length === 0) { - velocities.push({ - position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], - time: touchStartTime - }); - } - velocities.push({ - position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], - time: (new window.Date()).getTime() - }); - } - // Update progress - s.updateProgress(currentTranslate); - // Update translate - s.setWrapperTranslate(currentTranslate); - }; - s.onTouchEnd = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (allowTouchCallbacks) { - s.emit('onTouchEnd', s, e); - } - allowTouchCallbacks = false; - if (!isTouched) return; - //Return Grab Cursor - if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(false); - } - - // Time diff - var touchEndTime = Date.now(); - var timeDiff = touchEndTime - touchStartTime; - - // Tap, doubleTap, Click - if (s.allowClick) { - s.updateClickedSlide(e); - s.emit('onTap', s, e); - if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { - if (clickTimeout) clearTimeout(clickTimeout); - clickTimeout = setTimeout(function () { - if (!s) return; - if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { - s.paginationContainer.toggleClass(s.params.paginationHiddenClass); - } - s.emit('onClick', s, e); - }, 300); - - } - if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { - if (clickTimeout) clearTimeout(clickTimeout); - s.emit('onDoubleTap', s, e); - } - } - - lastClickTime = Date.now(); - setTimeout(function () { - if (s) s.allowClick = true; - }, 0); - - if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { - isTouched = isMoved = false; - return; - } - isTouched = isMoved = false; - - var currentPos; - if (s.params.followFinger) { - currentPos = s.rtl ? s.translate : -s.translate; - } - else { - currentPos = -currentTranslate; - } - if (s.params.freeMode) { - if (currentPos < -s.minTranslate()) { - s.slideTo(s.activeIndex); - return; - } - else if (currentPos > -s.maxTranslate()) { - if (s.slides.length < s.snapGrid.length) { - s.slideTo(s.snapGrid.length - 1); - } - else { - s.slideTo(s.slides.length - 1); - } - return; - } - - if (s.params.freeModeMomentum) { - if (velocities.length > 1) { - var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); - - var distance = lastMoveEvent.position - velocityEvent.position; - var time = lastMoveEvent.time - velocityEvent.time; - s.velocity = distance / time; - s.velocity = s.velocity / 2; - if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { - s.velocity = 0; - } - // this implies that the user stopped moving a finger then released. - // There would be no events with distance zero, so the last event is stale. - if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { - s.velocity = 0; - } - } else { - s.velocity = 0; - } - s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio; - - velocities.length = 0; - var momentumDuration = 1000 * s.params.freeModeMomentumRatio; - var momentumDistance = s.velocity * momentumDuration; - - var newPosition = s.translate + momentumDistance; - if (s.rtl) newPosition = - newPosition; - var doBounce = false; - var afterBouncePosition; - var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; - if (newPosition < s.maxTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition + s.maxTranslate() < -bounceAmount) { - newPosition = s.maxTranslate() - bounceAmount; - } - afterBouncePosition = s.maxTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.maxTranslate(); - } - } - else if (newPosition > s.minTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition - s.minTranslate() > bounceAmount) { - newPosition = s.minTranslate() + bounceAmount; - } - afterBouncePosition = s.minTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.minTranslate(); - } - } - else if (s.params.freeModeSticky) { - var j = 0, - nextSlide; - for (j = 0; j < s.snapGrid.length; j += 1) { - if (s.snapGrid[j] > -newPosition) { - nextSlide = j; - break; - } - - } - if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { - newPosition = s.snapGrid[nextSlide]; - } else { - newPosition = s.snapGrid[nextSlide - 1]; - } - if (!s.rtl) newPosition = - newPosition; - } - //Fix duration - if (s.velocity !== 0) { - if (s.rtl) { - momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); - } - else { - momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); - } - } - else if (s.params.freeModeSticky) { - s.slideReset(); - return; - } - - if (s.params.freeModeMomentumBounce && doBounce) { - s.updateProgress(afterBouncePosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s || !allowMomentumBounce) return; - s.emit('onMomentumBounce', s); - - s.setWrapperTransition(s.params.speed); - s.setWrapperTranslate(afterBouncePosition); - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - }); - } else if (s.velocity) { - s.updateProgress(newPosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - } - - } else { - s.updateProgress(newPosition); - } - - s.updateActiveIndex(); - } - if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { - s.updateProgress(); - s.updateActiveIndex(); - } - return; - } - - // Find current slide - var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; - for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { - if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { - if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { - stopIndex = i; - groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; - } - } - else { - if (currentPos >= s.slidesGrid[i]) { - stopIndex = i; - groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; - } - } - } - - // Find current slide size - var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; - - if (timeDiff > s.params.longSwipesMs) { - // Long touches - if (!s.params.longSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - - } - if (s.swipeDirection === 'prev') { - if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - } - } - else { - // Short swipes - if (!s.params.shortSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - s.slideTo(stopIndex + s.params.slidesPerGroup); - - } - if (s.swipeDirection === 'prev') { - s.slideTo(stopIndex); - } - } - }; - /*========================= - Transitions - ===========================*/ - s._slideTo = function (slideIndex, speed) { - return s.slideTo(slideIndex, speed, true, true); - }; - s.slideTo = function (slideIndex, speed, runCallbacks, internal) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (typeof slideIndex === 'undefined') slideIndex = 0; - if (slideIndex < 0) slideIndex = 0; - s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); - if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; - - var translate = - s.snapGrid[s.snapIndex]; - // Stop autoplay - if (s.params.autoplay && s.autoplaying) { - if (internal || !s.params.autoplayDisableOnInteraction) { - s.pauseAutoplay(speed); - } - else { - s.stopAutoplay(); - } - } - // Update progress - s.updateProgress(translate); - - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - for (var i = 0; i < s.slidesGrid.length; i++) { - if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { - slideIndex = i; - } - } - } - - // Directions locks - if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { - return false; - } - if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { - if ((s.activeIndex || 0) !== slideIndex ) return false; - } - - // Update Index - if (typeof speed === 'undefined') speed = s.params.speed; - s.previousIndex = s.activeIndex || 0; - s.activeIndex = slideIndex; - s.updateRealIndex(); - if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { - // Update Height - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - s.updateClasses(); - if (s.params.effect !== 'slide') { - s.setWrapperTranslate(translate); - } - return false; - } - s.updateClasses(); - s.onTransitionStart(runCallbacks); - - if (speed === 0 || s.browser.lteIE9) { - s.setWrapperTranslate(translate); - s.setWrapperTransition(0); - s.onTransitionEnd(runCallbacks); - } - else { - s.setWrapperTranslate(translate); - s.setWrapperTransition(speed); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(runCallbacks); - }); - } - - } - - return true; - }; - - s.onTransitionStart = function (runCallbacks) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - if (s.lazy) s.lazy.onTransitionStart(); - if (runCallbacks) { - s.emit('onTransitionStart', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeStart', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextStart', s); - } - else { - s.emit('onSlidePrevStart', s); - } - } - - } - }; - s.onTransitionEnd = function (runCallbacks) { - s.animating = false; - s.setWrapperTransition(0); - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.lazy) s.lazy.onTransitionEnd(); - if (runCallbacks) { - s.emit('onTransitionEnd', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeEnd', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextEnd', s); - } - else { - s.emit('onSlidePrevEnd', s); - } - } - } - if (s.params.history && s.history) { - s.history.setHistory(s.params.history, s.activeIndex); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.setHash(); - } - - }; - s.slideNext = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - }; - s._slideNext = function (speed) { - return s.slideNext(true, speed, true); - }; - s.slidePrev = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - }; - s._slidePrev = function (speed) { - return s.slidePrev(true, speed, true); - }; - s.slideReset = function (runCallbacks, speed, internal) { - return s.slideTo(s.activeIndex, speed, runCallbacks); - }; - - s.disableTouchControl = function () { - s.params.onlyExternal = true; - return true; - }; - s.enableTouchControl = function () { - s.params.onlyExternal = false; - return true; - }; - - /*========================= - Translate/transition helpers - ===========================*/ - s.setWrapperTransition = function (duration, byController) { - s.wrapper.transition(duration); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTransition(duration); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTransition(duration); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTransition(duration); - } - if (s.params.control && s.controller) { - s.controller.setTransition(duration, byController); - } - s.emit('onSetTransition', s, duration); - }; - s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { - var x = 0, y = 0, z = 0; - if (s.isHorizontal()) { - x = s.rtl ? -translate : translate; - } - else { - y = translate; - } - - if (s.params.roundLengths) { - x = round(x); - y = round(y); - } - - if (!s.params.virtualTranslate) { - if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); - else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); - } - - s.translate = s.isHorizontal() ? x : y; - - // Check if we need to update progress - var progress; - var translatesDiff = s.maxTranslate() - s.minTranslate(); - if (translatesDiff === 0) { - progress = 0; - } - else { - progress = (translate - s.minTranslate()) / (translatesDiff); - } - if (progress !== s.progress) { - s.updateProgress(translate); - } - - if (updateActiveIndex) s.updateActiveIndex(); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTranslate(s.translate); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTranslate(s.translate); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTranslate(s.translate); - } - if (s.params.control && s.controller) { - s.controller.setTranslate(s.translate, byController); - } - s.emit('onSetTranslate', s, s.translate); - }; - - s.getTranslate = function (el, axis) { - var matrix, curTransform, curStyle, transformMatrix; - - // automatic axis detection - if (typeof axis === 'undefined') { - axis = 'x'; - } - - if (s.params.virtualTranslate) { - return s.rtl ? -s.translate : s.translate; - } - - curStyle = window.getComputedStyle(el, null); - if (window.WebKitCSSMatrix) { - curTransform = curStyle.transform || curStyle.webkitTransform; - if (curTransform.split(',').length > 6) { - curTransform = curTransform.split(', ').map(function(a){ - return a.replace(',','.'); - }).join(', '); - } - // Some old versions of Webkit choke when 'none' is passed; pass - // empty string instead in this case - transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); - } - else { - transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); - matrix = transformMatrix.toString().split(','); - } - - if (axis === 'x') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m41; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[12]); - //Normal Browsers - else - curTransform = parseFloat(matrix[4]); - } - if (axis === 'y') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m42; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[13]); - //Normal Browsers - else - curTransform = parseFloat(matrix[5]); - } - if (s.rtl && curTransform) curTransform = -curTransform; - return curTransform || 0; - }; - s.getWrapperTranslate = function (axis) { - if (typeof axis === 'undefined') { - axis = s.isHorizontal() ? 'x' : 'y'; - } - return s.getTranslate(s.wrapper[0], axis); - }; - - /*========================= - Observer - ===========================*/ - s.observers = []; - function initObserver(target, options) { - options = options || {}; - // create an observer instance - var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; - var observer = new ObserverFunc(function (mutations) { - mutations.forEach(function (mutation) { - s.onResize(true); - s.emit('onObserverUpdate', s, mutation); - }); - }); - - observer.observe(target, { - attributes: typeof options.attributes === 'undefined' ? true : options.attributes, - childList: typeof options.childList === 'undefined' ? true : options.childList, - characterData: typeof options.characterData === 'undefined' ? true : options.characterData - }); - - s.observers.push(observer); - } - s.initObservers = function () { - if (s.params.observeParents) { - var containerParents = s.container.parents(); - for (var i = 0; i < containerParents.length; i++) { - initObserver(containerParents[i]); - } - } - - // Observe container - initObserver(s.container[0], {childList: false}); - - // Observe wrapper - initObserver(s.wrapper[0], {attributes: false}); - }; - s.disconnectObservers = function () { - for (var i = 0; i < s.observers.length; i++) { - s.observers[i].disconnect(); - } - s.observers = []; - }; - /*========================= - Loop - ===========================*/ - // Create looped slides - s.createLoop = function () { - // Remove duplicated slides - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - - var slides = s.wrapper.children('.' + s.params.slideClass); - - if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; - - s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); - s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; - if (s.loopedSlides > slides.length) { - s.loopedSlides = slides.length; - } - - var prependSlides = [], appendSlides = [], i; - slides.each(function (index, el) { - var slide = $(this); - if (index < s.loopedSlides) appendSlides.push(el); - if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); - slide.attr('data-swiper-slide-index', index); - }); - for (i = 0; i < appendSlides.length; i++) { - s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - for (i = prependSlides.length - 1; i >= 0; i--) { - s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - }; - s.destroyLoop = function () { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - s.slides.removeAttr('data-swiper-slide-index'); - }; - s.reLoop = function (updatePosition) { - var oldIndex = s.activeIndex - s.loopedSlides; - s.destroyLoop(); - s.createLoop(); - s.updateSlidesSize(); - if (updatePosition) { - s.slideTo(oldIndex + s.loopedSlides, 0, false); - } - - }; - s.fixLoop = function () { - var newIndex; - //Fix For Negative Oversliding - if (s.activeIndex < s.loopedSlides) { - newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - //Fix For Positive Oversliding - else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { - newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - }; - /*========================= - Append/Prepend/Remove Slides - ===========================*/ - s.appendSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.append(slides[i]); - } - } - else { - s.wrapper.append(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - }; - s.prependSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - var newActiveIndex = s.activeIndex + 1; - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.prepend(slides[i]); - } - newActiveIndex = s.activeIndex + slides.length; - } - else { - s.wrapper.prepend(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - s.slideTo(newActiveIndex, 0, false); - }; - s.removeSlide = function (slidesIndexes) { - if (s.params.loop) { - s.destroyLoop(); - s.slides = s.wrapper.children('.' + s.params.slideClass); - } - var newActiveIndex = s.activeIndex, - indexToRemove; - if (typeof slidesIndexes === 'object' && slidesIndexes.length) { - for (var i = 0; i < slidesIndexes.length; i++) { - indexToRemove = slidesIndexes[i]; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - } - newActiveIndex = Math.max(newActiveIndex, 0); - } - else { - indexToRemove = slidesIndexes; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - newActiveIndex = Math.max(newActiveIndex, 0); - } - - if (s.params.loop) { - s.createLoop(); - } - - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - if (s.params.loop) { - s.slideTo(newActiveIndex + s.loopedSlides, 0, false); - } - else { - s.slideTo(newActiveIndex, 0, false); - } - - }; - s.removeAllSlides = function () { - var slidesIndexes = []; - for (var i = 0; i < s.slides.length; i++) { - slidesIndexes.push(i); - } - s.removeSlide(slidesIndexes); - }; - - - /*========================= - Effects - ===========================*/ - s.effects = { - fade: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var offset = slide[0].swiperSlideOffset; - var tx = -offset; - if (!s.params.virtualTranslate) tx = tx - s.translate; - var ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - var slideOpacity = s.params.fade.crossFade ? - Math.max(1 - Math.abs(slide[0].progress), 0) : - 1 + Math.min(Math.max(slide[0].progress, -1), 0); - slide - .css({ - opacity: slideOpacity - }) - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); - - } - - }, - setTransition: function (duration) { - s.slides.transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - flip: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var progress = slide[0].progress; - if (s.params.flip.limitRotation) { - progress = Math.max(Math.min(slide[0].progress, 1), -1); - } - var offset = slide[0].swiperSlideOffset; - var rotate = -180 * progress, - rotateY = rotate, - rotateX = 0, - tx = -offset, - ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - rotateX = -rotateY; - rotateY = 0; - } - else if (s.rtl) { - rotateY = -rotateY; - } - - slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; - - if (s.params.flip.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - - slide - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.eq(s.activeIndex).transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - if (!$(this).hasClass(s.params.slideActiveClass)) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - cube: { - setTranslate: function () { - var wrapperRotate = 0, cubeShadow; - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow = s.wrapper.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('
'); - s.wrapper.append(cubeShadow); - } - cubeShadow.css({height: s.width + 'px'}); - } - else { - cubeShadow = s.container.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('
'); - s.container.append(cubeShadow); - } - } - } - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var slideAngle = i * 90; - var round = Math.floor(slideAngle / 360); - if (s.rtl) { - slideAngle = -slideAngle; - round = Math.floor(-slideAngle / 360); - } - var progress = Math.max(Math.min(slide[0].progress, 1), -1); - var tx = 0, ty = 0, tz = 0; - if (i % 4 === 0) { - tx = - round * 4 * s.size; - tz = 0; - } - else if ((i - 1) % 4 === 0) { - tx = 0; - tz = - round * 4 * s.size; - } - else if ((i - 2) % 4 === 0) { - tx = s.size + round * 4 * s.size; - tz = s.size; - } - else if ((i - 3) % 4 === 0) { - tx = - s.size; - tz = 3 * s.size + s.size * 4 * round; - } - if (s.rtl) { - tx = -tx; - } - - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - - var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; - if (progress <= 1 && progress > -1) { - wrapperRotate = i * 90 + progress * 90; - if (s.rtl) wrapperRotate = -i * 90 - progress * 90; - } - slide.transform(transform); - if (s.params.cube.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - } - s.wrapper.css({ - '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' - }); - - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); - } - else { - var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; - var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); - var scale1 = s.params.cube.shadowScale, - scale2 = s.params.cube.shadowScale / multiplier, - offset = s.params.cube.shadowOffset; - cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); - } - } - var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; - s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.cube.shadow && !s.isHorizontal()) { - s.container.find('.swiper-cube-shadow').transition(duration); - } - } - }, - coverflow: { - setTranslate: function () { - var transform = s.translate; - var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; - var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; - var translate = s.params.coverflow.depth; - //Each slide offset from center - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideSize = s.slidesSizesGrid[i]; - var slideOffset = slide[0].swiperSlideOffset; - var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; - - var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; - var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; - // var rotateZ = 0 - var translateZ = -translate * Math.abs(offsetMultiplier); - - var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); - var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; - - //Fix for ultra small values - if (Math.abs(translateX) < 0.001) translateX = 0; - if (Math.abs(translateY) < 0.001) translateY = 0; - if (Math.abs(translateZ) < 0.001) translateZ = 0; - if (Math.abs(rotateY) < 0.001) rotateY = 0; - if (Math.abs(rotateX) < 0.001) rotateX = 0; - - var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; - - slide.transform(slideTransform); - slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; - if (s.params.coverflow.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; - if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; - } - } - - //Set correct perspective for IE10 - if (s.browser.ie) { - var ws = s.wrapper[0].style; - ws.perspectiveOrigin = center + 'px 50%'; - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - } - } - }; - - - /*========================= - Images Lazy Loading - ===========================*/ - s.lazy = { - initialImageLoaded: false, - loadImageInSlide: function (index, loadInDuplicate) { - if (typeof index === 'undefined') return; - if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; - if (s.slides.length === 0) return; - - var slide = s.slides.eq(index); - var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')'); - if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) { - img = img.add(slide[0]); - } - if (img.length === 0) return; - - img.each(function () { - var _img = $(this); - _img.addClass(s.params.lazyStatusLoadingClass); - var background = _img.attr('data-background'); - var src = _img.attr('data-src'), - srcset = _img.attr('data-srcset'), - sizes = _img.attr('data-sizes'); - s.loadImage(_img[0], (src || background), srcset, sizes, false, function () { - if (typeof s === 'undefined' || s === null || !s) return; - if (background) { - _img.css('background-image', 'url("' + background + '")'); - _img.removeAttr('data-background'); - } - else { - if (srcset) { - _img.attr('srcset', srcset); - _img.removeAttr('data-srcset'); - } - if (sizes) { - _img.attr('sizes', sizes); - _img.removeAttr('data-sizes'); - } - if (src) { - _img.attr('src', src); - _img.removeAttr('data-src'); - } - - } - - _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass); - slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove(); - if (s.params.loop && loadInDuplicate) { - var slideOriginalIndex = slide.attr('data-swiper-slide-index'); - if (slide.hasClass(s.params.slideDuplicateClass)) { - var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); - s.lazy.loadImageInSlide(originalSlide.index(), false); - } - else { - var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); - s.lazy.loadImageInSlide(duplicatedSlide.index(), false); - } - } - s.emit('onLazyImageReady', s, slide[0], _img[0]); - }); - - s.emit('onLazyImageLoad', s, slide[0], _img[0]); - }); - - }, - load: function () { - var i; - var slidesPerView = s.params.slidesPerView; - if (slidesPerView === 'auto') { - slidesPerView = 0; - } - if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true; - if (s.params.watchSlidesVisibility) { - s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { - s.lazy.loadImageInSlide($(this).index()); - }); - } - else { - if (slidesPerView > 1) { - for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - s.lazy.loadImageInSlide(s.activeIndex); - } - } - if (s.params.lazyLoadingInPrevNext) { - if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { - var amount = s.params.lazyLoadingInPrevNextAmount; - var spv = slidesPerView; - var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); - var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); - // Next Slides - for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - // Prev Slides - for (i = minIndex; i < s.activeIndex ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); - if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); - - var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); - if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); - } - } - }, - onTransitionStart: function () { - if (s.params.lazyLoading) { - if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { - s.lazy.load(); - } - } - }, - onTransitionEnd: function () { - if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { - s.lazy.load(); - } - } - }; - - - /*========================= - Scrollbar - ===========================*/ - s.scrollbar = { - isTouched: false, - setDragPosition: function (e) { - var sb = s.scrollbar; - var x = 0, y = 0; - var translate; - var pointerPosition = s.isHorizontal() ? - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; - var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; - var positionMin = -s.minTranslate() * sb.moveDivider; - var positionMax = -s.maxTranslate() * sb.moveDivider; - if (position < positionMin) { - position = positionMin; - } - else if (position > positionMax) { - position = positionMax; - } - position = -position / sb.moveDivider; - s.updateProgress(position); - s.setWrapperTranslate(position, true); - }, - dragStart: function (e) { - var sb = s.scrollbar; - sb.isTouched = true; - e.preventDefault(); - e.stopPropagation(); - - sb.setDragPosition(e); - clearTimeout(sb.dragTimeout); - - sb.track.transition(0); - if (s.params.scrollbarHide) { - sb.track.css('opacity', 1); - } - s.wrapper.transition(100); - sb.drag.transition(100); - s.emit('onScrollbarDragStart', s); - }, - dragMove: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - sb.setDragPosition(e); - s.wrapper.transition(0); - sb.track.transition(0); - sb.drag.transition(0); - s.emit('onScrollbarDragMove', s); - }, - dragEnd: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - sb.isTouched = false; - if (s.params.scrollbarHide) { - clearTimeout(sb.dragTimeout); - sb.dragTimeout = setTimeout(function () { - sb.track.css('opacity', 0); - sb.track.transition(400); - }, 1000); - - } - s.emit('onScrollbarDragEnd', s); - if (s.params.scrollbarSnapOnRelease) { - s.slideReset(); - } - }, - draggableEvents: (function () { - if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop; - else return s.touchEvents; - })(), - enableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).on(sb.draggableEvents.start, sb.dragStart); - $(target).on(sb.draggableEvents.move, sb.dragMove); - $(target).on(sb.draggableEvents.end, sb.dragEnd); - }, - disableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).off(sb.draggableEvents.start, sb.dragStart); - $(target).off(sb.draggableEvents.move, sb.dragMove); - $(target).off(sb.draggableEvents.end, sb.dragEnd); - }, - set: function () { - if (!s.params.scrollbar) return; - var sb = s.scrollbar; - sb.track = $(s.params.scrollbar); - if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { - sb.track = s.container.find(s.params.scrollbar); - } - sb.drag = sb.track.find('.swiper-scrollbar-drag'); - if (sb.drag.length === 0) { - sb.drag = $('
'); - sb.track.append(sb.drag); - } - sb.drag[0].style.width = ''; - sb.drag[0].style.height = ''; - sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; - - sb.divider = s.size / s.virtualSize; - sb.moveDivider = sb.divider * (sb.trackSize / s.size); - sb.dragSize = sb.trackSize * sb.divider; - - if (s.isHorizontal()) { - sb.drag[0].style.width = sb.dragSize + 'px'; - } - else { - sb.drag[0].style.height = sb.dragSize + 'px'; - } - - if (sb.divider >= 1) { - sb.track[0].style.display = 'none'; - } - else { - sb.track[0].style.display = ''; - } - if (s.params.scrollbarHide) { - sb.track[0].style.opacity = 0; - } - }, - setTranslate: function () { - if (!s.params.scrollbar) return; - var diff; - var sb = s.scrollbar; - var translate = s.translate || 0; - var newPos; - - var newSize = sb.dragSize; - newPos = (sb.trackSize - sb.dragSize) * s.progress; - if (s.rtl && s.isHorizontal()) { - newPos = -newPos; - if (newPos > 0) { - newSize = sb.dragSize - newPos; - newPos = 0; - } - else if (-newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize + newPos; - } - } - else { - if (newPos < 0) { - newSize = sb.dragSize + newPos; - newPos = 0; - } - else if (newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize - newPos; - } - } - if (s.isHorizontal()) { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); - } - else { - sb.drag.transform('translateX(' + (newPos) + 'px)'); - } - sb.drag[0].style.width = newSize + 'px'; - } - else { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); - } - else { - sb.drag.transform('translateY(' + (newPos) + 'px)'); - } - sb.drag[0].style.height = newSize + 'px'; - } - if (s.params.scrollbarHide) { - clearTimeout(sb.timeout); - sb.track[0].style.opacity = 1; - sb.timeout = setTimeout(function () { - sb.track[0].style.opacity = 0; - sb.track.transition(400); - }, 1000); - } - }, - setTransition: function (duration) { - if (!s.params.scrollbar) return; - s.scrollbar.drag.transition(duration); - } - }; - - - /*========================= - Controller - ===========================*/ - s.controller = { - LinearSpline: function (x, y) { - var binarySearch = (function() { - var maxIndex, minIndex, guess; - return function(array, val) { - minIndex = -1; - maxIndex = array.length; - while (maxIndex - minIndex > 1) - if (array[guess = maxIndex + minIndex >> 1] <= val) { - minIndex = guess; - } else { - maxIndex = guess; - } - return maxIndex; - }; - })(); - this.x = x; - this.y = y; - this.lastIndex = x.length - 1; - // Given an x value (x2), return the expected y2 value: - // (x1,y1) is the known point before given value, - // (x3,y3) is the known point after given value. - var i1, i3; - var l = this.x.length; - - this.interpolate = function (x2) { - if (!x2) return 0; - - // Get the indexes of x1 and x3 (the array indexes before and after given x2): - i3 = binarySearch(this.x, x2); - i1 = i3 - 1; - - // We have our indexes i1 & i3, so we can calculate already: - // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 - return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; - }; - }, - //xxx: for now i will just save one spline function to to - getInterpolateFunction: function(c){ - if(!s.controller.spline) s.controller.spline = s.params.loop ? - new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : - new s.controller.LinearSpline(s.snapGrid, c.snapGrid); - }, - setTranslate: function (translate, byController) { - var controlled = s.params.control; - var multiplier, controlledTranslate; - function setControlledTranslate(c) { - // this will create an Interpolate function based on the snapGrids - // x is the Grid of the scrolled scroller and y will be the controlled scroller - // it makes sense to create this only once and recall it for the interpolation - // the function does a lot of value caching for performance - translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; - if (s.params.controlBy === 'slide') { - s.controller.getInterpolateFunction(c); - // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid - // but it did not work out - controlledTranslate = -s.controller.spline.interpolate(-translate); - } - - if(!controlledTranslate || s.params.controlBy === 'container'){ - multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); - controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); - } - - if (s.params.controlInverse) { - controlledTranslate = c.maxTranslate() - controlledTranslate; - } - c.updateProgress(controlledTranslate); - c.setWrapperTranslate(controlledTranslate, false, s); - c.updateActiveIndex(); - } - if (Array.isArray(controlled)) { - for (var i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTranslate(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - - setControlledTranslate(controlled); - } - }, - setTransition: function (duration, byController) { - var controlled = s.params.control; - var i; - function setControlledTransition(c) { - c.setWrapperTransition(duration, s); - if (duration !== 0) { - c.onTransitionStart(); - c.wrapper.transitionEnd(function(){ - if (!controlled) return; - if (c.params.loop && s.params.controlBy === 'slide') { - c.fixLoop(); - } - c.onTransitionEnd(); - - }); - } - } - if (Array.isArray(controlled)) { - for (i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTransition(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - setControlledTransition(controlled); - } - } - }; - - - /*========================= - Hash Navigation - ===========================*/ - s.hashnav = { - onHashCange: function (e, a) { - var newHash = document.location.hash.replace('#', ''); - var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash'); - if (newHash !== activeSlideHash) { - s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash="' + (newHash) + '"]').index()); - } - }, - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - $(window)[action]('hashchange', s.hashnav.onHashCange); - }, - setHash: function () { - if (!s.hashnav.initialized || !s.params.hashnav) return; - if (s.params.replaceState && window.history && window.history.replaceState) { - window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || '')); - } else { - var slide = s.slides.eq(s.activeIndex); - var hash = slide.attr('data-hash') || slide.attr('data-history'); - document.location.hash = hash || ''; - } - }, - init: function () { - if (!s.params.hashnav || s.params.history) return; - s.hashnav.initialized = true; - var hash = document.location.hash.replace('#', ''); - if (hash) { - var speed = 0; - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHash = slide.attr('data-hash') || slide.attr('data-history'); - if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, s.params.runCallbacksOnInit, true); - } - } - } - if (s.params.hashnavWatchState) s.hashnav.attachEvents(); - }, - destroy: function () { - if (s.params.hashnavWatchState) s.hashnav.attachEvents(true); - } - }; - - - /*========================= - History Api with fallback to Hashnav - ===========================*/ - s.history = { - init: function () { - if (!s.params.history) return; - if (!window.history || !window.history.pushState) { - s.params.history = false; - s.params.hashnav = true; - return; - } - s.history.initialized = true; - this.paths = this.getPathValues(); - if (!this.paths.key && !this.paths.value) return; - this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit); - if (!s.params.replaceState) { - window.addEventListener('popstate', this.setHistoryPopState); - } - }, - setHistoryPopState: function() { - s.history.paths = s.history.getPathValues(); - s.history.scrollToSlide(s.params.speed, s.history.paths.value, false); - }, - getPathValues: function() { - var pathArray = window.location.pathname.slice(1).split('/'); - var total = pathArray.length; - var key = pathArray[total - 2]; - var value = pathArray[total - 1]; - return { key: key, value: value }; - }, - setHistory: function (key, index) { - if (!s.history.initialized || !s.params.history) return; - var slide = s.slides.eq(index); - var value = this.slugify(slide.attr('data-history')); - if (!window.location.pathname.includes(key)) { - value = key + '/' + value; - } - if (s.params.replaceState) { - window.history.replaceState(null, null, value); - } else { - window.history.pushState(null, null, value); - } - }, - slugify: function(text) { - return text.toString().toLowerCase() - .replace(/\s+/g, '-') - .replace(/[^\w\-]+/g, '') - .replace(/\-\-+/g, '-') - .replace(/^-+/, '') - .replace(/-+$/, ''); - }, - scrollToSlide: function(speed, value, runCallbacks) { - if (value) { - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHistory = this.slugify(slide.attr('data-history')); - if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, runCallbacks); - } - } - } else { - s.slideTo(0, speed, runCallbacks); - } - } - }; - - - /*========================= - Keyboard Control - ===========================*/ - function handleKeyboard(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var kc = e.keyCode || e.charCode; - // Directions locks - if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { - return false; - } - if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { - return false; - } - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { - return; - } - if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { - return; - } - if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { - var inView = false; - //Check that swiper should be inside of visible area of window - if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) { - return; - } - var windowScroll = { - left: window.pageXOffset, - top: window.pageYOffset - }; - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var swiperOffset = s.container.offset(); - if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; - var swiperCoord = [ - [swiperOffset.left, swiperOffset.top], - [swiperOffset.left + s.width, swiperOffset.top], - [swiperOffset.left, swiperOffset.top + s.height], - [swiperOffset.left + s.width, swiperOffset.top + s.height] - ]; - for (var i = 0; i < swiperCoord.length; i++) { - var point = swiperCoord[i]; - if ( - point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && - point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight - ) { - inView = true; - } - - } - if (!inView) return; - } - if (s.isHorizontal()) { - if (kc === 37 || kc === 39) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); - if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); - } - else { - if (kc === 38 || kc === 40) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if (kc === 40) s.slideNext(); - if (kc === 38) s.slidePrev(); - } - s.emit('onKeyPress', s, kc); - } - s.disableKeyboardControl = function () { - s.params.keyboardControl = false; - $(document).off('keydown', handleKeyboard); - }; - s.enableKeyboardControl = function () { - s.params.keyboardControl = true; - $(document).on('keydown', handleKeyboard); - }; - - - /*========================= - Mousewheel Control - ===========================*/ - s.mousewheel = { - event: false, - lastScrollTime: (new window.Date()).getTime() - }; - function isEventSupported() { - var eventName = 'onwheel'; - var isSupported = eventName in document; - - if (!isSupported) { - var element = document.createElement('div'); - element.setAttribute(eventName, 'return;'); - isSupported = typeof element[eventName] === 'function'; - } - - if (!isSupported && - document.implementation && - document.implementation.hasFeature && - // always returns true in newer browsers as per the standard. - // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature - document.implementation.hasFeature('', '') !== true ) { - // This is the only way to test support for the `wheel` event in IE9+. - isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); - } - - return isSupported; - } - /** - * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is - * complicated, thus this doc is long and (hopefully) detailed enough to answer - * your questions. - * - * If you need to react to the mouse wheel in a predictable way, this code is - * like your bestest friend. * hugs * - * - * As of today, there are 4 DOM event types you can listen to: - * - * 'wheel' -- Chrome(31+), FF(17+), IE(9+) - * 'mousewheel' -- Chrome, IE(6+), Opera, Safari - * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother! - * 'DOMMouseScroll' -- FF(0.9.7+) since 2003 - * - * So what to do? The is the best: - * - * normalizeWheel.getEventType(); - * - * In your event callback, use this code to get sane interpretation of the - * deltas. This code will return an object with properties: - * - * spinX -- normalized spin speed (use for zoom) - x plane - * spinY -- " - y plane - * pixelX -- normalized distance (to pixels) - x plane - * pixelY -- " - y plane - * - * Wheel values are provided by the browser assuming you are using the wheel to - * scroll a web page by a number of lines or pixels (or pages). Values can vary - * significantly on different platforms and browsers, forgetting that you can - * scroll at different speeds. Some devices (like trackpads) emit more events - * at smaller increments with fine granularity, and some emit massive jumps with - * linear speed or acceleration. - * - * This code does its best to normalize the deltas for you: - * - * - spin is trying to normalize how far the wheel was spun (or trackpad - * dragged). This is super useful for zoom support where you want to - * throw away the chunky scroll steps on the PC and make those equal to - * the slow and smooth tiny steps on the Mac. Key data: This code tries to - * resolve a single slow step on a wheel to 1. - * - * - pixel is normalizing the desired scroll delta in pixel units. You'll - * get the crazy differences between browsers, but at least it'll be in - * pixels! - * - * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This - * should translate to positive value zooming IN, negative zooming OUT. - * This matches the newer 'wheel' event. - * - * Why are there spinX, spinY (or pixels)? - * - * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn - * with a mouse. It results in side-scrolling in the browser by default. - * - * - spinY is what you expect -- it's the classic axis of a mouse wheel. - * - * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and - * probably is by browsers in conjunction with fancy 3D controllers .. but - * you know. - * - * Implementation info: - * - * Examples of 'wheel' event if you scroll slowly (down) by one step with an - * average mouse: - * - * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120) - * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12) - * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A) - * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120) - * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120) - * - * On the trackpad: - * - * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6) - * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A) - * - * On other/older browsers.. it's more complicated as there can be multiple and - * also missing delta values. - * - * The 'wheel' event is more standard: - * - * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents - * - * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and - * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain - * backward compatibility with older events. Those other values help us - * better normalize spin speed. Example of what the browsers provide: - * - * | event.wheelDelta | event.detail - * ------------------+------------------+-------------- - * Safari v5/OS X | -120 | 0 - * Safari v5/Win7 | -120 | 0 - * Chrome v17/OS X | -120 | 0 - * Chrome v17/Win7 | -120 | 0 - * IE9/Win7 | -120 | undefined - * Firefox v4/OS X | undefined | 1 - * Firefox v4/Win7 | undefined | 3 - * - */ - function normalizeWheel( /*object*/ event ) /*object*/ { - // Reasonable defaults - var PIXEL_STEP = 10; - var LINE_HEIGHT = 40; - var PAGE_HEIGHT = 800; - - var sX = 0, sY = 0, // spinX, spinY - pX = 0, pY = 0; // pixelX, pixelY - - // Legacy - if( 'detail' in event ) { - sY = event.detail; - } - if( 'wheelDelta' in event ) { - sY = -event.wheelDelta / 120; - } - if( 'wheelDeltaY' in event ) { - sY = -event.wheelDeltaY / 120; - } - if( 'wheelDeltaX' in event ) { - sX = -event.wheelDeltaX / 120; - } - - // side scrolling on FF with DOMMouseScroll - if( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) { - sX = sY; - sY = 0; - } - - pX = sX * PIXEL_STEP; - pY = sY * PIXEL_STEP; - - if( 'deltaY' in event ) { - pY = event.deltaY; - } - if( 'deltaX' in event ) { - pX = event.deltaX; - } - - if( (pX || pY) && event.deltaMode ) { - if( event.deltaMode === 1 ) { // delta in LINE units - pX *= LINE_HEIGHT; - pY *= LINE_HEIGHT; - } else { // delta in PAGE units - pX *= PAGE_HEIGHT; - pY *= PAGE_HEIGHT; - } - } - - // Fall-back if spin cannot be determined - if( pX && !sX ) { - sX = (pX < 1) ? -1 : 1; - } - if( pY && !sY ) { - sY = (pY < 1) ? -1 : 1; - } - - return { - spinX: sX, - spinY: sY, - pixelX: pX, - pixelY: pY - }; - } - if (s.params.mousewheelControl) { - /** - * The best combination if you prefer spinX + spinY normalization. It favors - * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with - * 'wheel' event, making spin speed determination impossible. - */ - s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ? - 'DOMMouseScroll' : - isEventSupported() ? - 'wheel' : 'mousewheel'; - } - function handleMousewheel(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var delta = 0; - var rtlFactor = s.rtl ? -1 : 1; - - var data = normalizeWheel( e ); - - if (s.params.mousewheelForceToAxis) { - if (s.isHorizontal()) { - if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor; - else return; - } - else { - if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY; - else return; - } - } - else { - delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY; - } - - if (delta === 0) return; - - if (s.params.mousewheelInvert) delta = -delta; - - if (!s.params.freeMode) { - if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { - if (delta < 0) { - if ((!s.isEnd || s.params.loop) && !s.animating) { - s.slideNext(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - else { - if ((!s.isBeginning || s.params.loop) && !s.animating) { - s.slidePrev(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - } - s.mousewheel.lastScrollTime = (new window.Date()).getTime(); - - } - else { - //Freemode or scrollContainer: - var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; - var wasBeginning = s.isBeginning, - wasEnd = s.isEnd; - - if (position >= s.minTranslate()) position = s.minTranslate(); - if (position <= s.maxTranslate()) position = s.maxTranslate(); - - s.setWrapperTransition(0); - s.setWrapperTranslate(position); - s.updateProgress(); - s.updateActiveIndex(); - - if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { - s.updateClasses(); - } - - if (s.params.freeModeSticky) { - clearTimeout(s.mousewheel.timeout); - s.mousewheel.timeout = setTimeout(function () { - s.slideReset(); - }, 300); - } - else { - if (s.params.lazyLoading && s.lazy) { - s.lazy.load(); - } - } - // Emit event - s.emit('onScroll', s, e); - - // Stop autoplay - if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay(); - - // Return page scroll on edge positions - if (position === 0 || position === s.maxTranslate()) return; - } - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - return false; - } - s.disableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.off(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = false; - return true; - }; - - s.enableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.on(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = true; - return true; - }; - - - /*========================= - Parallax - ===========================*/ - function setParallaxTransform(el, progress) { - el = $(el); - var p, pX, pY; - var rtlFactor = s.rtl ? -1 : 1; - - p = el.attr('data-swiper-parallax') || '0'; - pX = el.attr('data-swiper-parallax-x'); - pY = el.attr('data-swiper-parallax-y'); - if (pX || pY) { - pX = pX || '0'; - pY = pY || '0'; - } - else { - if (s.isHorizontal()) { - pX = p; - pY = '0'; - } - else { - pY = p; - pX = '0'; - } - } - - if ((pX).indexOf('%') >= 0) { - pX = parseInt(pX, 10) * progress * rtlFactor + '%'; - } - else { - pX = pX * progress * rtlFactor + 'px' ; - } - if ((pY).indexOf('%') >= 0) { - pY = parseInt(pY, 10) * progress + '%'; - } - else { - pY = pY * progress + 'px' ; - } - - el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); - } - s.parallax = { - setTranslate: function () { - s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - setParallaxTransform(this, s.progress); - - }); - s.slides.each(function () { - var slide = $(this); - slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { - var progress = Math.min(Math.max(slide[0].progress, -1), 1); - setParallaxTransform(this, progress); - }); - }); - }, - setTransition: function (duration) { - if (typeof duration === 'undefined') duration = s.params.speed; - s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - var el = $(this); - var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; - if (duration === 0) parallaxDuration = 0; - el.transition(parallaxDuration); - }); - } - }; - - - /*========================= - Zoom - ===========================*/ - s.zoom = { - // "Global" Props - scale: 1, - currentScale: 1, - isScaling: false, - gesture: { - slide: undefined, - slideWidth: undefined, - slideHeight: undefined, - image: undefined, - imageWrap: undefined, - zoomMax: s.params.zoomMax - }, - image: { - isTouched: undefined, - isMoved: undefined, - currentX: undefined, - currentY: undefined, - minX: undefined, - minY: undefined, - maxX: undefined, - maxY: undefined, - width: undefined, - height: undefined, - startX: undefined, - startY: undefined, - touchesStart: {}, - touchesCurrent: {} - }, - velocity: { - x: undefined, - y: undefined, - prevPositionX: undefined, - prevPositionY: undefined, - prevTime: undefined - }, - // Calc Scale From Multi-touches - getDistanceBetweenTouches: function (e) { - if (e.targetTouches.length < 2) return 1; - var x1 = e.targetTouches[0].pageX, - y1 = e.targetTouches[0].pageY, - x2 = e.targetTouches[1].pageX, - y2 = e.targetTouches[1].pageY; - var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); - return distance; - }, - // Events - onGestureStart: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleStart = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.slide || !z.gesture.slide.length) { - z.gesture.slide = $(this); - if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ; - if (z.gesture.imageWrap.length === 0) { - z.gesture.image = undefined; - return; - } - } - z.gesture.image.transition(0); - z.isScaling = true; - }, - onGestureChange: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleMove = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (s.support.gestures) { - z.scale = e.scale * z.currentScale; - } - else { - z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale; - } - if (z.scale > z.gesture.zoomMax) { - z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5); - } - if (z.scale < s.params.zoomMin) { - z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5); - } - z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')'); - }, - onGestureEnd: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) { - return; - } - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin); - z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - z.currentScale = z.scale; - z.isScaling = false; - if (z.scale === 1) z.gesture.slide = undefined; - }, - onTouchStart: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (z.image.isTouched) return; - if (s.device.os === 'android') e.preventDefault(); - z.image.isTouched = true; - z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - }, - onTouchMove: function (e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - s.allowClick = false; - if (!z.image.isTouched || !z.gesture.slide) return; - - if (!z.image.isMoved) { - z.image.width = z.gesture.image[0].offsetWidth; - z.image.height = z.gesture.image[0].offsetHeight; - z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0; - z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0; - z.gesture.slideWidth = z.gesture.slide[0].offsetWidth; - z.gesture.slideHeight = z.gesture.slide[0].offsetHeight; - z.gesture.imageWrap.transition(0); - if (s.rtl) z.image.startX = -z.image.startX; - if (s.rtl) z.image.startY = -z.image.startY; - } - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - - if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return; - - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - - z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (!z.image.isMoved && !z.isScaling) { - if (s.isHorizontal() && - (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) || - (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x) - ) { - z.image.isTouched = false; - return; - } - else if (!s.isHorizontal() && - (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) || - (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y) - ) { - z.image.isTouched = false; - return; - } - } - e.preventDefault(); - e.stopPropagation(); - - z.image.isMoved = true; - z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX; - z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY; - - if (z.image.currentX < z.image.minX) { - z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8); - } - if (z.image.currentX > z.image.maxX) { - z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8); - } - - if (z.image.currentY < z.image.minY) { - z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8); - } - if (z.image.currentY > z.image.maxY) { - z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8); - } - - //Velocity - if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x; - if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y; - if (!z.velocity.prevTime) z.velocity.prevTime = Date.now(); - z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2; - z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2; - if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0; - if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0; - z.velocity.prevPositionX = z.image.touchesCurrent.x; - z.velocity.prevPositionY = z.image.touchesCurrent.y; - z.velocity.prevTime = Date.now(); - - z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTouchEnd: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (!z.image.isTouched || !z.image.isMoved) { - z.image.isTouched = false; - z.image.isMoved = false; - return; - } - z.image.isTouched = false; - z.image.isMoved = false; - var momentumDurationX = 300; - var momentumDurationY = 300; - var momentumDistanceX = z.velocity.x * momentumDurationX; - var newPositionX = z.image.currentX + momentumDistanceX; - var momentumDistanceY = z.velocity.y * momentumDurationY; - var newPositionY = z.image.currentY + momentumDistanceY; - - //Fix duration - if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x); - if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y); - var momentumDuration = Math.max(momentumDurationX, momentumDurationY); - - z.image.currentX = newPositionX; - z.image.currentY = newPositionY; - - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX); - z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY); - - z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTransitionEnd: function (s) { - var z = s.zoom; - if (z.gesture.slide && s.previousIndex !== s.activeIndex) { - z.gesture.image.transform('translate3d(0,0,0) scale(1)'); - z.gesture.imageWrap.transform('translate3d(0,0,0)'); - z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined; - z.scale = z.currentScale = 1; - } - }, - // Toggle Zoom - toggleZoom: function (s, e) { - var z = s.zoom; - if (!z.gesture.slide) { - z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - - var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight; - - if (typeof z.image.touchesStart.x === 'undefined' && e) { - touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; - touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; - } - else { - touchX = z.image.touchesStart.x; - touchY = z.image.touchesStart.y; - } - - if (z.scale && z.scale !== 1) { - // Zoom Out - z.scale = z.currentScale = 1; - z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)'); - z.gesture.slide = undefined; - } - else { - // Zoom In - z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax; - if (e) { - slideWidth = z.gesture.slide[0].offsetWidth; - slideHeight = z.gesture.slide[0].offsetHeight; - offsetX = z.gesture.slide.offset().left; - offsetY = z.gesture.slide.offset().top; - diffX = offsetX + slideWidth/2 - touchX; - diffY = offsetY + slideHeight/2 - touchY; - - imageWidth = z.gesture.image[0].offsetWidth; - imageHeight = z.gesture.image[0].offsetHeight; - scaledWidth = imageWidth * z.scale; - scaledHeight = imageHeight * z.scale; - - translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0); - translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0); - translateMaxX = -translateMinX; - translateMaxY = -translateMinY; - - translateX = diffX * z.scale; - translateY = diffY * z.scale; - - if (translateX < translateMinX) { - translateX = translateMinX; - } - if (translateX > translateMaxX) { - translateX = translateMaxX; - } - - if (translateY < translateMinY) { - translateY = translateMinY; - } - if (translateY > translateMaxY) { - translateY = translateMaxY; - } - } - else { - translateX = 0; - translateY = 0; - } - z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - } - }, - // Attach/Detach Events - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - - if (s.params.zoom) { - var target = s.slides; - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - // Scale image - if (s.support.gestures) { - s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener); - s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener); - s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener); - } - else if (s.touchEvents.start === 'touchstart') { - s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener); - s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener); - s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener); - } - - // Move image - s[action]('touchStart', s.zoom.onTouchStart); - s.slides.each(function (index, slide){ - if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) { - $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove); - } - }); - s[action]('touchEnd', s.zoom.onTouchEnd); - - // Scale Out - s[action]('transitionEnd', s.zoom.onTransitionEnd); - if (s.params.zoomToggle) { - s.on('doubleTap', s.zoom.toggleZoom); - } - } - }, - init: function () { - s.zoom.attachEvents(); - }, - destroy: function () { - s.zoom.attachEvents(true); - } - }; - - - /*========================= - Plugins API. Collect all and init all plugins - ===========================*/ - s._plugins = []; - for (var plugin in s.plugins) { - var p = s.plugins[plugin](s, s.params[plugin]); - if (p) s._plugins.push(p); - } - // Method to call all plugins event/method - s.callPlugins = function (eventName) { - for (var i = 0; i < s._plugins.length; i++) { - if (eventName in s._plugins[i]) { - s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - }; - - - /*========================= - Events/Callbacks/Plugins Emitter - ===========================*/ - function normalizeEventName (eventName) { - if (eventName.indexOf('on') !== 0) { - if (eventName[0] !== eventName[0].toUpperCase()) { - eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); - } - else { - eventName = 'on' + eventName; - } - } - return eventName; - } - s.emitterEventListeners = { - - }; - s.emit = function (eventName) { - // Trigger callbacks - if (s.params[eventName]) { - s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - var i; - // Trigger events - if (s.emitterEventListeners[eventName]) { - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - // Trigger plugins - if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - }; - s.on = function (eventName, handler) { - eventName = normalizeEventName(eventName); - if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; - s.emitterEventListeners[eventName].push(handler); - return s; - }; - s.off = function (eventName, handler) { - var i; - eventName = normalizeEventName(eventName); - if (typeof handler === 'undefined') { - // Remove all handlers for such event - s.emitterEventListeners[eventName] = []; - return s; - } - if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); - } - return s; - }; - s.once = function (eventName, handler) { - eventName = normalizeEventName(eventName); - var _handler = function () { - handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); - s.off(eventName, _handler); - }; - s.on(eventName, _handler); - return s; - }; - - - // Accessibility tools - s.a11y = { - makeFocusable: function ($el) { - $el.attr('tabIndex', '0'); - return $el; - }, - addRole: function ($el, role) { - $el.attr('role', role); - return $el; - }, - - addLabel: function ($el, label) { - $el.attr('aria-label', label); - return $el; - }, - - disable: function ($el) { - $el.attr('aria-disabled', true); - return $el; - }, - - enable: function ($el) { - $el.attr('aria-disabled', false); - return $el; - }, - - onEnterKey: function (event) { - if (event.keyCode !== 13) return; - if ($(event.target).is(s.params.nextButton)) { - s.onClickNext(event); - if (s.isEnd) { - s.a11y.notify(s.params.lastSlideMessage); - } - else { - s.a11y.notify(s.params.nextSlideMessage); - } - } - else if ($(event.target).is(s.params.prevButton)) { - s.onClickPrev(event); - if (s.isBeginning) { - s.a11y.notify(s.params.firstSlideMessage); - } - else { - s.a11y.notify(s.params.prevSlideMessage); - } - } - if ($(event.target).is('.' + s.params.bulletClass)) { - $(event.target)[0].click(); - } - }, - - liveRegion: $(''), - - notify: function (message) { - var notification = s.a11y.liveRegion; - if (notification.length === 0) return; - notification.html(''); - notification.html(message); - }, - init: function () { - // Setup accessibility - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.a11y.makeFocusable(s.nextButton); - s.a11y.addRole(s.nextButton, 'button'); - s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.a11y.makeFocusable(s.prevButton); - s.a11y.addRole(s.prevButton, 'button'); - s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); - } - - $(s.container).append(s.a11y.liveRegion); - }, - initPagination: function () { - if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { - s.bullets.each(function () { - var bullet = $(this); - s.a11y.makeFocusable(bullet); - s.a11y.addRole(bullet, 'button'); - s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); - }); - } - }, - destroy: function () { - if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); - } - }; - - - /*========================= - Init/Destroy - ===========================*/ - s.init = function () { - if (s.params.loop) s.createLoop(); - s.updateContainerSize(); - s.updateSlidesSize(); - s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - if (s.params.scrollbarDraggable) { - s.scrollbar.enableDraggable(); - } - } - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - if (!s.params.loop) s.updateProgress(); - s.effects[s.params.effect].setTranslate(); - } - if (s.params.loop) { - s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); - } - else { - s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); - if (s.params.initialSlide === 0) { - if (s.parallax && s.params.parallax) s.parallax.setTranslate(); - if (s.lazy && s.params.lazyLoading) { - s.lazy.load(); - s.lazy.initialImageLoaded = true; - } - } - } - s.attachEvents(); - if (s.params.observer && s.support.observer) { - s.initObservers(); - } - if (s.params.preloadImages && !s.params.lazyLoading) { - s.preloadImages(); - } - if (s.params.zoom && s.zoom) { - s.zoom.init(); - } - if (s.params.autoplay) { - s.startAutoplay(); - } - if (s.params.keyboardControl) { - if (s.enableKeyboardControl) s.enableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.enableMousewheelControl) s.enableMousewheelControl(); - } - // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history - if (s.params.hashnavReplaceState) { - s.params.replaceState = s.params.hashnavReplaceState; - } - if (s.params.history) { - if (s.history) s.history.init(); - } - if (s.params.hashnav) { - if (s.hashnav) s.hashnav.init(); - } - if (s.params.a11y && s.a11y) s.a11y.init(); - s.emit('onInit', s); - }; - - // Cleanup dynamic styles - s.cleanupStyles = function () { - // Container - s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); - - // Wrapper - s.wrapper.removeAttr('style'); - - // Slides - if (s.slides && s.slides.length) { - s.slides - .removeClass([ - s.params.slideVisibleClass, - s.params.slideActiveClass, - s.params.slideNextClass, - s.params.slidePrevClass - ].join(' ')) - .removeAttr('style') - .removeAttr('data-swiper-column') - .removeAttr('data-swiper-row'); - } - - // Pagination/Bullets - if (s.paginationContainer && s.paginationContainer.length) { - s.paginationContainer.removeClass(s.params.paginationHiddenClass); - } - if (s.bullets && s.bullets.length) { - s.bullets.removeClass(s.params.bulletActiveClass); - } - - // Buttons - if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); - if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); - - // Scrollbar - if (s.params.scrollbar && s.scrollbar) { - if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); - if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); - } - }; - - // Destroy - s.destroy = function (deleteInstance, cleanupStyles) { - // Detach evebts - s.detachEvents(); - // Stop autoplay - s.stopAutoplay(); - // Disable draggable - if (s.params.scrollbar && s.scrollbar) { - if (s.params.scrollbarDraggable) { - s.scrollbar.disableDraggable(); - } - } - // Destroy loop - if (s.params.loop) { - s.destroyLoop(); - } - // Cleanup styles - if (cleanupStyles) { - s.cleanupStyles(); - } - // Disconnect observer - s.disconnectObservers(); - - // Destroy zoom - if (s.params.zoom && s.zoom) { - s.zoom.destroy(); - } - // Disable keyboard/mousewheel - if (s.params.keyboardControl) { - if (s.disableKeyboardControl) s.disableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.disableMousewheelControl) s.disableMousewheelControl(); - } - // Disable a11y - if (s.params.a11y && s.a11y) s.a11y.destroy(); - // Delete history popstate - if (s.params.history && !s.params.replaceState) { - window.removeEventListener('popstate', s.history.setHistoryPopState); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.destroy(); - } - // Destroy callback - s.emit('onDestroy'); - // Delete instance - if (deleteInstance !== false) s = null; - }; - - s.init(); - - - - // Return swiper instance - return s; - }; - - - /*================================================== - Prototype - ====================================================*/ - Swiper.prototype = { - isSafari: (function () { - var ua = window.navigator.userAgent.toLowerCase(); - return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); - })(), - isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent), - isArray: function (arr) { - return Object.prototype.toString.apply(arr) === '[object Array]'; - }, - /*================================================== - Browser - ====================================================*/ - browser: { - ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, - ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1), - lteIE9: (function() { - // create temporary DIV - var div = document.createElement('div'); - // add content to tmp DIV which is wrapped into the IE HTML conditional statement - div.innerHTML = ''; - // return true / false value based on what will browser render - return div.getElementsByTagName('i').length === 1; - })() - }, - /*================================================== - Devices - ====================================================*/ - device: (function () { - var ua = window.navigator.userAgent; - var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); - var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); - var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); - var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); - return { - ios: ipad || iphone || ipod, - android: android - }; - })(), - /*================================================== - Feature Detection - ====================================================*/ - support: { - touch : (window.Modernizr && Modernizr.touch === true) || (function () { - return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); - })(), - - transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { - var div = document.createElement('div').style; - return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); - })(), - - flexbox: (function () { - var div = document.createElement('div').style; - var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); - for (var i = 0; i < styles.length; i++) { - if (styles[i] in div) return true; - } - })(), - - observer: (function () { - return ('MutationObserver' in window || 'WebkitMutationObserver' in window); - })(), - - passiveListener: (function () { - var supportsPassive = false; - try { - var opts = Object.defineProperty({}, 'passive', { - get: function() { - supportsPassive = true; - } - }); - window.addEventListener('testPassiveListener', null, opts); - } catch (e) {} - return supportsPassive; - })(), - - gestures: (function () { - return 'ongesturestart' in window; - })() - }, - /*================================================== - Plugins - ====================================================*/ - plugins: {} - }; - - - /*=========================== - Get Dom libraries - ===========================*/ - var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7']; - for (var i = 0; i < swiperDomPlugins.length; i++) { - if (window[swiperDomPlugins[i]]) { - addLibraryPlugin(window[swiperDomPlugins[i]]); - } - } - // Required DOM Plugins - var domLib; - if (typeof Dom7 === 'undefined') { - domLib = window.Dom7 || window.Zepto || window.jQuery; - } - else { - domLib = Dom7; - } - - - /*=========================== - Add .swiper plugin from Dom libraries - ===========================*/ - function addLibraryPlugin(lib) { - lib.fn.swiper = function (params) { - var firstInstance; - lib(this).each(function () { - var s = new Swiper(this, params); - if (!firstInstance) firstInstance = s; - }); - return firstInstance; - }; - } - - if (domLib) { - if (!('transitionEnd' in domLib.fn)) { - domLib.fn.transitionEnd = function (callback) { - var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], - i, j, dom = this; - function fireCallBack(e) { - /*jshint validthis:true */ - if (e.target !== this) return; - callback.call(this, e); - for (i = 0; i < events.length; i++) { - dom.off(events[i], fireCallBack); - } - } - if (callback) { - for (i = 0; i < events.length; i++) { - dom.on(events[i], fireCallBack); - } - } - return this; - }; - } - if (!('transform' in domLib.fn)) { - domLib.fn.transform = function (transform) { - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; - } - return this; - }; - } - if (!('transition' in domLib.fn)) { - domLib.fn.transition = function (duration) { - if (typeof duration !== 'string') { - duration = duration + 'ms'; - } - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; - } - return this; - }; - } - if (!('outerWidth' in domLib.fn)) { - domLib.fn.outerWidth = function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); - else - return this[0].offsetWidth; - } - else return null; - }; - } - } - - - window.Swiper = Swiper; -})(); - -/*=========================== -Swiper AMD Export -===========================*/ -if (typeof(module) !== 'undefined') -{ - module.exports = window.Swiper; -} -else if (typeof define === 'function' && define.amd) { - define([], function () { - 'use strict'; - return window.Swiper; - }); -} - -//# sourceMappingURL=maps/swiper.jquery.js.map diff --git a/dist/js/swiper.jquery.min.js b/dist/js/swiper.jquery.min.js deleted file mode 100644 index 3d379c7b4..000000000 --- a/dist/js/swiper.jquery.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -!function(){"use strict";var e,a=function(t,s){function r(e){return Math.floor(e)}function i(){var e=x.params.autoplay,a=x.slides.eq(x.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||x.params.autoplay),x.autoplayTimeoutId=setTimeout(function(){x.params.loop?(x.fixLoop(),x._slideNext(),x.emit("onAutoplay",x)):x.isEnd?s.autoplayStopOnLast?x.stopAutoplay():(x._slideTo(0),x.emit("onAutoplay",x)):(x._slideNext(),x.emit("onAutoplay",x))},e)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){x.onResize(!0),x.emit("onObserverUpdate",x,e)})});s.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),x.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!x.params.allowSwipeToNext&&(x.isHorizontal()&&39===a||!x.isHorizontal()&&40===a))return!1;if(!x.params.allowSwipeToPrev&&(x.isHorizontal()&&37===a||!x.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(x.container.parents("."+x.params.slideClass).length>0&&0===x.container.parents("."+x.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=x.container.offset();x.rtl&&(n.left=n.left-x.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+x.width,n.top],[n.left,n.top+x.height],[n.left+x.width,n.top+x.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}x.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!x.rtl||37===a&&x.rtl)&&x.slideNext(),(37===a&&!x.rtl||39===a&&x.rtl)&&x.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&x.slideNext(),38===a&&x.slidePrev()),x.emit("onKeyPress",x,a)}}function p(e){var a=0,t=0,s=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,r=10*t,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||r)&&e.deltaMode&&(1===e.deltaMode?(s*=40,r*=40):(s*=800,r*=800)),s&&!a&&(a=s<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:r}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=x.rtl?-1:1,s=p(e);if(x.params.mousewheelForceToAxis)if(x.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(x.params.mousewheelInvert&&(a=-a),x.params.freeMode){var r=x.getWrapperTranslate()+a*x.params.mousewheelSensitivity,i=x.isBeginning,n=x.isEnd;if(r>=x.minTranslate()&&(r=x.minTranslate()),r<=x.maxTranslate()&&(r=x.maxTranslate()),x.setWrapperTransition(0),x.setWrapperTranslate(r),x.updateProgress(),x.updateActiveIndex(),(!i&&x.isBeginning||!n&&x.isEnd)&&x.updateClasses(),x.params.freeModeSticky?(clearTimeout(x.mousewheel.timeout),x.mousewheel.timeout=setTimeout(function(){x.slideReset()},300)):x.params.lazyLoading&&x.lazy&&x.lazy.load(),x.emit("onScroll",x,e),x.params.autoplay&&x.params.autoplayDisableOnInteraction&&x.stopAutoplay(),0===r||r===x.maxTranslate())return}else{if((new window.Date).getTime()-x.mousewheel.lastScrollTime>60)if(a<0)if(x.isEnd&&!x.params.loop||x.animating){if(x.params.mousewheelReleaseOnEdges)return!0}else x.slideNext(),x.emit("onScroll",x,e);else if(x.isBeginning&&!x.params.loop||x.animating){if(x.params.mousewheelReleaseOnEdges)return!0}else x.slidePrev(),x.emit("onScroll",x,e);x.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function m(a,t){a=e(a);var s,r,i,n=x.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):x.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(t,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=s&&s.virtualTranslate;s=s||{};var h={};for(var v in s)if("object"!=typeof s[v]||null===s[v]||(s[v].nodeType||s[v]===window||s[v]===document||"undefined"!=typeof Dom7&&s[v]instanceof Dom7||"undefined"!=typeof jQuery&&s[v]instanceof jQuery))h[v]=s[v];else{h[v]={};for(var f in s[v])h[v][f]=s[v][f]}for(var w in c)if(void 0===s[w])s[w]=c[w];else if("object"==typeof s[w])for(var y in c[w])void 0===s[w][y]&&(s[w][y]=c[w][y]);var x=this;if(x.params=s,x.originalParams=h,x.classNames=[],void 0!==e&&"undefined"!=typeof Dom7&&(e=Dom7),(void 0!==e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(x.$=e,x.currentBreakpoint=void 0,x.getActiveBreakpoint=function(){if(!x.params.breakpoints)return!1;var e,a=!1,t=[];for(e in x.params.breakpoints)x.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},x.setBreakpoint=function(){var e=x.getActiveBreakpoint();if(e&&x.currentBreakpoint!==e){var a=e in x.params.breakpoints?x.params.breakpoints[e]:x.originalParams,t=x.params.loop&&a.slidesPerView!==x.params.slidesPerView;for(var s in a)x.params[s]=a[s];x.currentBreakpoint=e,t&&x.destroyLoop&&x.reLoop(!0)}},x.params.breakpoints&&x.setBreakpoint(),x.container=e(t),0!==x.container.length)){if(x.container.length>1){var T=[];return x.container.each(function(){T.push(new a(this,s))}),T}x.container[0].swiper=x,x.container.data("swiper",x),x.classNames.push(x.params.containerModifierClass+x.params.direction),x.params.freeMode&&x.classNames.push(x.params.containerModifierClass+"free-mode"),x.support.flexbox||(x.classNames.push(x.params.containerModifierClass+"no-flexbox"),x.params.slidesPerColumn=1),x.params.autoHeight&&x.classNames.push(x.params.containerModifierClass+"autoheight"),(x.params.parallax||x.params.watchSlidesVisibility)&&(x.params.watchSlidesProgress=!0),x.params.touchReleaseOnEdges&&(x.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(x.params.effect)>=0&&(x.support.transforms3d?(x.params.watchSlidesProgress=!0,x.classNames.push(x.params.containerModifierClass+"3d")):x.params.effect="slide"),"slide"!==x.params.effect&&x.classNames.push(x.params.containerModifierClass+x.params.effect),"cube"===x.params.effect&&(x.params.resistanceRatio=0,x.params.slidesPerView=1,x.params.slidesPerColumn=1,x.params.slidesPerGroup=1,x.params.centeredSlides=!1,x.params.spaceBetween=0,x.params.virtualTranslate=!0),"fade"!==x.params.effect&&"flip"!==x.params.effect||(x.params.slidesPerView=1,x.params.slidesPerColumn=1,x.params.slidesPerGroup=1,x.params.watchSlidesProgress=!0,x.params.spaceBetween=0,void 0===g&&(x.params.virtualTranslate=!0)),x.params.grabCursor&&x.support.touch&&(x.params.grabCursor=!1),x.wrapper=x.container.children("."+x.params.wrapperClass),x.params.pagination&&(x.paginationContainer=e(x.params.pagination),x.params.uniqueNavElements&&"string"==typeof x.params.pagination&&x.paginationContainer.length>1&&1===x.container.find(x.params.pagination).length&&(x.paginationContainer=x.container.find(x.params.pagination)),"bullets"===x.params.paginationType&&x.params.paginationClickable?x.paginationContainer.addClass(x.params.paginationModifierClass+"clickable"):x.params.paginationClickable=!1,x.paginationContainer.addClass(x.params.paginationModifierClass+x.params.paginationType)),(x.params.nextButton||x.params.prevButton)&&(x.params.nextButton&&(x.nextButton=e(x.params.nextButton),x.params.uniqueNavElements&&"string"==typeof x.params.nextButton&&x.nextButton.length>1&&1===x.container.find(x.params.nextButton).length&&(x.nextButton=x.container.find(x.params.nextButton))),x.params.prevButton&&(x.prevButton=e(x.params.prevButton),x.params.uniqueNavElements&&"string"==typeof x.params.prevButton&&x.prevButton.length>1&&1===x.container.find(x.params.prevButton).length&&(x.prevButton=x.container.find(x.params.prevButton)))),x.isHorizontal=function(){return"horizontal"===x.params.direction},x.rtl=x.isHorizontal()&&("rtl"===x.container[0].dir.toLowerCase()||"rtl"===x.container.css("direction")),x.rtl&&x.classNames.push(x.params.containerModifierClass+"rtl"),x.rtl&&(x.wrongRTL="-webkit-box"===x.wrapper.css("display")),x.params.slidesPerColumn>1&&x.classNames.push(x.params.containerModifierClass+"multirow"),x.device.android&&x.classNames.push(x.params.containerModifierClass+"android"),x.container.addClass(x.classNames.join(" ")),x.translate=0,x.progress=0,x.velocity=0,x.lockSwipeToNext=function(){x.params.allowSwipeToNext=!1,x.params.allowSwipeToPrev===!1&&x.params.grabCursor&&x.unsetGrabCursor()},x.lockSwipeToPrev=function(){x.params.allowSwipeToPrev=!1,x.params.allowSwipeToNext===!1&&x.params.grabCursor&&x.unsetGrabCursor()},x.lockSwipes=function(){x.params.allowSwipeToNext=x.params.allowSwipeToPrev=!1,x.params.grabCursor&&x.unsetGrabCursor()},x.unlockSwipeToNext=function(){x.params.allowSwipeToNext=!0,x.params.allowSwipeToPrev===!0&&x.params.grabCursor&&x.setGrabCursor()},x.unlockSwipeToPrev=function(){x.params.allowSwipeToPrev=!0,x.params.allowSwipeToNext===!0&&x.params.grabCursor&&x.setGrabCursor()},x.unlockSwipes=function(){x.params.allowSwipeToNext=x.params.allowSwipeToPrev=!0,x.params.grabCursor&&x.setGrabCursor()},x.setGrabCursor=function(e){x.container[0].style.cursor="move",x.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",x.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",x.container[0].style.cursor=e?"grabbing":"grab"},x.unsetGrabCursor=function(){x.container[0].style.cursor=""},x.params.grabCursor&&x.setGrabCursor(),x.imagesToLoad=[],x.imagesLoaded=0,x.loadImage=function(e,a,t,s,r,i){function n(){i&&i()}var o;e.complete&&r?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},x.preloadImages=function(){function e(){void 0!==x&&null!==x&&x&&(void 0!==x.imagesLoaded&&x.imagesLoaded++,x.imagesLoaded===x.imagesToLoad.length&&(x.params.updateOnImagesReady&&x.update(),x.emit("onImagesReady",x)))}x.imagesToLoad=x.container.find("img");for(var a=0;a1)for(e=0;ex.slides.length)break;a.push(x.slides.eq(s)[0])}else a.push(x.slides.eq(x.activeIndex)[0]);for(e=0;et?r:t}t&&x.wrapper.css("height",t+"px")},x.updateContainerSize=function(){var e,a;e=void 0!==x.params.width?x.params.width:x.container[0].clientWidth,a=void 0!==x.params.height?x.params.height:x.container[0].clientHeight,0===e&&x.isHorizontal()||0===a&&!x.isHorizontal()||(e=e-parseInt(x.container.css("padding-left"),10)-parseInt(x.container.css("padding-right"),10),a=a-parseInt(x.container.css("padding-top"),10)-parseInt(x.container.css("padding-bottom"),10),x.width=e,x.height=a,x.size=x.isHorizontal()?x.width:x.height)},x.updateSlidesSize=function(){x.slides=x.wrapper.children("."+x.params.slideClass),x.snapGrid=[],x.slidesGrid=[],x.slidesSizesGrid=[];var e,a=x.params.spaceBetween,t=-x.params.slidesOffsetBefore,s=0,i=0;if(void 0!==x.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*x.size),x.virtualSize=-a,x.rtl?x.slides.css({marginLeft:"",marginTop:""}):x.slides.css({marginRight:"",marginBottom:""});var n;x.params.slidesPerColumn>1&&(n=Math.floor(x.slides.length/x.params.slidesPerColumn)===x.slides.length/x.params.slidesPerColumn?x.slides.length:Math.ceil(x.slides.length/x.params.slidesPerColumn)*x.params.slidesPerColumn,"auto"!==x.params.slidesPerView&&"row"===x.params.slidesPerColumnFill&&(n=Math.max(n,x.params.slidesPerView*x.params.slidesPerColumn)));var o,l=x.params.slidesPerColumn,p=n/l,d=p-(x.params.slidesPerColumn*p-x.slides.length);for(e=0;e1){var u,c,g;"column"===x.params.slidesPerColumnFill?(c=Math.floor(e/l),g=e-c*l,(c>d||c===d&&g===l-1)&&++g>=l&&(g=0,c++),u=c+g*n/l,m.css({"-webkit-box-ordinal-group":u,"-moz-box-ordinal-group":u,"-ms-flex-order":u,"-webkit-order":u,order:u})):(g=Math.floor(e/p),c=e-g*p),m.css("margin-"+(x.isHorizontal()?"top":"left"),0!==g&&x.params.spaceBetween&&x.params.spaceBetween+"px").attr("data-swiper-column",c).attr("data-swiper-row",g)}"none"!==m.css("display")&&("auto"===x.params.slidesPerView?(o=x.isHorizontal()?m.outerWidth(!0):m.outerHeight(!0),x.params.roundLengths&&(o=r(o))):(o=(x.size-(x.params.slidesPerView-1)*a)/x.params.slidesPerView,x.params.roundLengths&&(o=r(o)),x.isHorizontal()?x.slides[e].style.width=o+"px":x.slides[e].style.height=o+"px"),x.slides[e].swiperSlideSize=o,x.slidesSizesGrid.push(o),x.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-x.size/2-a),0===e&&(t=t-x.size/2-a),Math.abs(t)<.001&&(t=0),i%x.params.slidesPerGroup==0&&x.snapGrid.push(t),x.slidesGrid.push(t)):(i%x.params.slidesPerGroup==0&&x.snapGrid.push(t),x.slidesGrid.push(t),t=t+o+a),x.virtualSize+=o+a,s=o,i++)}x.virtualSize=Math.max(x.virtualSize,x.size)+x.params.slidesOffsetAfter;var h;if(x.rtl&&x.wrongRTL&&("slide"===x.params.effect||"coverflow"===x.params.effect)&&x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}),x.support.flexbox&&!x.params.setWrapperSize||(x.isHorizontal()?x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}):x.wrapper.css({height:x.virtualSize+x.params.spaceBetween+"px"})),x.params.slidesPerColumn>1&&(x.virtualSize=(o+x.params.spaceBetween)*n,x.virtualSize=Math.ceil(x.virtualSize/x.params.slidesPerColumn)-x.params.spaceBetween,x.isHorizontal()?x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}):x.wrapper.css({height:x.virtualSize+x.params.spaceBetween+"px"}),x.params.centeredSlides)){for(h=[],e=0;e1&&x.snapGrid.push(x.virtualSize-x.size)}0===x.snapGrid.length&&(x.snapGrid=[0]),0!==x.params.spaceBetween&&(x.isHorizontal()?x.rtl?x.slides.css({marginLeft:a+"px"}):x.slides.css({marginRight:a+"px"}):x.slides.css({marginBottom:a+"px"})),x.params.watchSlidesProgress&&x.updateSlidesOffset()}},x.updateSlidesOffset=function(){for(var e=0;ex.size&&(s=!0));for(a=x.activeIndex-1;a>=0;a--)x.slides[a]&&!s&&(r+=x.slides[a].swiperSlideSize,t++,r>x.size&&(s=!0))}else for(e=x.activeIndex+1;e=0&&i0&&n<=x.size||i<=0&&n>=x.size)&&x.slides.eq(t).addClass(x.params.slideVisibleClass)}s.progress=x.rtl?-r:r}}},x.updateProgress=function(e){void 0===e&&(e=x.translate||0);var a=x.maxTranslate()-x.minTranslate(),t=x.isBeginning,s=x.isEnd;0===a?(x.progress=0,x.isBeginning=x.isEnd=!0):(x.progress=(e-x.minTranslate())/a,x.isBeginning=x.progress<=0,x.isEnd=x.progress>=1),x.isBeginning&&!t&&x.emit("onReachBeginning",x),x.isEnd&&!s&&x.emit("onReachEnd",x),x.params.watchSlidesProgress&&x.updateSlidesProgress(e),x.emit("onProgress",x,x.progress)},x.updateActiveIndex=function(){var e,a,t,s=x.rtl?x.translate:-x.translate;for(a=0;a=x.slidesGrid[a]&&s=x.slidesGrid[a]&&s=x.slidesGrid[a]&&(e=a);x.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),t=Math.floor(e/x.params.slidesPerGroup),t>=x.snapGrid.length&&(t=x.snapGrid.length-1),e!==x.activeIndex&&(x.snapIndex=t,x.previousIndex=x.activeIndex,x.activeIndex=e,x.updateClasses(),x.updateRealIndex())},x.updateRealIndex=function(){x.realIndex=parseInt(x.slides.eq(x.activeIndex).attr("data-swiper-slide-index")||x.activeIndex,10)},x.updateClasses=function(){x.slides.removeClass(x.params.slideActiveClass+" "+x.params.slideNextClass+" "+x.params.slidePrevClass+" "+x.params.slideDuplicateActiveClass+" "+x.params.slideDuplicateNextClass+" "+x.params.slideDuplicatePrevClass);var a=x.slides.eq(x.activeIndex);a.addClass(x.params.slideActiveClass),s.loop&&(a.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+x.realIndex+'"]').addClass(x.params.slideDuplicateActiveClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+x.realIndex+'"]').addClass(x.params.slideDuplicateActiveClass));var t=a.next("."+x.params.slideClass).addClass(x.params.slideNextClass);x.params.loop&&0===t.length&&(t=x.slides.eq(0),t.addClass(x.params.slideNextClass));var r=a.prev("."+x.params.slideClass).addClass(x.params.slidePrevClass);if(x.params.loop&&0===r.length&&(r=x.slides.eq(-1),r.addClass(x.params.slidePrevClass)),s.loop&&(t.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicateNextClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicateNextClass),r.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicatePrevClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicatePrevClass)),x.paginationContainer&&x.paginationContainer.length>0){var i,n=x.params.loop?Math.ceil((x.slides.length-2*x.loopedSlides)/x.params.slidesPerGroup):x.snapGrid.length;if(x.params.loop?(i=Math.ceil((x.activeIndex-x.loopedSlides)/x.params.slidesPerGroup),i>x.slides.length-1-2*x.loopedSlides&&(i-=x.slides.length-2*x.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==x.params.paginationType&&(i=n+i)):i=void 0!==x.snapIndex?x.snapIndex:x.activeIndex||0,"bullets"===x.params.paginationType&&x.bullets&&x.bullets.length>0&&(x.bullets.removeClass(x.params.bulletActiveClass),x.paginationContainer.length>1?x.bullets.each(function(){e(this).index()===i&&e(this).addClass(x.params.bulletActiveClass)}):x.bullets.eq(i).addClass(x.params.bulletActiveClass)),"fraction"===x.params.paginationType&&(x.paginationContainer.find("."+x.params.paginationCurrentClass).text(i+1),x.paginationContainer.find("."+x.params.paginationTotalClass).text(n)),"progress"===x.params.paginationType){var o=(i+1)/n,l=o,p=1;x.isHorizontal()||(p=o,l=1),x.paginationContainer.find("."+x.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(x.params.speed)}"custom"===x.params.paginationType&&x.params.paginationCustomRender&&(x.paginationContainer.html(x.params.paginationCustomRender(x,i+1,n)),x.emit("onPaginationRendered",x,x.paginationContainer[0]))}x.params.loop||(x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.isBeginning?(x.prevButton.addClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.disable(x.prevButton)):(x.prevButton.removeClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.enable(x.prevButton))),x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.isEnd?(x.nextButton.addClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.disable(x.nextButton)):(x.nextButton.removeClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.enable(x.nextButton))))},x.updatePagination=function(){if(x.params.pagination&&x.paginationContainer&&x.paginationContainer.length>0){var e="";if("bullets"===x.params.paginationType){for(var a=x.params.loop?Math.ceil((x.slides.length-2*x.loopedSlides)/x.params.slidesPerGroup):x.snapGrid.length,t=0;t";x.paginationContainer.html(e),x.bullets=x.paginationContainer.find("."+x.params.bulletClass),x.params.paginationClickable&&x.params.a11y&&x.a11y&&x.a11y.initPagination()}"fraction"===x.params.paginationType&&(e=x.params.paginationFractionRender?x.params.paginationFractionRender(x,x.params.paginationCurrentClass,x.params.paginationTotalClass):' / ',x.paginationContainer.html(e)),"progress"===x.params.paginationType&&(e=x.params.paginationProgressRender?x.params.paginationProgressRender(x,x.params.paginationProgressbarClass):'',x.paginationContainer.html(e)),"custom"!==x.params.paginationType&&x.emit("onPaginationRendered",x,x.paginationContainer[0])}},x.update=function(e){function a(){x.rtl,x.translate;t=Math.min(Math.max(x.translate,x.maxTranslate()),x.minTranslate()),x.setWrapperTranslate(t),x.updateActiveIndex(),x.updateClasses()}if(x){x.updateContainerSize(),x.updateSlidesSize(),x.updateProgress(),x.updatePagination(),x.updateClasses(),x.params.scrollbar&&x.scrollbar&&x.scrollbar.set();var t;if(e){x.controller&&x.controller.spline&&(x.controller.spline=void 0),x.params.freeMode?(a(),x.params.autoHeight&&x.updateAutoHeight()):(("auto"===x.params.slidesPerView||x.params.slidesPerView>1)&&x.isEnd&&!x.params.centeredSlides?x.slideTo(x.slides.length-1,0,!1,!0):x.slideTo(x.activeIndex,0,!1,!0))||a()}else x.params.autoHeight&&x.updateAutoHeight()}},x.onResize=function(e){x.params.onBeforeResize&&x.params.onBeforeResize(x),x.params.breakpoints&&x.setBreakpoint();var a=x.params.allowSwipeToPrev,t=x.params.allowSwipeToNext;x.params.allowSwipeToPrev=x.params.allowSwipeToNext=!0,x.updateContainerSize(),x.updateSlidesSize(),("auto"===x.params.slidesPerView||x.params.freeMode||e)&&x.updatePagination(),x.params.scrollbar&&x.scrollbar&&x.scrollbar.set(),x.controller&&x.controller.spline&&(x.controller.spline=void 0);var s=!1;if(x.params.freeMode){var r=Math.min(Math.max(x.translate,x.maxTranslate()),x.minTranslate());x.setWrapperTranslate(r),x.updateActiveIndex(),x.updateClasses(),x.params.autoHeight&&x.updateAutoHeight()}else x.updateClasses(),s=("auto"===x.params.slidesPerView||x.params.slidesPerView>1)&&x.isEnd&&!x.params.centeredSlides?x.slideTo(x.slides.length-1,0,!1,!0):x.slideTo(x.activeIndex,0,!1,!0);x.params.lazyLoading&&!s&&x.lazy&&x.lazy.load(),x.params.allowSwipeToPrev=a,x.params.allowSwipeToNext=t,x.params.onAfterResize&&x.params.onAfterResize(x)},x.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?x.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(x.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),x.touchEvents={start:x.support.touch||!x.params.simulateTouch?"touchstart":x.touchEventsDesktop.start,move:x.support.touch||!x.params.simulateTouch?"touchmove":x.touchEventsDesktop.move,end:x.support.touch||!x.params.simulateTouch?"touchend":x.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===x.params.touchEventsTarget?x.container:x.wrapper).addClass("swiper-wp8-"+x.params.direction),x.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===x.params.touchEventsTarget?x.container[0]:x.wrapper[0],i=x.support.touch?r:document,n=!!x.params.nested;if(x.browser.ie)r[t](x.touchEvents.start,x.onTouchStart,!1),i[t](x.touchEvents.move,x.onTouchMove,n),i[t](x.touchEvents.end,x.onTouchEnd,!1);else{if(x.support.touch){var o=!("touchstart"!==x.touchEvents.start||!x.support.passiveListener||!x.params.passiveListeners)&&{passive:!0,capture:!1};r[t](x.touchEvents.start,x.onTouchStart,o),r[t](x.touchEvents.move,x.onTouchMove,n),r[t](x.touchEvents.end,x.onTouchEnd,o)}(s.simulateTouch&&!x.device.ios&&!x.device.android||s.simulateTouch&&!x.support.touch&&x.device.ios)&&(r[t]("mousedown",x.onTouchStart,!1),document[t]("mousemove",x.onTouchMove,n),document[t]("mouseup",x.onTouchEnd,!1))}window[t]("resize",x.onResize),x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.nextButton[a]("click",x.onClickNext),x.params.a11y&&x.a11y&&x.nextButton[a]("keydown",x.a11y.onEnterKey)),x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.prevButton[a]("click",x.onClickPrev),x.params.a11y&&x.a11y&&x.prevButton[a]("keydown",x.a11y.onEnterKey)),x.params.pagination&&x.params.paginationClickable&&(x.paginationContainer[a]("click","."+x.params.bulletClass,x.onClickIndex),x.params.a11y&&x.a11y&&x.paginationContainer[a]("keydown","."+x.params.bulletClass,x.a11y.onEnterKey)),(x.params.preventClicks||x.params.preventClicksPropagation)&&r[t]("click",x.preventClicks,!0)},x.attachEvents=function(){x.initEvents()},x.detachEvents=function(){x.initEvents(!0)},x.allowClick=!0,x.preventClicks=function(e){x.allowClick||(x.params.preventClicks&&e.preventDefault(),x.params.preventClicksPropagation&&x.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},x.onClickNext=function(e){e.preventDefault(),x.isEnd&&!x.params.loop||x.slideNext()},x.onClickPrev=function(e){e.preventDefault(),x.isBeginning&&!x.params.loop||x.slidePrev()},x.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*x.params.slidesPerGroup -;x.params.loop&&(t+=x.loopedSlides),x.slideTo(t)},x.updateClickedSlide=function(a){var t=n(a,"."+x.params.slideClass),s=!1;if(t)for(var r=0;rx.slides.length-x.loopedSlides+l/2?(x.fixLoop(),o=x.wrapper.children("."+x.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+x.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){x.slideTo(o)},0)):x.slideTo(o):o>x.slides.length-l?(x.fixLoop(),o=x.wrapper.children("."+x.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+x.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){x.slideTo(o)},0)):x.slideTo(o)}else x.slideTo(o)}};var b,C,S,z,M,P,E,I,k,D,L="input, select, textarea, button, video",B=Date.now(),H=[];x.animating=!1,x.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,X;x.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(G="touchstart"===a.type)||!("which"in a)||3!==a.which){if(x.params.noSwiping&&n(a,"."+x.params.noSwipingClass))return void(x.allowClick=!0);if(!x.params.swipeHandler||n(a,x.params.swipeHandler)){var t=x.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=x.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(x.device.ios&&x.params.iOSEdgeSwipeDetection&&t<=x.params.iOSEdgeSwipeThreshold)){if(b=!0,C=!1,S=!0,M=void 0,X=void 0,x.touches.startX=t,x.touches.startY=s,z=Date.now(),x.allowClick=!0,x.updateContainerSize(),x.swipeDirection=void 0,x.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(L)&&(r=!1),document.activeElement&&e(document.activeElement).is(L)&&document.activeElement.blur(),r&&a.preventDefault()}x.emit("onTouchStart",x,a)}}}},x.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return x.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(x.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(x.params.onlyExternal)return x.allowClick=!1,void(b&&(x.touches.startX=x.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,x.touches.startY=x.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&x.params.touchReleaseOnEdges&&!x.params.loop)if(x.isHorizontal()){if(x.touches.currentXx.touches.startX&&x.translate>=x.minTranslate())return}else if(x.touches.currentYx.touches.startY&&x.translate>=x.minTranslate())return;if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(L))return C=!0,void(x.allowClick=!1);if(S&&x.emit("onTouchMove",x,a),!(a.targetTouches&&a.targetTouches.length>1)){if(x.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,x.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===M){var t;x.isHorizontal()&&x.touches.currentY===x.touches.startY||!x.isHorizontal()&&x.touches.currentX===x.touches.startX?M=!1:(t=180*Math.atan2(Math.abs(x.touches.currentY-x.touches.startY),Math.abs(x.touches.currentX-x.touches.startX))/Math.PI,M=x.isHorizontal()?t>x.params.touchAngle:90-t>x.params.touchAngle)}if(M&&x.emit("onTouchMoveOpposite",x,a),void 0===X&&(x.touches.currentX===x.touches.startX&&x.touches.currentY===x.touches.startY||(X=!0)),b){if(M)return void(b=!1);if(X){x.allowClick=!1,x.emit("onSliderMove",x,a),a.preventDefault(),x.params.touchMoveStopPropagation&&!x.params.nested&&a.stopPropagation(),C||(s.loop&&x.fixLoop(),E=x.getWrapperTranslate(),x.setWrapperTransition(0),x.animating&&x.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),x.params.autoplay&&x.autoplaying&&(x.params.autoplayDisableOnInteraction?x.stopAutoplay():x.pauseAutoplay()),D=!1,!x.params.grabCursor||x.params.allowSwipeToNext!==!0&&x.params.allowSwipeToPrev!==!0||x.setGrabCursor(!0)),C=!0;var r=x.touches.diff=x.isHorizontal()?x.touches.currentX-x.touches.startX:x.touches.currentY-x.touches.startY;r*=x.params.touchRatio,x.rtl&&(r=-r),x.swipeDirection=r>0?"prev":"next",P=r+E;var i=!0;if(r>0&&P>x.minTranslate()?(i=!1,x.params.resistance&&(P=x.minTranslate()-1+Math.pow(-x.minTranslate()+E+r,x.params.resistanceRatio))):r<0&&PE&&(P=E),x.params.threshold>0){if(!(Math.abs(r)>x.params.threshold||I))return void(P=E);if(!I)return I=!0,x.touches.startX=x.touches.currentX,x.touches.startY=x.touches.currentY,P=E,void(x.touches.diff=x.isHorizontal()?x.touches.currentX-x.touches.startX:x.touches.currentY-x.touches.startY)}x.params.followFinger&&((x.params.freeMode||x.params.watchSlidesProgress)&&x.updateActiveIndex(),x.params.freeMode&&(0===H.length&&H.push({position:x.touches[x.isHorizontal()?"startX":"startY"],time:z}),H.push({position:x.touches[x.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),x.updateProgress(P),x.setWrapperTranslate(P))}}}}},x.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&x.emit("onTouchEnd",x,a),S=!1,b){x.params.grabCursor&&C&&b&&(x.params.allowSwipeToNext===!0||x.params.allowSwipeToPrev===!0)&&x.setGrabCursor(!1);var t=Date.now(),s=t-z;if(x.allowClick&&(x.updateClickedSlide(a),x.emit("onTap",x,a),s<300&&t-B>300&&(k&&clearTimeout(k),k=setTimeout(function(){x&&(x.params.paginationHide&&x.paginationContainer.length>0&&!e(a.target).hasClass(x.params.bulletClass)&&x.paginationContainer.toggleClass(x.params.paginationHiddenClass),x.emit("onClick",x,a))},300)),s<300&&t-B<300&&(k&&clearTimeout(k),x.emit("onDoubleTap",x,a))),B=Date.now(),setTimeout(function(){x&&(x.allowClick=!0)},0),!b||!C||!x.swipeDirection||0===x.touches.diff||P===E)return void(b=C=!1);b=C=!1;var r;if(r=x.params.followFinger?x.rtl?x.translate:-x.translate:-P,x.params.freeMode){if(r<-x.minTranslate())return void x.slideTo(x.activeIndex);if(r>-x.maxTranslate())return void(x.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;x.velocity=o/l,x.velocity=x.velocity/2,Math.abs(x.velocity)150||(new window.Date).getTime()-i.time>300)&&(x.velocity=0)}else x.velocity=0;x.velocity=x.velocity*x.params.freeModeMomentumVelocityRatio,H.length=0;var p=1e3*x.params.freeModeMomentumRatio,d=x.velocity*p,m=x.translate+d;x.rtl&&(m=-m);var u,c=!1,g=20*Math.abs(x.velocity)*x.params.freeModeMomentumBounceRatio;if(mx.minTranslate())x.params.freeModeMomentumBounce?(m-x.minTranslate()>g&&(m=x.minTranslate()+g),u=x.minTranslate(),c=!0,D=!0):m=x.minTranslate();else if(x.params.freeModeSticky){var h,v=0;for(v=0;v-m){h=v;break}m=Math.abs(x.snapGrid[h]-m)=x.params.longSwipesMs)&&(x.updateProgress(),x.updateActiveIndex()))}var f,w=0,y=x.slidesSizesGrid[0];for(f=0;f=x.slidesGrid[f]&&r=x.slidesGrid[f]&&(w=f,y=x.slidesGrid[x.slidesGrid.length-1]-x.slidesGrid[x.slidesGrid.length-2]);var T=(r-x.slidesGrid[w])/y;if(s>x.params.longSwipesMs){if(!x.params.longSwipes)return void x.slideTo(x.activeIndex);"next"===x.swipeDirection&&(T>=x.params.longSwipesRatio?x.slideTo(w+x.params.slidesPerGroup):x.slideTo(w)),"prev"===x.swipeDirection&&(T>1-x.params.longSwipesRatio?x.slideTo(w+x.params.slidesPerGroup):x.slideTo(w))}else{if(!x.params.shortSwipes)return void x.slideTo(x.activeIndex);"next"===x.swipeDirection&&x.slideTo(w+x.params.slidesPerGroup),"prev"===x.swipeDirection&&x.slideTo(w)}}},x._slideTo=function(e,a){return x.slideTo(e,a,!0,!0)},x.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),x.snapIndex=Math.floor(e/x.params.slidesPerGroup),x.snapIndex>=x.snapGrid.length&&(x.snapIndex=x.snapGrid.length-1);var r=-x.snapGrid[x.snapIndex];if(x.params.autoplay&&x.autoplaying&&(s||!x.params.autoplayDisableOnInteraction?x.pauseAutoplay(a):x.stopAutoplay()),x.updateProgress(r),x.params.normalizeSlideIndex)for(var i=0;i=Math.floor(100*x.slidesGrid[i])&&(e=i);return!(!x.params.allowSwipeToNext&&rx.translate&&r>x.maxTranslate()&&(x.activeIndex||0)!==e)&&(void 0===a&&(a=x.params.speed),x.previousIndex=x.activeIndex||0,x.activeIndex=e,x.updateRealIndex(),x.rtl&&-r===x.translate||!x.rtl&&r===x.translate?(x.params.autoHeight&&x.updateAutoHeight(),x.updateClasses(),"slide"!==x.params.effect&&x.setWrapperTranslate(r),!1):(x.updateClasses(),x.onTransitionStart(t),0===a||x.browser.lteIE9?(x.setWrapperTranslate(r),x.setWrapperTransition(0),x.onTransitionEnd(t)):(x.setWrapperTranslate(r),x.setWrapperTransition(a),x.animating||(x.animating=!0,x.wrapper.transitionEnd(function(){x&&x.onTransitionEnd(t)}))),!0)))},x.onTransitionStart=function(e){void 0===e&&(e=!0),x.params.autoHeight&&x.updateAutoHeight(),x.lazy&&x.lazy.onTransitionStart(),e&&(x.emit("onTransitionStart",x),x.activeIndex!==x.previousIndex&&(x.emit("onSlideChangeStart",x),x.activeIndex>x.previousIndex?x.emit("onSlideNextStart",x):x.emit("onSlidePrevStart",x)))},x.onTransitionEnd=function(e){x.animating=!1,x.setWrapperTransition(0),void 0===e&&(e=!0),x.lazy&&x.lazy.onTransitionEnd(),e&&(x.emit("onTransitionEnd",x),x.activeIndex!==x.previousIndex&&(x.emit("onSlideChangeEnd",x),x.activeIndex>x.previousIndex?x.emit("onSlideNextEnd",x):x.emit("onSlidePrevEnd",x))),x.params.history&&x.history&&x.history.setHistory(x.params.history,x.activeIndex),x.params.hashnav&&x.hashnav&&x.hashnav.setHash()},x.slideNext=function(e,a,t){if(x.params.loop){if(x.animating)return!1;x.fixLoop();x.container[0].clientLeft;return x.slideTo(x.activeIndex+x.params.slidesPerGroup,a,e,t)}return x.slideTo(x.activeIndex+x.params.slidesPerGroup,a,e,t)},x._slideNext=function(e){return x.slideNext(!0,e,!0)},x.slidePrev=function(e,a,t){if(x.params.loop){if(x.animating)return!1;x.fixLoop();x.container[0].clientLeft;return x.slideTo(x.activeIndex-1,a,e,t)}return x.slideTo(x.activeIndex-1,a,e,t)},x._slidePrev=function(e){return x.slidePrev(!0,e,!0)},x.slideReset=function(e,a,t){return x.slideTo(x.activeIndex,a,e)},x.disableTouchControl=function(){return x.params.onlyExternal=!0,!0},x.enableTouchControl=function(){return x.params.onlyExternal=!1,!0},x.setWrapperTransition=function(e,a){x.wrapper.transition(e),"slide"!==x.params.effect&&x.effects[x.params.effect]&&x.effects[x.params.effect].setTransition(e),x.params.parallax&&x.parallax&&x.parallax.setTransition(e),x.params.scrollbar&&x.scrollbar&&x.scrollbar.setTransition(e),x.params.control&&x.controller&&x.controller.setTransition(e,a),x.emit("onSetTransition",x,e)},x.setWrapperTranslate=function(e,a,t){var s=0,i=0;x.isHorizontal()?s=x.rtl?-e:e:i=e,x.params.roundLengths&&(s=r(s),i=r(i)),x.params.virtualTranslate||(x.support.transforms3d?x.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):x.wrapper.transform("translate("+s+"px, "+i+"px)")),x.translate=x.isHorizontal()?s:i;var n,o=x.maxTranslate()-x.minTranslate();n=0===o?0:(e-x.minTranslate())/o,n!==x.progress&&x.updateProgress(e),a&&x.updateActiveIndex(),"slide"!==x.params.effect&&x.effects[x.params.effect]&&x.effects[x.params.effect].setTranslate(x.translate),x.params.parallax&&x.parallax&&x.parallax.setTranslate(x.translate),x.params.scrollbar&&x.scrollbar&&x.scrollbar.setTranslate(x.translate),x.params.control&&x.controller&&x.controller.setTranslate(x.translate,t),x.emit("onSetTranslate",x,x.translate)},x.getTranslate=function(e,a){var t,s,r,i;return void 0===a&&(a="x"),x.params.virtualTranslate?x.rtl?-x.translate:x.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),x.rtl&&s&&(s=-s),s||0)},x.getWrapperTranslate=function(e){return void 0===e&&(e=x.isHorizontal()?"x":"y"),x.getTranslate(x.wrapper[0],e)},x.observers=[],x.initObservers=function(){if(x.params.observeParents)for(var e=x.container.parents(),a=0;aa.length&&(x.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-x.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)x.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(x.params.slideDuplicateClass))},x.destroyLoop=function(){x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass).remove(),x.slides.removeAttr("data-swiper-slide-index")},x.reLoop=function(e){var a=x.activeIndex-x.loopedSlides;x.destroyLoop(),x.createLoop(),x.updateSlidesSize(),e&&x.slideTo(a+x.loopedSlides,0,!1)},x.fixLoop=function(){var e;x.activeIndex=2*x.loopedSlides||x.activeIndex>x.slides.length-2*x.params.slidesPerView)&&(e=-x.slides.length+x.activeIndex+x.loopedSlides,e+=x.loopedSlides,x.slideTo(e,0,!1,!0))},x.appendSlide=function(e){if(x.params.loop&&x.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a'),t.append(d)),0===m.length&&(m=e('
'),t.append(m)),d.length&&(d[0].style.opacity=Math.max(-s,0)),m.length&&(m[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(x.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),x.params.virtualTranslate&&0!==a){var t=!1;x.slides.eq(x.activeIndex).transitionEnd(function(){if(!t&&x&&e(this).hasClass(x.params.slideActiveClass)){t=!0,x.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),x.wrapper.append(a)),a.css({height:x.width+"px"})):(a=x.container.find(".swiper-cube-shadow"),0===a.length&&(a=e('
'),x.container.append(a))));for(var s=0;s-1&&(t=90*s+90*o,x.rtl&&(t=90*-s-90*o)),r.transform(m),x.params.cube.slideShadows){var u=x.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),c=x.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===u.length&&(u=e('
'),r.append(u)),0===c.length&&(c=e('
'),r.append(c)),u.length&&(u[0].style.opacity=Math.max(-o,0)),c.length&&(c[0].style.opacity=Math.max(o,0))}}if(x.wrapper.css({"-webkit-transform-origin":"50% 50% -"+x.size/2+"px","-moz-transform-origin":"50% 50% -"+x.size/2+"px","-ms-transform-origin":"50% 50% -"+x.size/2+"px","transform-origin":"50% 50% -"+x.size/2+"px"}),x.params.cube.shadow)if(x.isHorizontal())a.transform("translate3d(0px, "+(x.width/2+x.params.cube.shadowOffset)+"px, "+-x.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+x.params.cube.shadowScale+")");else{var g=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*g*Math.PI/360)/2+Math.cos(2*g*Math.PI/360)/2),v=x.params.cube.shadowScale,f=x.params.cube.shadowScale/h,w=x.params.cube.shadowOffset;a.transform("scale3d("+v+", 1, "+f+") translate3d(0px, "+(x.height/2+w)+"px, "+-x.height/2/f+"px) rotateX(-90deg)")}var y=x.isSafari||x.isUiWebView?-x.size/2:0;x.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(x.isHorizontal()?0:t)+"deg) rotateY("+(x.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){x.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),x.params.cube.shadow&&!x.isHorizontal()&&x.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=x.translate,t=x.isHorizontal()?-a+x.width/2:-a+x.height/2,s=x.isHorizontal()?x.params.coverflow.rotate:-x.params.coverflow.rotate,r=x.params.coverflow.depth,i=0,n=x.slides.length;i'),o.append(f)),0===w.length&&(w=e('
'),o.append(w)),f.length&&(f[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(x.browser.ie){x.wrapper[0].style.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){x.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},x.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==x.slides.length)){var s=x.slides.eq(a),r=s.find("."+x.params.lazyLoadingClass+":not(."+x.params.lazyStatusLoadedClass+"):not(."+x.params.lazyStatusLoadingClass+")");!s.hasClass(x.params.lazyLoadingClass)||s.hasClass(x.params.lazyStatusLoadedClass)||s.hasClass(x.params.lazyStatusLoadingClass)||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass(x.params.lazyStatusLoadingClass);var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");x.loadImage(a[0],i||r,n,o,!1,function(){if(void 0!==x&&null!==x&&x){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass(x.params.lazyStatusLoadedClass).removeClass(x.params.lazyStatusLoadingClass),s.find("."+x.params.lazyPreloaderClass+", ."+x.params.preloaderClass).remove(),x.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(x.params.slideDuplicateClass)){var l=x.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+x.params.slideDuplicateClass+")");x.lazy.loadImageInSlide(l.index(),!1)}else{var p=x.wrapper.children("."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');x.lazy.loadImageInSlide(p.index(),!1)}}x.emit("onLazyImageReady",x,s[0],a[0])}}),x.emit("onLazyImageLoad",x,s[0],a[0])})}},load:function(){var a,t=x.params.slidesPerView;if("auto"===t&&(t=0),x.lazy.initialImageLoaded||(x.lazy.initialImageLoaded=!0),x.params.watchSlidesVisibility)x.wrapper.children("."+x.params.slideVisibleClass).each(function(){x.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=x.activeIndex;a1||x.params.lazyLoadingInPrevNextAmount&&x.params.lazyLoadingInPrevNextAmount>1){var s=x.params.lazyLoadingInPrevNextAmount,r=t,i=Math.min(x.activeIndex+r+Math.max(s,r),x.slides.length),n=Math.max(x.activeIndex-Math.max(r,s),0);for(a=x.activeIndex+t;a0&&x.lazy.loadImageInSlide(o.index());var l=x.wrapper.children("."+x.params.slidePrevClass);l.length>0&&x.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){x.params.lazyLoading&&(x.params.lazyLoadingOnTransitionStart||!x.params.lazyLoadingOnTransitionStart&&!x.lazy.initialImageLoaded)&&x.lazy.load()},onTransitionEnd:function(){x.params.lazyLoading&&!x.params.lazyLoadingOnTransitionStart&&x.lazy.load()}},x.scrollbar={isTouched:!1,setDragPosition:function(e){var a=x.scrollbar,t=x.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[x.isHorizontal()?"left":"top"]-a.dragSize/2,r=-x.minTranslate()*a.moveDivider,i=-x.maxTranslate()*a.moveDivider;si&&(s=i),s=-s/a.moveDivider,x.updateProgress(s),x.setWrapperTranslate(s,!0)},dragStart:function(e){var a=x.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),x.params.scrollbarHide&&a.track.css("opacity",1),x.wrapper.transition(100),a.drag.transition(100),x.emit("onScrollbarDragStart",x)},dragMove:function(e){var a=x.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),x.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),x.emit("onScrollbarDragMove",x))},dragEnd:function(e){var a=x.scrollbar;a.isTouched&&(a.isTouched=!1,x.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),x.emit("onScrollbarDragEnd",x),x.params.scrollbarSnapOnRelease&&x.slideReset())},draggableEvents:function(){return x.params.simulateTouch!==!1||x.support.touch?x.touchEvents:x.touchEventsDesktop}(),enableDraggable:function(){var a=x.scrollbar,t=x.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=x.scrollbar,t=x.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(x.params.scrollbar){var a=x.scrollbar;a.track=e(x.params.scrollbar),x.params.uniqueNavElements&&"string"==typeof x.params.scrollbar&&a.track.length>1&&1===x.container.find(x.params.scrollbar).length&&(a.track=x.container.find(x.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=x.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=x.size/x.virtualSize,a.moveDivider=a.divider*(a.trackSize/x.size),a.dragSize=a.trackSize*a.divider,x.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",x.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(x.params.scrollbar){var e,a=x.scrollbar,t=(x.translate,a.dragSize);e=(a.trackSize-a.dragSize)*x.progress,x.rtl&&x.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),x.isHorizontal()?(x.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(x.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),x.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){x.params.scrollbar&&x.scrollbar.drag.transition(e)}},x.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,r;this.x.length;this.interpolate=function(e){return e?(r=t(this.x,e),s=r-1,(e-this.x[s])*(this.y[r]-this.y[s])/(this.x[r]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){x.controller.spline||(x.controller.spline=x.params.loop?new x.controller.LinearSpline(x.slidesGrid,e.slidesGrid):new x.controller.LinearSpline(x.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-x.translate:x.translate,"slide"===x.params.controlBy&&(x.controller.getInterpolateFunction(a),i=-x.controller.spline.interpolate(-e)),i&&"container"!==x.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(x.maxTranslate()-x.minTranslate()),i=(e-x.minTranslate())*r+a.minTranslate()),x.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,x),a.updateActiveIndex()}var r,i,n=x.params.control;if(Array.isArray(n))for(var o=0;o-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),x.disableMousewheelControl=function(){if(!x.mousewheel.event)return!1;var a=x.container;return"container"!==x.params.mousewheelEventsTarged&&(a=e(x.params.mousewheelEventsTarged)),a.off(x.mousewheel.event,d),x.params.mousewheelControl=!1,!0},x.enableMousewheelControl=function(){if(!x.mousewheel.event)return!1;var a=x.container;return"container"!==x.params.mousewheelEventsTarged&&(a=e(x.params.mousewheelEventsTarged)),a.on(x.mousewheel.event,d),x.params.mousewheelControl=!0,!0},x.parallax={setTranslate:function(){x.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,x.progress)}),x.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=x.params.speed),x.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},x.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:x.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,r=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(r-t,2))},onGestureStart:function(a){var t=x.zoom;if(!x.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}if(!(t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=x.slides.eq(x.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+x.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||x.params.zoomMax,0!==t.gesture.imageWrap.length)))return void(t.gesture.image=void 0);t.gesture.image.transition(0),t.isScaling=!0},onGestureChange:function(e){var a=x.zoom;if(!x.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(x.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scalea.image.touchesStart.x)return void(a.image.isTouched=!1);if(!x.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.ya.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentXa.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentYa.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,r=300,i=t.velocity.x*s,n=t.image.currentX+i,o=t.velocity.y*r,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(r=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,r);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,m=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-m/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var r,i,n,o,l,p,d,m,u,c,g,h,v,f,w,y,x,T;void 0===s.image.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,i="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=s.image.touchesStart.x,i=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(x=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+x/2-r,p=o+T/2-i,u=s.gesture.image[0].offsetWidth,c=s.gesture.image[0].offsetHeight,g=u*s.scale,h=c*s.scale,v=Math.min(x/2-g/2,0),f=Math.min(T/2-h/2,0),w=-v,y=-f,d=l*s.scale,m=p*s.scale,dw&&(d=w),my&&(m=y)):(d=0,m=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+m+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(x.params.zoom){var s=(x.slides,!("touchstart"!==x.touchEvents.start||!x.support.passiveListener||!x.params.passiveListeners)&&{passive:!0,capture:!1});x.support.gestures?(x.slides[t]("gesturestart",x.zoom.onGestureStart,s),x.slides[t]("gesturechange",x.zoom.onGestureChange,s),x.slides[t]("gestureend",x.zoom.onGestureEnd,s)):"touchstart"===x.touchEvents.start&&(x.slides[t](x.touchEvents.start,x.zoom.onGestureStart,s),x.slides[t](x.touchEvents.move,x.zoom.onGestureChange,s),x.slides[t](x.touchEvents.end,x.zoom.onGestureEnd,s)),x[t]("touchStart",x.zoom.onTouchStart),x.slides.each(function(a,s){e(s).find("."+x.params.zoomContainerClass).length>0&&e(s)[t](x.touchEvents.move,x.zoom.onTouchMove)}),x[t]("touchEnd",x.zoom.onTouchEnd),x[t]("transitionEnd",x.zoom.onTransitionEnd),x.params.zoomToggle&&x.on("doubleTap",x.zoom.toggleZoom)}},init:function(){x.zoom.attachEvents()},destroy:function(){x.zoom.attachEvents(!0)}},x._plugins=[];for(var Y in x.plugins){var A=x.plugins[Y](x,x.params[Y]);A&&x._plugins.push(A)}return x.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=x.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.a11y.makeFocusable(x.nextButton),x.a11y.addRole(x.nextButton,"button"),x.a11y.addLabel(x.nextButton,x.params.nextSlideMessage)),x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.a11y.makeFocusable(x.prevButton),x.a11y.addRole(x.prevButton,"button"),x.a11y.addLabel(x.prevButton,x.params.prevSlideMessage)),e(x.container).append(x.a11y.liveRegion)},initPagination:function(){x.params.pagination&&x.params.paginationClickable&&x.bullets&&x.bullets.length&&x.bullets.each(function(){var a=e(this);x.a11y.makeFocusable(a),x.a11y.addRole(a,"button"),x.a11y.addLabel(a,x.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){x.a11y.liveRegion&&x.a11y.liveRegion.length>0&&x.a11y.liveRegion.remove()}},x.init=function(){x.params.loop&&x.createLoop(),x.updateContainerSize(),x.updateSlidesSize(),x.updatePagination(),x.params.scrollbar&&x.scrollbar&&(x.scrollbar.set(),x.params.scrollbarDraggable&&x.scrollbar.enableDraggable()),"slide"!==x.params.effect&&x.effects[x.params.effect]&&(x.params.loop||x.updateProgress(),x.effects[x.params.effect].setTranslate()),x.params.loop?x.slideTo(x.params.initialSlide+x.loopedSlides,0,x.params.runCallbacksOnInit):(x.slideTo(x.params.initialSlide,0,x.params.runCallbacksOnInit),0===x.params.initialSlide&&(x.parallax&&x.params.parallax&&x.parallax.setTranslate(),x.lazy&&x.params.lazyLoading&&(x.lazy.load(),x.lazy.initialImageLoaded=!0))),x.attachEvents(),x.params.observer&&x.support.observer&&x.initObservers(),x.params.preloadImages&&!x.params.lazyLoading&&x.preloadImages(),x.params.zoom&&x.zoom&&x.zoom.init(),x.params.autoplay&&x.startAutoplay(),x.params.keyboardControl&&x.enableKeyboardControl&&x.enableKeyboardControl(),x.params.mousewheelControl&&x.enableMousewheelControl&&x.enableMousewheelControl(),x.params.hashnavReplaceState&&(x.params.replaceState=x.params.hashnavReplaceState),x.params.history&&x.history&&x.history.init(),x.params.hashnav&&x.hashnav&&x.hashnav.init(),x.params.a11y&&x.a11y&&x.a11y.init(),x.emit("onInit",x)},x.cleanupStyles=function(){x.container.removeClass(x.classNames.join(" ")).removeAttr("style"),x.wrapper.removeAttr("style"),x.slides&&x.slides.length&&x.slides.removeClass([x.params.slideVisibleClass,x.params.slideActiveClass,x.params.slideNextClass,x.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),x.paginationContainer&&x.paginationContainer.length&&x.paginationContainer.removeClass(x.params.paginationHiddenClass),x.bullets&&x.bullets.length&&x.bullets.removeClass(x.params.bulletActiveClass),x.params.prevButton&&e(x.params.prevButton).removeClass(x.params.buttonDisabledClass),x.params.nextButton&&e(x.params.nextButton).removeClass(x.params.buttonDisabledClass),x.params.scrollbar&&x.scrollbar&&(x.scrollbar.track&&x.scrollbar.track.length&&x.scrollbar.track.removeAttr("style"),x.scrollbar.drag&&x.scrollbar.drag.length&&x.scrollbar.drag.removeAttr("style"))},x.destroy=function(e,a){x.detachEvents(),x.stopAutoplay(),x.params.scrollbar&&x.scrollbar&&x.params.scrollbarDraggable&&x.scrollbar.disableDraggable(),x.params.loop&&x.destroyLoop(),a&&x.cleanupStyles(),x.disconnectObservers(),x.params.zoom&&x.zoom&&x.zoom.destroy(),x.params.keyboardControl&&x.disableKeyboardControl&&x.disableKeyboardControl(),x.params.mousewheelControl&&x.disableMousewheelControl&&x.disableMousewheelControl(),x.params.a11y&&x.a11y&&x.a11y.destroy(),x.params.history&&!x.params.replaceState&&window.removeEventListener("popstate",x.history.setHistoryPopState),x.params.hashnav&&x.hashnav&&x.hashnav.destroy(),x.emit("onDestroy"),e!==!1&&(x=null)},x.init(),x}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="",1===e.getElementsByTagName("i").length}()},device:function(){var e=window.navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),window.Swiper=a}(),"undefined"!=typeof module?module.exports=window.Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return window.Swiper}); -//# sourceMappingURL=maps/swiper.jquery.min.js.map diff --git a/dist/js/swiper.jquery.umd.js b/dist/js/swiper.jquery.umd.js deleted file mode 100644 index 61cd77ddf..000000000 --- a/dist/js/swiper.jquery.umd.js +++ /dev/null @@ -1,4677 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -(function (root, factory) { - 'use strict'; - - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require('jquery')); - } else { - // Browser globals (root is window) - root.Swiper = factory(root.jQuery); - } -}(this, function ($) { - 'use strict'; - - /*=========================== - Swiper - ===========================*/ - var Swiper = function (container, params) { - if (!(this instanceof Swiper)) return new Swiper(container, params); - - - var defaults = { - direction: 'horizontal', - touchEventsTarget: 'container', - initialSlide: 0, - speed: 300, - // autoplay - autoplay: false, - autoplayDisableOnInteraction: true, - autoplayStopOnLast: false, - // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView). - iOSEdgeSwipeDetection: false, - iOSEdgeSwipeThreshold: 20, - // Free mode - freeMode: false, - freeModeMomentum: true, - freeModeMomentumRatio: 1, - freeModeMomentumBounce: true, - freeModeMomentumBounceRatio: 1, - freeModeMomentumVelocityRatio: 1, - freeModeSticky: false, - freeModeMinimumVelocity: 0.02, - // Autoheight - autoHeight: false, - // Set wrapper width - setWrapperSize: false, - // Virtual Translate - virtualTranslate: false, - // Effects - effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' - coverflow: { - rotate: 50, - stretch: 0, - depth: 100, - modifier: 1, - slideShadows : true - }, - flip: { - slideShadows : true, - limitRotation: true - }, - cube: { - slideShadows: true, - shadow: true, - shadowOffset: 20, - shadowScale: 0.94 - }, - fade: { - crossFade: false - }, - // Parallax - parallax: false, - // Zoom - zoom: false, - zoomMax: 3, - zoomMin: 1, - zoomToggle: true, - // Scrollbar - scrollbar: null, - scrollbarHide: true, - scrollbarDraggable: false, - scrollbarSnapOnRelease: false, - // Keyboard Mousewheel - keyboardControl: false, - mousewheelControl: false, - mousewheelReleaseOnEdges: false, - mousewheelInvert: false, - mousewheelForceToAxis: false, - mousewheelSensitivity: 1, - mousewheelEventsTarged: 'container', - // Hash Navigation - hashnav: false, - hashnavWatchState: false, - // History - history: false, - // Commong Nav State - replaceState: false, - // Breakpoints - breakpoints: undefined, - // Slides grid - spaceBetween: 0, - slidesPerView: 1, - slidesPerColumn: 1, - slidesPerColumnFill: 'column', - slidesPerGroup: 1, - centeredSlides: false, - slidesOffsetBefore: 0, // in px - slidesOffsetAfter: 0, // in px - // Round length - roundLengths: false, - // Touches - touchRatio: 1, - touchAngle: 45, - simulateTouch: true, - shortSwipes: true, - longSwipes: true, - longSwipesRatio: 0.5, - longSwipesMs: 300, - followFinger: true, - onlyExternal: false, - threshold: 0, - touchMoveStopPropagation: true, - touchReleaseOnEdges: false, - // Unique Navigation Elements - uniqueNavElements: true, - // Pagination - pagination: null, - paginationElement: 'span', - paginationClickable: false, - paginationHide: false, - paginationBulletRender: null, - paginationProgressRender: null, - paginationFractionRender: null, - paginationCustomRender: null, - paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom' - // Resistance - resistance: true, - resistanceRatio: 0.85, - // Next/prev buttons - nextButton: null, - prevButton: null, - // Progress - watchSlidesProgress: false, - watchSlidesVisibility: false, - // Cursor - grabCursor: false, - // Clicks - preventClicks: true, - preventClicksPropagation: true, - slideToClickedSlide: false, - // Lazy Loading - lazyLoading: false, - lazyLoadingInPrevNext: false, - lazyLoadingInPrevNextAmount: 1, - lazyLoadingOnTransitionStart: false, - // Images - preloadImages: true, - updateOnImagesReady: true, - // loop - loop: false, - loopAdditionalSlides: 0, - loopedSlides: null, - // Control - control: undefined, - controlInverse: false, - controlBy: 'slide', //or 'container' - normalizeSlideIndex: true, - // Swiping/no swiping - allowSwipeToPrev: true, - allowSwipeToNext: true, - swipeHandler: null, //'.swipe-handler', - noSwiping: true, - noSwipingClass: 'swiper-no-swiping', - // Passive Listeners - passiveListeners: true, - // NS - containerModifierClass: 'swiper-container-', // NEW - slideClass: 'swiper-slide', - slideActiveClass: 'swiper-slide-active', - slideDuplicateActiveClass: 'swiper-slide-duplicate-active', - slideVisibleClass: 'swiper-slide-visible', - slideDuplicateClass: 'swiper-slide-duplicate', - slideNextClass: 'swiper-slide-next', - slideDuplicateNextClass: 'swiper-slide-duplicate-next', - slidePrevClass: 'swiper-slide-prev', - slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', - wrapperClass: 'swiper-wrapper', - bulletClass: 'swiper-pagination-bullet', - bulletActiveClass: 'swiper-pagination-bullet-active', - buttonDisabledClass: 'swiper-button-disabled', - paginationCurrentClass: 'swiper-pagination-current', - paginationTotalClass: 'swiper-pagination-total', - paginationHiddenClass: 'swiper-pagination-hidden', - paginationProgressbarClass: 'swiper-pagination-progressbar', - paginationClickableClass: 'swiper-pagination-clickable', // NEW - paginationModifierClass: 'swiper-pagination-', // NEW - lazyLoadingClass: 'swiper-lazy', - lazyStatusLoadingClass: 'swiper-lazy-loading', - lazyStatusLoadedClass: 'swiper-lazy-loaded', - lazyPreloaderClass: 'swiper-lazy-preloader', - notificationClass: 'swiper-notification', - preloaderClass: 'preloader', - zoomContainerClass: 'swiper-zoom-container', - - // Observer - observer: false, - observeParents: false, - // Accessibility - a11y: false, - prevSlideMessage: 'Previous slide', - nextSlideMessage: 'Next slide', - firstSlideMessage: 'This is the first slide', - lastSlideMessage: 'This is the last slide', - paginationBulletMessage: 'Go to slide {{index}}', - // Callbacks - runCallbacksOnInit: true - /* - Callbacks: - onInit: function (swiper) - onDestroy: function (swiper) - onBeforeResize: function (swiper) - onAfterResize: function (swiper) - onClick: function (swiper, e) - onTap: function (swiper, e) - onDoubleTap: function (swiper, e) - onSliderMove: function (swiper, e) - onSlideChangeStart: function (swiper) - onSlideChangeEnd: function (swiper) - onTransitionStart: function (swiper) - onTransitionEnd: function (swiper) - onImagesReady: function (swiper) - onProgress: function (swiper, progress) - onTouchStart: function (swiper, e) - onTouchMove: function (swiper, e) - onTouchMoveOpposite: function (swiper, e) - onTouchEnd: function (swiper, e) - onReachBeginning: function (swiper) - onReachEnd: function (swiper) - onSetTransition: function (swiper, duration) - onSetTranslate: function (swiper, translate) - onAutoplayStart: function (swiper) - onAutoplayStop: function (swiper), - onLazyImageLoad: function (swiper, slide, image) - onLazyImageReady: function (swiper, slide, image) - onKeyPress: function (swiper, keyCode) - */ - - }; - var initialVirtualTranslate = params && params.virtualTranslate; - - params = params || {}; - var originalParams = {}; - for (var param in params) { - if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) { - originalParams[param] = {}; - for (var deepParam in params[param]) { - originalParams[param][deepParam] = params[param][deepParam]; - } - } - else { - originalParams[param] = params[param]; - } - } - for (var def in defaults) { - if (typeof params[def] === 'undefined') { - params[def] = defaults[def]; - } - else if (typeof params[def] === 'object') { - for (var deepDef in defaults[def]) { - if (typeof params[def][deepDef] === 'undefined') { - params[def][deepDef] = defaults[def][deepDef]; - } - } - } - } - - // Swiper - var s = this; - - // Params - s.params = params; - s.originalParams = originalParams; - - // Classname - s.classNames = []; - /*========================= - Dom Library and plugins - ===========================*/ - if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){ - $ = Dom7; - } - if (typeof $ === 'undefined') { - if (typeof Dom7 === 'undefined') { - $ = window.Dom7 || window.Zepto || window.jQuery; - } - else { - $ = Dom7; - } - if (!$) return; - } - // Export it to Swiper instance - s.$ = $; - - /*========================= - Breakpoints - ===========================*/ - s.currentBreakpoint = undefined; - s.getActiveBreakpoint = function () { - //Get breakpoint for window width - if (!s.params.breakpoints) return false; - var breakpoint = false; - var points = [], point; - for ( point in s.params.breakpoints ) { - if (s.params.breakpoints.hasOwnProperty(point)) { - points.push(point); - } - } - points.sort(function (a, b) { - return parseInt(a, 10) > parseInt(b, 10); - }); - for (var i = 0; i < points.length; i++) { - point = points[i]; - if (point >= window.innerWidth && !breakpoint) { - breakpoint = point; - } - } - return breakpoint || 'max'; - }; - s.setBreakpoint = function () { - //Set breakpoint for window width and update parameters - var breakpoint = s.getActiveBreakpoint(); - if (breakpoint && s.currentBreakpoint !== breakpoint) { - var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; - var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); - for ( var param in breakPointsParams ) { - s.params[param] = breakPointsParams[param]; - } - s.currentBreakpoint = breakpoint; - if(needsReLoop && s.destroyLoop) { - s.reLoop(true); - } - } - }; - // Set breakpoint on load - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - /*========================= - Preparation - Define Container, Wrapper and Pagination - ===========================*/ - s.container = $(container); - if (s.container.length === 0) return; - if (s.container.length > 1) { - var swipers = []; - s.container.each(function () { - var container = this; - swipers.push(new Swiper(this, params)); - }); - return swipers; - } - - // Save instance in container HTML Element and in data - s.container[0].swiper = s; - s.container.data('swiper', s); - - s.classNames.push(s.params.containerModifierClass + s.params.direction); - - if (s.params.freeMode) { - s.classNames.push(s.params.containerModifierClass + 'free-mode'); - } - if (!s.support.flexbox) { - s.classNames.push(s.params.containerModifierClass + 'no-flexbox'); - s.params.slidesPerColumn = 1; - } - if (s.params.autoHeight) { - s.classNames.push(s.params.containerModifierClass + 'autoheight'); - } - // Enable slides progress when required - if (s.params.parallax || s.params.watchSlidesVisibility) { - s.params.watchSlidesProgress = true; - } - // Max resistance when touchReleaseOnEdges - if (s.params.touchReleaseOnEdges) { - s.params.resistanceRatio = 0; - } - // Coverflow / 3D - if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { - if (s.support.transforms3d) { - s.params.watchSlidesProgress = true; - s.classNames.push(s.params.containerModifierClass + '3d'); - } - else { - s.params.effect = 'slide'; - } - } - if (s.params.effect !== 'slide') { - s.classNames.push(s.params.containerModifierClass + s.params.effect); - } - if (s.params.effect === 'cube') { - s.params.resistanceRatio = 0; - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.centeredSlides = false; - s.params.spaceBetween = 0; - s.params.virtualTranslate = true; - } - if (s.params.effect === 'fade' || s.params.effect === 'flip') { - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.watchSlidesProgress = true; - s.params.spaceBetween = 0; - if (typeof initialVirtualTranslate === 'undefined') { - s.params.virtualTranslate = true; - } - } - - // Grab Cursor - if (s.params.grabCursor && s.support.touch) { - s.params.grabCursor = false; - } - - // Wrapper - s.wrapper = s.container.children('.' + s.params.wrapperClass); - - // Pagination - if (s.params.pagination) { - s.paginationContainer = $(s.params.pagination); - if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { - s.paginationContainer = s.container.find(s.params.pagination); - } - - if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { - s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable'); - } - else { - s.params.paginationClickable = false; - } - s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType); - } - // Next/Prev Buttons - if (s.params.nextButton || s.params.prevButton) { - if (s.params.nextButton) { - s.nextButton = $(s.params.nextButton); - if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { - s.nextButton = s.container.find(s.params.nextButton); - } - } - if (s.params.prevButton) { - s.prevButton = $(s.params.prevButton); - if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { - s.prevButton = s.container.find(s.params.prevButton); - } - } - } - - // Is Horizontal - s.isHorizontal = function () { - return s.params.direction === 'horizontal'; - }; - // s.isH = isH; - - // RTL - s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); - if (s.rtl) { - s.classNames.push(s.params.containerModifierClass + 'rtl'); - } - - // Wrong RTL support - if (s.rtl) { - s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; - } - - // Columns - if (s.params.slidesPerColumn > 1) { - s.classNames.push(s.params.containerModifierClass + 'multirow'); - } - - // Check for Android - if (s.device.android) { - s.classNames.push(s.params.containerModifierClass + 'android'); - } - - // Add classes - s.container.addClass(s.classNames.join(' ')); - - // Translate - s.translate = 0; - - // Progress - s.progress = 0; - - // Velocity - s.velocity = 0; - - /*========================= - Locks, unlocks - ===========================*/ - s.lockSwipeToNext = function () { - s.params.allowSwipeToNext = false; - if (s.params.allowSwipeToPrev === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipeToPrev = function () { - s.params.allowSwipeToPrev = false; - if (s.params.allowSwipeToNext === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; - if (s.params.grabCursor) s.unsetGrabCursor(); - }; - s.unlockSwipeToNext = function () { - s.params.allowSwipeToNext = true; - if (s.params.allowSwipeToPrev === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipeToPrev = function () { - s.params.allowSwipeToPrev = true; - if (s.params.allowSwipeToNext === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; - if (s.params.grabCursor) s.setGrabCursor(); - }; - - /*========================= - Round helper - ===========================*/ - function round(a) { - return Math.floor(a); - } - /*========================= - Set grab cursor - ===========================*/ - s.setGrabCursor = function(moving) { - s.container[0].style.cursor = 'move'; - s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; - s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; - s.container[0].style.cursor = moving ? 'grabbing': 'grab'; - }; - s.unsetGrabCursor = function () { - s.container[0].style.cursor = ''; - }; - if (s.params.grabCursor) { - s.setGrabCursor(); - } - /*========================= - Update on Images Ready - ===========================*/ - s.imagesToLoad = []; - s.imagesLoaded = 0; - - s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) { - var image; - function onReady () { - if (callback) callback(); - } - if (!imgElement.complete || !checkForComplete) { - if (src) { - image = new window.Image(); - image.onload = onReady; - image.onerror = onReady; - if (sizes) { - image.sizes = sizes; - } - if (srcset) { - image.srcset = srcset; - } - if (src) { - image.src = src; - } - } else { - onReady(); - } - - } else {//image already loaded... - onReady(); - } - }; - s.preloadImages = function () { - s.imagesToLoad = s.container.find('img'); - function _onReady() { - if (typeof s === 'undefined' || s === null || !s) return; - if (s.imagesLoaded !== undefined) s.imagesLoaded++; - if (s.imagesLoaded === s.imagesToLoad.length) { - if (s.params.updateOnImagesReady) s.update(); - s.emit('onImagesReady', s); - } - } - for (var i = 0; i < s.imagesToLoad.length; i++) { - s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady); - } - }; - - /*========================= - Autoplay - ===========================*/ - s.autoplayTimeoutId = undefined; - s.autoplaying = false; - s.autoplayPaused = false; - function autoplay() { - var autoplayDelay = s.params.autoplay; - var activeSlide = s.slides.eq(s.activeIndex); - if (activeSlide.attr('data-swiper-autoplay')) { - autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay; - } - s.autoplayTimeoutId = setTimeout(function () { - if (s.params.loop) { - s.fixLoop(); - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!s.isEnd) { - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!params.autoplayStopOnLast) { - s._slideTo(0); - s.emit('onAutoplay', s); - } - else { - s.stopAutoplay(); - } - } - } - }, autoplayDelay); - } - s.startAutoplay = function () { - if (typeof s.autoplayTimeoutId !== 'undefined') return false; - if (!s.params.autoplay) return false; - if (s.autoplaying) return false; - s.autoplaying = true; - s.emit('onAutoplayStart', s); - autoplay(); - }; - s.stopAutoplay = function (internal) { - if (!s.autoplayTimeoutId) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplaying = false; - s.autoplayTimeoutId = undefined; - s.emit('onAutoplayStop', s); - }; - s.pauseAutoplay = function (speed) { - if (s.autoplayPaused) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplayPaused = true; - if (speed === 0) { - s.autoplayPaused = false; - autoplay(); - } - else { - s.wrapper.transitionEnd(function () { - if (!s) return; - s.autoplayPaused = false; - if (!s.autoplaying) { - s.stopAutoplay(); - } - else { - autoplay(); - } - }); - } - }; - /*========================= - Min/Max Translate - ===========================*/ - s.minTranslate = function () { - return (-s.snapGrid[0]); - }; - s.maxTranslate = function () { - return (-s.snapGrid[s.snapGrid.length - 1]); - }; - /*========================= - Slider/slides sizes - ===========================*/ - s.updateAutoHeight = function () { - var activeSlides = []; - var newHeight = 0; - var i; - - // Find slides currently in view - if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) { - for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) { - var index = s.activeIndex + i; - if(index > s.slides.length) break; - activeSlides.push(s.slides.eq(index)[0]); - } - } else { - activeSlides.push(s.slides.eq(s.activeIndex)[0]); - } - - // Find new height from heighest slide in view - for (i = 0; i < activeSlides.length; i++) { - if (typeof activeSlides[i] !== 'undefined') { - var height = activeSlides[i].offsetHeight; - newHeight = height > newHeight ? height : newHeight; - } - } - - // Update Height - if (newHeight) s.wrapper.css('height', newHeight + 'px'); - }; - s.updateContainerSize = function () { - var width, height; - if (typeof s.params.width !== 'undefined') { - width = s.params.width; - } - else { - width = s.container[0].clientWidth; - } - if (typeof s.params.height !== 'undefined') { - height = s.params.height; - } - else { - height = s.container[0].clientHeight; - } - if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { - return; - } - - //Subtract paddings - width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); - height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); - - // Store values - s.width = width; - s.height = height; - s.size = s.isHorizontal() ? s.width : s.height; - }; - - s.updateSlidesSize = function () { - s.slides = s.wrapper.children('.' + s.params.slideClass); - s.snapGrid = []; - s.slidesGrid = []; - s.slidesSizesGrid = []; - - var spaceBetween = s.params.spaceBetween, - slidePosition = -s.params.slidesOffsetBefore, - i, - prevSlideSize = 0, - index = 0; - if (typeof s.size === 'undefined') return; - if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { - spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; - } - - s.virtualSize = -spaceBetween; - // reset margins - if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); - else s.slides.css({marginRight: '', marginBottom: ''}); - - var slidesNumberEvenToRows; - if (s.params.slidesPerColumn > 1) { - if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { - slidesNumberEvenToRows = s.slides.length; - } - else { - slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; - } - if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { - slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); - } - } - - // Calc slides - var slideSize; - var slidesPerColumn = s.params.slidesPerColumn; - var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; - var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); - for (i = 0; i < s.slides.length; i++) { - slideSize = 0; - var slide = s.slides.eq(i); - if (s.params.slidesPerColumn > 1) { - // Set slides order - var newSlideOrderIndex; - var column, row; - if (s.params.slidesPerColumnFill === 'column') { - column = Math.floor(i / slidesPerColumn); - row = i - column * slidesPerColumn; - if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { - if (++row >= slidesPerColumn) { - row = 0; - column++; - } - } - newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; - slide - .css({ - '-webkit-box-ordinal-group': newSlideOrderIndex, - '-moz-box-ordinal-group': newSlideOrderIndex, - '-ms-flex-order': newSlideOrderIndex, - '-webkit-order': newSlideOrderIndex, - 'order': newSlideOrderIndex - }); - } - else { - row = Math.floor(i / slidesPerRow); - column = i - row * slidesPerRow; - } - slide - .css( - 'margin-' + (s.isHorizontal() ? 'top' : 'left'), - (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') - ) - .attr('data-swiper-column', column) - .attr('data-swiper-row', row); - - } - if (slide.css('display') === 'none') continue; - if (s.params.slidesPerView === 'auto') { - slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); - if (s.params.roundLengths) slideSize = round(slideSize); - } - else { - slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; - if (s.params.roundLengths) slideSize = round(slideSize); - - if (s.isHorizontal()) { - s.slides[i].style.width = slideSize + 'px'; - } - else { - s.slides[i].style.height = slideSize + 'px'; - } - } - s.slides[i].swiperSlideSize = slideSize; - s.slidesSizesGrid.push(slideSize); - - - if (s.params.centeredSlides) { - slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; - if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - } - else { - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - slidePosition = slidePosition + slideSize + spaceBetween; - } - - s.virtualSize += slideSize + spaceBetween; - - prevSlideSize = slideSize; - - index ++; - } - s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; - var newSlidesGrid; - - if ( - s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { - s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - } - if (!s.support.flexbox || s.params.setWrapperSize) { - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - } - - if (s.params.slidesPerColumn > 1) { - s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; - s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - if (s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); - } - s.snapGrid = newSlidesGrid; - } - } - - // Remove last grid elements depending on width - if (!s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] <= s.virtualSize - s.size) { - newSlidesGrid.push(s.snapGrid[i]); - } - } - s.snapGrid = newSlidesGrid; - if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { - s.snapGrid.push(s.virtualSize - s.size); - } - } - if (s.snapGrid.length === 0) s.snapGrid = [0]; - - if (s.params.spaceBetween !== 0) { - if (s.isHorizontal()) { - if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); - else s.slides.css({marginRight: spaceBetween + 'px'}); - } - else s.slides.css({marginBottom: spaceBetween + 'px'}); - } - if (s.params.watchSlidesProgress) { - s.updateSlidesOffset(); - } - }; - s.updateSlidesOffset = function () { - for (var i = 0; i < s.slides.length; i++) { - s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; - } - }; - - /*========================= - Dynamic Slides Per View - ===========================*/ - s.currentSlidesPerView = function () { - var spv = 1, i, j; - if (s.params.centeredSlides) { - var size = s.slides[s.activeIndex].swiperSlideSize; - var breakLoop; - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slides[i] && !breakLoop) { - size += s.slides[i].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - for (j = s.activeIndex - 1; j >= 0; j--) { - if (s.slides[j] && !breakLoop) { - size += s.slides[j].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - } - else { - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) { - spv++; - } - } - } - return spv; - }; - /*========================= - Slider/slides progress - ===========================*/ - s.updateSlidesProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - if (s.slides.length === 0) return; - if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); - - var offsetCenter = -translate; - if (s.rtl) offsetCenter = translate; - - // Visible Slides - s.slides.removeClass(s.params.slideVisibleClass); - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides[i]; - var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); - if (s.params.watchSlidesVisibility) { - var slideBefore = -(offsetCenter - slide.swiperSlideOffset); - var slideAfter = slideBefore + s.slidesSizesGrid[i]; - var isVisible = - (slideBefore >= 0 && slideBefore < s.size) || - (slideAfter > 0 && slideAfter <= s.size) || - (slideBefore <= 0 && slideAfter >= s.size); - if (isVisible) { - s.slides.eq(i).addClass(s.params.slideVisibleClass); - } - } - slide.progress = s.rtl ? -slideProgress : slideProgress; - } - }; - s.updateProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - var translatesDiff = s.maxTranslate() - s.minTranslate(); - var wasBeginning = s.isBeginning; - var wasEnd = s.isEnd; - if (translatesDiff === 0) { - s.progress = 0; - s.isBeginning = s.isEnd = true; - } - else { - s.progress = (translate - s.minTranslate()) / (translatesDiff); - s.isBeginning = s.progress <= 0; - s.isEnd = s.progress >= 1; - } - if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); - if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); - - if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); - s.emit('onProgress', s, s.progress); - }; - s.updateActiveIndex = function () { - var translate = s.rtl ? s.translate : -s.translate; - var newActiveIndex, i, snapIndex; - for (i = 0; i < s.slidesGrid.length; i ++) { - if (typeof s.slidesGrid[i + 1] !== 'undefined') { - if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { - newActiveIndex = i; - } - else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { - newActiveIndex = i + 1; - } - } - else { - if (translate >= s.slidesGrid[i]) { - newActiveIndex = i; - } - } - } - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; - } - // for (i = 0; i < s.slidesGrid.length; i++) { - // if (- translate >= s.slidesGrid[i]) { - // newActiveIndex = i; - // } - // } - snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); - if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; - - if (newActiveIndex === s.activeIndex) { - return; - } - s.snapIndex = snapIndex; - s.previousIndex = s.activeIndex; - s.activeIndex = newActiveIndex; - s.updateClasses(); - s.updateRealIndex(); - }; - s.updateRealIndex = function(){ - s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10); - }; - - /*========================= - Classes - ===========================*/ - s.updateClasses = function () { - s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass); - var activeSlide = s.slides.eq(s.activeIndex); - // Active classes - activeSlide.addClass(s.params.slideActiveClass); - if (params.loop) { - // Duplicate to all looped slides - if (activeSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - } - // Next Slide - var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); - if (s.params.loop && nextSlide.length === 0) { - nextSlide = s.slides.eq(0); - nextSlide.addClass(s.params.slideNextClass); - } - // Prev Slide - var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); - if (s.params.loop && prevSlide.length === 0) { - prevSlide = s.slides.eq(-1); - prevSlide.addClass(s.params.slidePrevClass); - } - if (params.loop) { - // Duplicate to all looped slides - if (nextSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - if (prevSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - } - - // Pagination - if (s.paginationContainer && s.paginationContainer.length > 0) { - // Current/Total - var current, - total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - if (s.params.loop) { - current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); - if (current > s.slides.length - 1 - s.loopedSlides * 2) { - current = current - (s.slides.length - s.loopedSlides * 2); - } - if (current > total - 1) current = current - total; - if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; - } - else { - if (typeof s.snapIndex !== 'undefined') { - current = s.snapIndex; - } - else { - current = s.activeIndex || 0; - } - } - // Types - if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { - s.bullets.removeClass(s.params.bulletActiveClass); - if (s.paginationContainer.length > 1) { - s.bullets.each(function () { - if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); - }); - } - else { - s.bullets.eq(current).addClass(s.params.bulletActiveClass); - } - } - if (s.params.paginationType === 'fraction') { - s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); - s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); - } - if (s.params.paginationType === 'progress') { - var scale = (current + 1) / total, - scaleX = scale, - scaleY = 1; - if (!s.isHorizontal()) { - scaleY = scale; - scaleX = 1; - } - s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); - } - if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { - s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - - // Next/active buttons - if (!s.params.loop) { - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - if (s.isBeginning) { - s.prevButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); - } - else { - s.prevButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); - } - } - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - if (s.isEnd) { - s.nextButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); - } - else { - s.nextButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); - } - } - } - }; - - /*========================= - Pagination - ===========================*/ - s.updatePagination = function () { - if (!s.params.pagination) return; - if (s.paginationContainer && s.paginationContainer.length > 0) { - var paginationHTML = ''; - if (s.params.paginationType === 'bullets') { - var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - for (var i = 0; i < numberOfBullets; i++) { - if (s.params.paginationBulletRender) { - paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass); - } - else { - paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">'; - } - } - s.paginationContainer.html(paginationHTML); - s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); - if (s.params.paginationClickable && s.params.a11y && s.a11y) { - s.a11y.initPagination(); - } - } - if (s.params.paginationType === 'fraction') { - if (s.params.paginationFractionRender) { - paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); - } - else { - paginationHTML = - '' + - ' / ' + - ''; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType === 'progress') { - if (s.params.paginationProgressRender) { - paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); - } - else { - paginationHTML = ''; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType !== 'custom') { - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - }; - /*========================= - Common update method - ===========================*/ - s.update = function (updateTranslate) { - if (!s) return; - s.updateContainerSize(); - s.updateSlidesSize(); - s.updateProgress(); - s.updatePagination(); - s.updateClasses(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - var newTranslate; - function forceSetTranslate() { - var translate = s.rtl ? -s.translate : s.translate; - newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - } - if (updateTranslate) { - var translated; - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - if (s.params.freeMode) { - forceSetTranslate(); - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - translated = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - translated = s.slideTo(s.activeIndex, 0, false, true); - } - if (!translated) { - forceSetTranslate(); - } - } - } - else if (s.params.autoHeight) { - s.updateAutoHeight(); - } - }; - - /*========================= - Resize Handler - ===========================*/ - s.onResize = function (forceUpdatePagination) { - if (s.params.onBeforeResize) s.params.onBeforeResize(s); - //Breakpoints - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - // Disable locks on resize - var allowSwipeToPrev = s.params.allowSwipeToPrev; - var allowSwipeToNext = s.params.allowSwipeToNext; - s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; - - s.updateContainerSize(); - s.updateSlidesSize(); - if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - var slideChangedBySlideTo = false; - if (s.params.freeMode) { - var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - s.updateClasses(); - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); - } - } - if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { - s.lazy.load(); - } - // Return locks after resize - s.params.allowSwipeToPrev = allowSwipeToPrev; - s.params.allowSwipeToNext = allowSwipeToNext; - if (s.params.onAfterResize) s.params.onAfterResize(s); - }; - - /*========================= - Events - ===========================*/ - - //Define Touch Events - s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'}; - if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'}; - else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'}; - s.touchEvents = { - start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start, - move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move, - end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end - }; - - - // WP8 Touch Events Fix - if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { - (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); - } - - // Attach/detach events - s.initEvents = function (detach) { - var actionDom = detach ? 'off' : 'on'; - var action = detach ? 'removeEventListener' : 'addEventListener'; - var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; - var target = s.support.touch ? touchEventsTarget : document; - - var moveCapture = s.params.nested ? true : false; - - //Touch Events - if (s.browser.ie) { - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); - target[action](s.touchEvents.move, s.onTouchMove, moveCapture); - target[action](s.touchEvents.end, s.onTouchEnd, false); - } - else { - if (s.support.touch) { - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener); - touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); - touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener); - } - if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) { - touchEventsTarget[action]('mousedown', s.onTouchStart, false); - document[action]('mousemove', s.onTouchMove, moveCapture); - document[action]('mouseup', s.onTouchEnd, false); - } - } - window[action]('resize', s.onResize); - - // Next, Prev, Index - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.nextButton[actionDom]('click', s.onClickNext); - if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.prevButton[actionDom]('click', s.onClickPrev); - if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.pagination && s.params.paginationClickable) { - s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); - if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); - } - - // Prevent Links Clicks - if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); - }; - s.attachEvents = function () { - s.initEvents(); - }; - s.detachEvents = function () { - s.initEvents(true); - }; - - /*========================= - Handle Clicks - ===========================*/ - // Prevent Clicks - s.allowClick = true; - s.preventClicks = function (e) { - if (!s.allowClick) { - if (s.params.preventClicks) e.preventDefault(); - if (s.params.preventClicksPropagation && s.animating) { - e.stopPropagation(); - e.stopImmediatePropagation(); - } - } - }; - // Clicks - s.onClickNext = function (e) { - e.preventDefault(); - if (s.isEnd && !s.params.loop) return; - s.slideNext(); - }; - s.onClickPrev = function (e) { - e.preventDefault(); - if (s.isBeginning && !s.params.loop) return; - s.slidePrev(); - }; - s.onClickIndex = function (e) { - e.preventDefault(); - var index = $(this).index() * s.params.slidesPerGroup; - if (s.params.loop) index = index + s.loopedSlides; - s.slideTo(index); - }; - - /*========================= - Handle Touches - ===========================*/ - function findElementInEvent(e, selector) { - var el = $(e.target); - if (!el.is(selector)) { - if (typeof selector === 'string') { - el = el.parents(selector); - } - else if (selector.nodeType) { - var found; - el.parents().each(function (index, _el) { - if (_el === selector) found = selector; - }); - if (!found) return undefined; - else return selector; - } - } - if (el.length === 0) { - return undefined; - } - return el[0]; - } - s.updateClickedSlide = function (e) { - var slide = findElementInEvent(e, '.' + s.params.slideClass); - var slideFound = false; - if (slide) { - for (var i = 0; i < s.slides.length; i++) { - if (s.slides[i] === slide) slideFound = true; - } - } - - if (slide && slideFound) { - s.clickedSlide = slide; - s.clickedIndex = $(slide).index(); - } - else { - s.clickedSlide = undefined; - s.clickedIndex = undefined; - return; - } - if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { - var slideToIndex = s.clickedIndex, - realIndex, - duplicatedSlides, - slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView; - if (s.params.loop) { - if (s.animating) return; - realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10); - if (s.params.centeredSlides) { - if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - else { - if (slideToIndex > s.slides.length - slidesPerView) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - } - else { - s.slideTo(slideToIndex); - } - } - }; - - var isTouched, - isMoved, - allowTouchCallbacks, - touchStartTime, - isScrolling, - currentTranslate, - startTranslate, - allowThresholdMove, - // Form elements to match - formElements = 'input, select, textarea, button, video', - // Last click time - lastClickTime = Date.now(), clickTimeout, - //Velocities - velocities = [], - allowMomentumBounce; - - // Animating Flag - s.animating = false; - - // Touches information - s.touches = { - startX: 0, - startY: 0, - currentX: 0, - currentY: 0, - diff: 0 - }; - - // Touch handlers - var isTouchEvent, startMoving; - s.onTouchStart = function (e) { - if (e.originalEvent) e = e.originalEvent; - isTouchEvent = e.type === 'touchstart'; - if (!isTouchEvent && 'which' in e && e.which === 3) return; - if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { - s.allowClick = true; - return; - } - if (s.params.swipeHandler) { - if (!findElementInEvent(e, s.params.swipeHandler)) return; - } - - var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - - // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore - if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { - return; - } - - isTouched = true; - isMoved = false; - allowTouchCallbacks = true; - isScrolling = undefined; - startMoving = undefined; - s.touches.startX = startX; - s.touches.startY = startY; - touchStartTime = Date.now(); - s.allowClick = true; - s.updateContainerSize(); - s.swipeDirection = undefined; - if (s.params.threshold > 0) allowThresholdMove = false; - if (e.type !== 'touchstart') { - var preventDefault = true; - if ($(e.target).is(formElements)) preventDefault = false; - if (document.activeElement && $(document.activeElement).is(formElements)) { - document.activeElement.blur(); - } - if (preventDefault) { - e.preventDefault(); - } - } - s.emit('onTouchStart', s, e); - }; - - s.onTouchMove = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (isTouchEvent && e.type === 'mousemove') return; - if (e.preventedByNestedSwiper) { - s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - return; - } - if (s.params.onlyExternal) { - // isMoved = true; - s.allowClick = false; - if (isTouched) { - s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - touchStartTime = Date.now(); - } - return; - } - if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) { - if (!s.isHorizontal()) { - // Vertical - if ( - (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) || - (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate()) - ) { - return; - } - } - else { - if ( - (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) || - (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate()) - ) { - return; - } - } - } - if (isTouchEvent && document.activeElement) { - if (e.target === document.activeElement && $(e.target).is(formElements)) { - isMoved = true; - s.allowClick = false; - return; - } - } - if (allowTouchCallbacks) { - s.emit('onTouchMove', s, e); - } - if (e.targetTouches && e.targetTouches.length > 1) return; - - s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (typeof isScrolling === 'undefined') { - var touchAngle; - if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) { - isScrolling = false; - } - else { - touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; - isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); - } - } - if (isScrolling) { - s.emit('onTouchMoveOpposite', s, e); - } - if (typeof startMoving === 'undefined') { - if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { - startMoving = true; - } - } - if (!isTouched) return; - if (isScrolling) { - isTouched = false; - return; - } - if (!startMoving) { - return; - } - s.allowClick = false; - s.emit('onSliderMove', s, e); - e.preventDefault(); - if (s.params.touchMoveStopPropagation && !s.params.nested) { - e.stopPropagation(); - } - - if (!isMoved) { - if (params.loop) { - s.fixLoop(); - } - startTranslate = s.getWrapperTranslate(); - s.setWrapperTransition(0); - if (s.animating) { - s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); - } - if (s.params.autoplay && s.autoplaying) { - if (s.params.autoplayDisableOnInteraction) { - s.stopAutoplay(); - } - else { - s.pauseAutoplay(); - } - } - allowMomentumBounce = false; - //Grab Cursor - if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(true); - } - } - isMoved = true; - - var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - - diff = diff * s.params.touchRatio; - if (s.rtl) diff = -diff; - - s.swipeDirection = diff > 0 ? 'prev' : 'next'; - currentTranslate = diff + startTranslate; - - var disableParentSwiper = true; - if ((diff > 0 && currentTranslate > s.minTranslate())) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); - } - else if (diff < 0 && currentTranslate < s.maxTranslate()) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); - } - - if (disableParentSwiper) { - e.preventedByNestedSwiper = true; - } - - // Directions locks - if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { - currentTranslate = startTranslate; - } - if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { - currentTranslate = startTranslate; - } - - - // Threshold - if (s.params.threshold > 0) { - if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { - if (!allowThresholdMove) { - allowThresholdMove = true; - s.touches.startX = s.touches.currentX; - s.touches.startY = s.touches.currentY; - currentTranslate = startTranslate; - s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - return; - } - } - else { - currentTranslate = startTranslate; - return; - } - } - - if (!s.params.followFinger) return; - - // Update active index in free mode - if (s.params.freeMode || s.params.watchSlidesProgress) { - s.updateActiveIndex(); - } - if (s.params.freeMode) { - //Velocity - if (velocities.length === 0) { - velocities.push({ - position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], - time: touchStartTime - }); - } - velocities.push({ - position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], - time: (new window.Date()).getTime() - }); - } - // Update progress - s.updateProgress(currentTranslate); - // Update translate - s.setWrapperTranslate(currentTranslate); - }; - s.onTouchEnd = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (allowTouchCallbacks) { - s.emit('onTouchEnd', s, e); - } - allowTouchCallbacks = false; - if (!isTouched) return; - //Return Grab Cursor - if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(false); - } - - // Time diff - var touchEndTime = Date.now(); - var timeDiff = touchEndTime - touchStartTime; - - // Tap, doubleTap, Click - if (s.allowClick) { - s.updateClickedSlide(e); - s.emit('onTap', s, e); - if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { - if (clickTimeout) clearTimeout(clickTimeout); - clickTimeout = setTimeout(function () { - if (!s) return; - if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { - s.paginationContainer.toggleClass(s.params.paginationHiddenClass); - } - s.emit('onClick', s, e); - }, 300); - - } - if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { - if (clickTimeout) clearTimeout(clickTimeout); - s.emit('onDoubleTap', s, e); - } - } - - lastClickTime = Date.now(); - setTimeout(function () { - if (s) s.allowClick = true; - }, 0); - - if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { - isTouched = isMoved = false; - return; - } - isTouched = isMoved = false; - - var currentPos; - if (s.params.followFinger) { - currentPos = s.rtl ? s.translate : -s.translate; - } - else { - currentPos = -currentTranslate; - } - if (s.params.freeMode) { - if (currentPos < -s.minTranslate()) { - s.slideTo(s.activeIndex); - return; - } - else if (currentPos > -s.maxTranslate()) { - if (s.slides.length < s.snapGrid.length) { - s.slideTo(s.snapGrid.length - 1); - } - else { - s.slideTo(s.slides.length - 1); - } - return; - } - - if (s.params.freeModeMomentum) { - if (velocities.length > 1) { - var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); - - var distance = lastMoveEvent.position - velocityEvent.position; - var time = lastMoveEvent.time - velocityEvent.time; - s.velocity = distance / time; - s.velocity = s.velocity / 2; - if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { - s.velocity = 0; - } - // this implies that the user stopped moving a finger then released. - // There would be no events with distance zero, so the last event is stale. - if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { - s.velocity = 0; - } - } else { - s.velocity = 0; - } - s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio; - - velocities.length = 0; - var momentumDuration = 1000 * s.params.freeModeMomentumRatio; - var momentumDistance = s.velocity * momentumDuration; - - var newPosition = s.translate + momentumDistance; - if (s.rtl) newPosition = - newPosition; - var doBounce = false; - var afterBouncePosition; - var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; - if (newPosition < s.maxTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition + s.maxTranslate() < -bounceAmount) { - newPosition = s.maxTranslate() - bounceAmount; - } - afterBouncePosition = s.maxTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.maxTranslate(); - } - } - else if (newPosition > s.minTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition - s.minTranslate() > bounceAmount) { - newPosition = s.minTranslate() + bounceAmount; - } - afterBouncePosition = s.minTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.minTranslate(); - } - } - else if (s.params.freeModeSticky) { - var j = 0, - nextSlide; - for (j = 0; j < s.snapGrid.length; j += 1) { - if (s.snapGrid[j] > -newPosition) { - nextSlide = j; - break; - } - - } - if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { - newPosition = s.snapGrid[nextSlide]; - } else { - newPosition = s.snapGrid[nextSlide - 1]; - } - if (!s.rtl) newPosition = - newPosition; - } - //Fix duration - if (s.velocity !== 0) { - if (s.rtl) { - momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); - } - else { - momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); - } - } - else if (s.params.freeModeSticky) { - s.slideReset(); - return; - } - - if (s.params.freeModeMomentumBounce && doBounce) { - s.updateProgress(afterBouncePosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s || !allowMomentumBounce) return; - s.emit('onMomentumBounce', s); - - s.setWrapperTransition(s.params.speed); - s.setWrapperTranslate(afterBouncePosition); - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - }); - } else if (s.velocity) { - s.updateProgress(newPosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - } - - } else { - s.updateProgress(newPosition); - } - - s.updateActiveIndex(); - } - if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { - s.updateProgress(); - s.updateActiveIndex(); - } - return; - } - - // Find current slide - var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; - for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { - if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { - if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { - stopIndex = i; - groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; - } - } - else { - if (currentPos >= s.slidesGrid[i]) { - stopIndex = i; - groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; - } - } - } - - // Find current slide size - var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; - - if (timeDiff > s.params.longSwipesMs) { - // Long touches - if (!s.params.longSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - - } - if (s.swipeDirection === 'prev') { - if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - } - } - else { - // Short swipes - if (!s.params.shortSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - s.slideTo(stopIndex + s.params.slidesPerGroup); - - } - if (s.swipeDirection === 'prev') { - s.slideTo(stopIndex); - } - } - }; - /*========================= - Transitions - ===========================*/ - s._slideTo = function (slideIndex, speed) { - return s.slideTo(slideIndex, speed, true, true); - }; - s.slideTo = function (slideIndex, speed, runCallbacks, internal) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (typeof slideIndex === 'undefined') slideIndex = 0; - if (slideIndex < 0) slideIndex = 0; - s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); - if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; - - var translate = - s.snapGrid[s.snapIndex]; - // Stop autoplay - if (s.params.autoplay && s.autoplaying) { - if (internal || !s.params.autoplayDisableOnInteraction) { - s.pauseAutoplay(speed); - } - else { - s.stopAutoplay(); - } - } - // Update progress - s.updateProgress(translate); - - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - for (var i = 0; i < s.slidesGrid.length; i++) { - if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { - slideIndex = i; - } - } - } - - // Directions locks - if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { - return false; - } - if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { - if ((s.activeIndex || 0) !== slideIndex ) return false; - } - - // Update Index - if (typeof speed === 'undefined') speed = s.params.speed; - s.previousIndex = s.activeIndex || 0; - s.activeIndex = slideIndex; - s.updateRealIndex(); - if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { - // Update Height - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - s.updateClasses(); - if (s.params.effect !== 'slide') { - s.setWrapperTranslate(translate); - } - return false; - } - s.updateClasses(); - s.onTransitionStart(runCallbacks); - - if (speed === 0 || s.browser.lteIE9) { - s.setWrapperTranslate(translate); - s.setWrapperTransition(0); - s.onTransitionEnd(runCallbacks); - } - else { - s.setWrapperTranslate(translate); - s.setWrapperTransition(speed); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(runCallbacks); - }); - } - - } - - return true; - }; - - s.onTransitionStart = function (runCallbacks) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - if (s.lazy) s.lazy.onTransitionStart(); - if (runCallbacks) { - s.emit('onTransitionStart', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeStart', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextStart', s); - } - else { - s.emit('onSlidePrevStart', s); - } - } - - } - }; - s.onTransitionEnd = function (runCallbacks) { - s.animating = false; - s.setWrapperTransition(0); - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.lazy) s.lazy.onTransitionEnd(); - if (runCallbacks) { - s.emit('onTransitionEnd', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeEnd', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextEnd', s); - } - else { - s.emit('onSlidePrevEnd', s); - } - } - } - if (s.params.history && s.history) { - s.history.setHistory(s.params.history, s.activeIndex); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.setHash(); - } - - }; - s.slideNext = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - }; - s._slideNext = function (speed) { - return s.slideNext(true, speed, true); - }; - s.slidePrev = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - }; - s._slidePrev = function (speed) { - return s.slidePrev(true, speed, true); - }; - s.slideReset = function (runCallbacks, speed, internal) { - return s.slideTo(s.activeIndex, speed, runCallbacks); - }; - - s.disableTouchControl = function () { - s.params.onlyExternal = true; - return true; - }; - s.enableTouchControl = function () { - s.params.onlyExternal = false; - return true; - }; - - /*========================= - Translate/transition helpers - ===========================*/ - s.setWrapperTransition = function (duration, byController) { - s.wrapper.transition(duration); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTransition(duration); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTransition(duration); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTransition(duration); - } - if (s.params.control && s.controller) { - s.controller.setTransition(duration, byController); - } - s.emit('onSetTransition', s, duration); - }; - s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { - var x = 0, y = 0, z = 0; - if (s.isHorizontal()) { - x = s.rtl ? -translate : translate; - } - else { - y = translate; - } - - if (s.params.roundLengths) { - x = round(x); - y = round(y); - } - - if (!s.params.virtualTranslate) { - if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); - else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); - } - - s.translate = s.isHorizontal() ? x : y; - - // Check if we need to update progress - var progress; - var translatesDiff = s.maxTranslate() - s.minTranslate(); - if (translatesDiff === 0) { - progress = 0; - } - else { - progress = (translate - s.minTranslate()) / (translatesDiff); - } - if (progress !== s.progress) { - s.updateProgress(translate); - } - - if (updateActiveIndex) s.updateActiveIndex(); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTranslate(s.translate); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTranslate(s.translate); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTranslate(s.translate); - } - if (s.params.control && s.controller) { - s.controller.setTranslate(s.translate, byController); - } - s.emit('onSetTranslate', s, s.translate); - }; - - s.getTranslate = function (el, axis) { - var matrix, curTransform, curStyle, transformMatrix; - - // automatic axis detection - if (typeof axis === 'undefined') { - axis = 'x'; - } - - if (s.params.virtualTranslate) { - return s.rtl ? -s.translate : s.translate; - } - - curStyle = window.getComputedStyle(el, null); - if (window.WebKitCSSMatrix) { - curTransform = curStyle.transform || curStyle.webkitTransform; - if (curTransform.split(',').length > 6) { - curTransform = curTransform.split(', ').map(function(a){ - return a.replace(',','.'); - }).join(', '); - } - // Some old versions of Webkit choke when 'none' is passed; pass - // empty string instead in this case - transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); - } - else { - transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); - matrix = transformMatrix.toString().split(','); - } - - if (axis === 'x') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m41; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[12]); - //Normal Browsers - else - curTransform = parseFloat(matrix[4]); - } - if (axis === 'y') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m42; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[13]); - //Normal Browsers - else - curTransform = parseFloat(matrix[5]); - } - if (s.rtl && curTransform) curTransform = -curTransform; - return curTransform || 0; - }; - s.getWrapperTranslate = function (axis) { - if (typeof axis === 'undefined') { - axis = s.isHorizontal() ? 'x' : 'y'; - } - return s.getTranslate(s.wrapper[0], axis); - }; - - /*========================= - Observer - ===========================*/ - s.observers = []; - function initObserver(target, options) { - options = options || {}; - // create an observer instance - var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; - var observer = new ObserverFunc(function (mutations) { - mutations.forEach(function (mutation) { - s.onResize(true); - s.emit('onObserverUpdate', s, mutation); - }); - }); - - observer.observe(target, { - attributes: typeof options.attributes === 'undefined' ? true : options.attributes, - childList: typeof options.childList === 'undefined' ? true : options.childList, - characterData: typeof options.characterData === 'undefined' ? true : options.characterData - }); - - s.observers.push(observer); - } - s.initObservers = function () { - if (s.params.observeParents) { - var containerParents = s.container.parents(); - for (var i = 0; i < containerParents.length; i++) { - initObserver(containerParents[i]); - } - } - - // Observe container - initObserver(s.container[0], {childList: false}); - - // Observe wrapper - initObserver(s.wrapper[0], {attributes: false}); - }; - s.disconnectObservers = function () { - for (var i = 0; i < s.observers.length; i++) { - s.observers[i].disconnect(); - } - s.observers = []; - }; - /*========================= - Loop - ===========================*/ - // Create looped slides - s.createLoop = function () { - // Remove duplicated slides - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - - var slides = s.wrapper.children('.' + s.params.slideClass); - - if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; - - s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); - s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; - if (s.loopedSlides > slides.length) { - s.loopedSlides = slides.length; - } - - var prependSlides = [], appendSlides = [], i; - slides.each(function (index, el) { - var slide = $(this); - if (index < s.loopedSlides) appendSlides.push(el); - if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); - slide.attr('data-swiper-slide-index', index); - }); - for (i = 0; i < appendSlides.length; i++) { - s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - for (i = prependSlides.length - 1; i >= 0; i--) { - s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - }; - s.destroyLoop = function () { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - s.slides.removeAttr('data-swiper-slide-index'); - }; - s.reLoop = function (updatePosition) { - var oldIndex = s.activeIndex - s.loopedSlides; - s.destroyLoop(); - s.createLoop(); - s.updateSlidesSize(); - if (updatePosition) { - s.slideTo(oldIndex + s.loopedSlides, 0, false); - } - - }; - s.fixLoop = function () { - var newIndex; - //Fix For Negative Oversliding - if (s.activeIndex < s.loopedSlides) { - newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - //Fix For Positive Oversliding - else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { - newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - }; - /*========================= - Append/Prepend/Remove Slides - ===========================*/ - s.appendSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.append(slides[i]); - } - } - else { - s.wrapper.append(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - }; - s.prependSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - var newActiveIndex = s.activeIndex + 1; - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.prepend(slides[i]); - } - newActiveIndex = s.activeIndex + slides.length; - } - else { - s.wrapper.prepend(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - s.slideTo(newActiveIndex, 0, false); - }; - s.removeSlide = function (slidesIndexes) { - if (s.params.loop) { - s.destroyLoop(); - s.slides = s.wrapper.children('.' + s.params.slideClass); - } - var newActiveIndex = s.activeIndex, - indexToRemove; - if (typeof slidesIndexes === 'object' && slidesIndexes.length) { - for (var i = 0; i < slidesIndexes.length; i++) { - indexToRemove = slidesIndexes[i]; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - } - newActiveIndex = Math.max(newActiveIndex, 0); - } - else { - indexToRemove = slidesIndexes; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - newActiveIndex = Math.max(newActiveIndex, 0); - } - - if (s.params.loop) { - s.createLoop(); - } - - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - if (s.params.loop) { - s.slideTo(newActiveIndex + s.loopedSlides, 0, false); - } - else { - s.slideTo(newActiveIndex, 0, false); - } - - }; - s.removeAllSlides = function () { - var slidesIndexes = []; - for (var i = 0; i < s.slides.length; i++) { - slidesIndexes.push(i); - } - s.removeSlide(slidesIndexes); - }; - - - /*========================= - Effects - ===========================*/ - s.effects = { - fade: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var offset = slide[0].swiperSlideOffset; - var tx = -offset; - if (!s.params.virtualTranslate) tx = tx - s.translate; - var ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - var slideOpacity = s.params.fade.crossFade ? - Math.max(1 - Math.abs(slide[0].progress), 0) : - 1 + Math.min(Math.max(slide[0].progress, -1), 0); - slide - .css({ - opacity: slideOpacity - }) - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); - - } - - }, - setTransition: function (duration) { - s.slides.transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - flip: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var progress = slide[0].progress; - if (s.params.flip.limitRotation) { - progress = Math.max(Math.min(slide[0].progress, 1), -1); - } - var offset = slide[0].swiperSlideOffset; - var rotate = -180 * progress, - rotateY = rotate, - rotateX = 0, - tx = -offset, - ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - rotateX = -rotateY; - rotateY = 0; - } - else if (s.rtl) { - rotateY = -rotateY; - } - - slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; - - if (s.params.flip.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - - slide - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.eq(s.activeIndex).transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - if (!$(this).hasClass(s.params.slideActiveClass)) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - cube: { - setTranslate: function () { - var wrapperRotate = 0, cubeShadow; - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow = s.wrapper.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('
'); - s.wrapper.append(cubeShadow); - } - cubeShadow.css({height: s.width + 'px'}); - } - else { - cubeShadow = s.container.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('
'); - s.container.append(cubeShadow); - } - } - } - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var slideAngle = i * 90; - var round = Math.floor(slideAngle / 360); - if (s.rtl) { - slideAngle = -slideAngle; - round = Math.floor(-slideAngle / 360); - } - var progress = Math.max(Math.min(slide[0].progress, 1), -1); - var tx = 0, ty = 0, tz = 0; - if (i % 4 === 0) { - tx = - round * 4 * s.size; - tz = 0; - } - else if ((i - 1) % 4 === 0) { - tx = 0; - tz = - round * 4 * s.size; - } - else if ((i - 2) % 4 === 0) { - tx = s.size + round * 4 * s.size; - tz = s.size; - } - else if ((i - 3) % 4 === 0) { - tx = - s.size; - tz = 3 * s.size + s.size * 4 * round; - } - if (s.rtl) { - tx = -tx; - } - - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - - var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; - if (progress <= 1 && progress > -1) { - wrapperRotate = i * 90 + progress * 90; - if (s.rtl) wrapperRotate = -i * 90 - progress * 90; - } - slide.transform(transform); - if (s.params.cube.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - } - s.wrapper.css({ - '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' - }); - - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); - } - else { - var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; - var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); - var scale1 = s.params.cube.shadowScale, - scale2 = s.params.cube.shadowScale / multiplier, - offset = s.params.cube.shadowOffset; - cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); - } - } - var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; - s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.cube.shadow && !s.isHorizontal()) { - s.container.find('.swiper-cube-shadow').transition(duration); - } - } - }, - coverflow: { - setTranslate: function () { - var transform = s.translate; - var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; - var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; - var translate = s.params.coverflow.depth; - //Each slide offset from center - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideSize = s.slidesSizesGrid[i]; - var slideOffset = slide[0].swiperSlideOffset; - var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; - - var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; - var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; - // var rotateZ = 0 - var translateZ = -translate * Math.abs(offsetMultiplier); - - var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); - var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; - - //Fix for ultra small values - if (Math.abs(translateX) < 0.001) translateX = 0; - if (Math.abs(translateY) < 0.001) translateY = 0; - if (Math.abs(translateZ) < 0.001) translateZ = 0; - if (Math.abs(rotateY) < 0.001) rotateY = 0; - if (Math.abs(rotateX) < 0.001) rotateX = 0; - - var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; - - slide.transform(slideTransform); - slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; - if (s.params.coverflow.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; - if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; - } - } - - //Set correct perspective for IE10 - if (s.browser.ie) { - var ws = s.wrapper[0].style; - ws.perspectiveOrigin = center + 'px 50%'; - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - } - } - }; - - - /*========================= - Images Lazy Loading - ===========================*/ - s.lazy = { - initialImageLoaded: false, - loadImageInSlide: function (index, loadInDuplicate) { - if (typeof index === 'undefined') return; - if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; - if (s.slides.length === 0) return; - - var slide = s.slides.eq(index); - var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')'); - if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) { - img = img.add(slide[0]); - } - if (img.length === 0) return; - - img.each(function () { - var _img = $(this); - _img.addClass(s.params.lazyStatusLoadingClass); - var background = _img.attr('data-background'); - var src = _img.attr('data-src'), - srcset = _img.attr('data-srcset'), - sizes = _img.attr('data-sizes'); - s.loadImage(_img[0], (src || background), srcset, sizes, false, function () { - if (typeof s === 'undefined' || s === null || !s) return; - if (background) { - _img.css('background-image', 'url("' + background + '")'); - _img.removeAttr('data-background'); - } - else { - if (srcset) { - _img.attr('srcset', srcset); - _img.removeAttr('data-srcset'); - } - if (sizes) { - _img.attr('sizes', sizes); - _img.removeAttr('data-sizes'); - } - if (src) { - _img.attr('src', src); - _img.removeAttr('data-src'); - } - - } - - _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass); - slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove(); - if (s.params.loop && loadInDuplicate) { - var slideOriginalIndex = slide.attr('data-swiper-slide-index'); - if (slide.hasClass(s.params.slideDuplicateClass)) { - var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); - s.lazy.loadImageInSlide(originalSlide.index(), false); - } - else { - var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); - s.lazy.loadImageInSlide(duplicatedSlide.index(), false); - } - } - s.emit('onLazyImageReady', s, slide[0], _img[0]); - }); - - s.emit('onLazyImageLoad', s, slide[0], _img[0]); - }); - - }, - load: function () { - var i; - var slidesPerView = s.params.slidesPerView; - if (slidesPerView === 'auto') { - slidesPerView = 0; - } - if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true; - if (s.params.watchSlidesVisibility) { - s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { - s.lazy.loadImageInSlide($(this).index()); - }); - } - else { - if (slidesPerView > 1) { - for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - s.lazy.loadImageInSlide(s.activeIndex); - } - } - if (s.params.lazyLoadingInPrevNext) { - if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { - var amount = s.params.lazyLoadingInPrevNextAmount; - var spv = slidesPerView; - var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); - var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); - // Next Slides - for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - // Prev Slides - for (i = minIndex; i < s.activeIndex ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); - if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); - - var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); - if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); - } - } - }, - onTransitionStart: function () { - if (s.params.lazyLoading) { - if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { - s.lazy.load(); - } - } - }, - onTransitionEnd: function () { - if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { - s.lazy.load(); - } - } - }; - - - /*========================= - Scrollbar - ===========================*/ - s.scrollbar = { - isTouched: false, - setDragPosition: function (e) { - var sb = s.scrollbar; - var x = 0, y = 0; - var translate; - var pointerPosition = s.isHorizontal() ? - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; - var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; - var positionMin = -s.minTranslate() * sb.moveDivider; - var positionMax = -s.maxTranslate() * sb.moveDivider; - if (position < positionMin) { - position = positionMin; - } - else if (position > positionMax) { - position = positionMax; - } - position = -position / sb.moveDivider; - s.updateProgress(position); - s.setWrapperTranslate(position, true); - }, - dragStart: function (e) { - var sb = s.scrollbar; - sb.isTouched = true; - e.preventDefault(); - e.stopPropagation(); - - sb.setDragPosition(e); - clearTimeout(sb.dragTimeout); - - sb.track.transition(0); - if (s.params.scrollbarHide) { - sb.track.css('opacity', 1); - } - s.wrapper.transition(100); - sb.drag.transition(100); - s.emit('onScrollbarDragStart', s); - }, - dragMove: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - sb.setDragPosition(e); - s.wrapper.transition(0); - sb.track.transition(0); - sb.drag.transition(0); - s.emit('onScrollbarDragMove', s); - }, - dragEnd: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - sb.isTouched = false; - if (s.params.scrollbarHide) { - clearTimeout(sb.dragTimeout); - sb.dragTimeout = setTimeout(function () { - sb.track.css('opacity', 0); - sb.track.transition(400); - }, 1000); - - } - s.emit('onScrollbarDragEnd', s); - if (s.params.scrollbarSnapOnRelease) { - s.slideReset(); - } - }, - draggableEvents: (function () { - if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop; - else return s.touchEvents; - })(), - enableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).on(sb.draggableEvents.start, sb.dragStart); - $(target).on(sb.draggableEvents.move, sb.dragMove); - $(target).on(sb.draggableEvents.end, sb.dragEnd); - }, - disableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).off(sb.draggableEvents.start, sb.dragStart); - $(target).off(sb.draggableEvents.move, sb.dragMove); - $(target).off(sb.draggableEvents.end, sb.dragEnd); - }, - set: function () { - if (!s.params.scrollbar) return; - var sb = s.scrollbar; - sb.track = $(s.params.scrollbar); - if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { - sb.track = s.container.find(s.params.scrollbar); - } - sb.drag = sb.track.find('.swiper-scrollbar-drag'); - if (sb.drag.length === 0) { - sb.drag = $('
'); - sb.track.append(sb.drag); - } - sb.drag[0].style.width = ''; - sb.drag[0].style.height = ''; - sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; - - sb.divider = s.size / s.virtualSize; - sb.moveDivider = sb.divider * (sb.trackSize / s.size); - sb.dragSize = sb.trackSize * sb.divider; - - if (s.isHorizontal()) { - sb.drag[0].style.width = sb.dragSize + 'px'; - } - else { - sb.drag[0].style.height = sb.dragSize + 'px'; - } - - if (sb.divider >= 1) { - sb.track[0].style.display = 'none'; - } - else { - sb.track[0].style.display = ''; - } - if (s.params.scrollbarHide) { - sb.track[0].style.opacity = 0; - } - }, - setTranslate: function () { - if (!s.params.scrollbar) return; - var diff; - var sb = s.scrollbar; - var translate = s.translate || 0; - var newPos; - - var newSize = sb.dragSize; - newPos = (sb.trackSize - sb.dragSize) * s.progress; - if (s.rtl && s.isHorizontal()) { - newPos = -newPos; - if (newPos > 0) { - newSize = sb.dragSize - newPos; - newPos = 0; - } - else if (-newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize + newPos; - } - } - else { - if (newPos < 0) { - newSize = sb.dragSize + newPos; - newPos = 0; - } - else if (newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize - newPos; - } - } - if (s.isHorizontal()) { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); - } - else { - sb.drag.transform('translateX(' + (newPos) + 'px)'); - } - sb.drag[0].style.width = newSize + 'px'; - } - else { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); - } - else { - sb.drag.transform('translateY(' + (newPos) + 'px)'); - } - sb.drag[0].style.height = newSize + 'px'; - } - if (s.params.scrollbarHide) { - clearTimeout(sb.timeout); - sb.track[0].style.opacity = 1; - sb.timeout = setTimeout(function () { - sb.track[0].style.opacity = 0; - sb.track.transition(400); - }, 1000); - } - }, - setTransition: function (duration) { - if (!s.params.scrollbar) return; - s.scrollbar.drag.transition(duration); - } - }; - - - /*========================= - Controller - ===========================*/ - s.controller = { - LinearSpline: function (x, y) { - var binarySearch = (function() { - var maxIndex, minIndex, guess; - return function(array, val) { - minIndex = -1; - maxIndex = array.length; - while (maxIndex - minIndex > 1) - if (array[guess = maxIndex + minIndex >> 1] <= val) { - minIndex = guess; - } else { - maxIndex = guess; - } - return maxIndex; - }; - })(); - this.x = x; - this.y = y; - this.lastIndex = x.length - 1; - // Given an x value (x2), return the expected y2 value: - // (x1,y1) is the known point before given value, - // (x3,y3) is the known point after given value. - var i1, i3; - var l = this.x.length; - - this.interpolate = function (x2) { - if (!x2) return 0; - - // Get the indexes of x1 and x3 (the array indexes before and after given x2): - i3 = binarySearch(this.x, x2); - i1 = i3 - 1; - - // We have our indexes i1 & i3, so we can calculate already: - // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 - return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; - }; - }, - //xxx: for now i will just save one spline function to to - getInterpolateFunction: function(c){ - if(!s.controller.spline) s.controller.spline = s.params.loop ? - new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : - new s.controller.LinearSpline(s.snapGrid, c.snapGrid); - }, - setTranslate: function (translate, byController) { - var controlled = s.params.control; - var multiplier, controlledTranslate; - function setControlledTranslate(c) { - // this will create an Interpolate function based on the snapGrids - // x is the Grid of the scrolled scroller and y will be the controlled scroller - // it makes sense to create this only once and recall it for the interpolation - // the function does a lot of value caching for performance - translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; - if (s.params.controlBy === 'slide') { - s.controller.getInterpolateFunction(c); - // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid - // but it did not work out - controlledTranslate = -s.controller.spline.interpolate(-translate); - } - - if(!controlledTranslate || s.params.controlBy === 'container'){ - multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); - controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); - } - - if (s.params.controlInverse) { - controlledTranslate = c.maxTranslate() - controlledTranslate; - } - c.updateProgress(controlledTranslate); - c.setWrapperTranslate(controlledTranslate, false, s); - c.updateActiveIndex(); - } - if (Array.isArray(controlled)) { - for (var i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTranslate(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - - setControlledTranslate(controlled); - } - }, - setTransition: function (duration, byController) { - var controlled = s.params.control; - var i; - function setControlledTransition(c) { - c.setWrapperTransition(duration, s); - if (duration !== 0) { - c.onTransitionStart(); - c.wrapper.transitionEnd(function(){ - if (!controlled) return; - if (c.params.loop && s.params.controlBy === 'slide') { - c.fixLoop(); - } - c.onTransitionEnd(); - - }); - } - } - if (Array.isArray(controlled)) { - for (i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTransition(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - setControlledTransition(controlled); - } - } - }; - - - /*========================= - Hash Navigation - ===========================*/ - s.hashnav = { - onHashCange: function (e, a) { - var newHash = document.location.hash.replace('#', ''); - var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash'); - if (newHash !== activeSlideHash) { - s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash="' + (newHash) + '"]').index()); - } - }, - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - $(window)[action]('hashchange', s.hashnav.onHashCange); - }, - setHash: function () { - if (!s.hashnav.initialized || !s.params.hashnav) return; - if (s.params.replaceState && window.history && window.history.replaceState) { - window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || '')); - } else { - var slide = s.slides.eq(s.activeIndex); - var hash = slide.attr('data-hash') || slide.attr('data-history'); - document.location.hash = hash || ''; - } - }, - init: function () { - if (!s.params.hashnav || s.params.history) return; - s.hashnav.initialized = true; - var hash = document.location.hash.replace('#', ''); - if (hash) { - var speed = 0; - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHash = slide.attr('data-hash') || slide.attr('data-history'); - if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, s.params.runCallbacksOnInit, true); - } - } - } - if (s.params.hashnavWatchState) s.hashnav.attachEvents(); - }, - destroy: function () { - if (s.params.hashnavWatchState) s.hashnav.attachEvents(true); - } - }; - - - /*========================= - History Api with fallback to Hashnav - ===========================*/ - s.history = { - init: function () { - if (!s.params.history) return; - if (!window.history || !window.history.pushState) { - s.params.history = false; - s.params.hashnav = true; - return; - } - s.history.initialized = true; - this.paths = this.getPathValues(); - if (!this.paths.key && !this.paths.value) return; - this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit); - if (!s.params.replaceState) { - window.addEventListener('popstate', this.setHistoryPopState); - } - }, - setHistoryPopState: function() { - s.history.paths = s.history.getPathValues(); - s.history.scrollToSlide(s.params.speed, s.history.paths.value, false); - }, - getPathValues: function() { - var pathArray = window.location.pathname.slice(1).split('/'); - var total = pathArray.length; - var key = pathArray[total - 2]; - var value = pathArray[total - 1]; - return { key: key, value: value }; - }, - setHistory: function (key, index) { - if (!s.history.initialized || !s.params.history) return; - var slide = s.slides.eq(index); - var value = this.slugify(slide.attr('data-history')); - if (!window.location.pathname.includes(key)) { - value = key + '/' + value; - } - if (s.params.replaceState) { - window.history.replaceState(null, null, value); - } else { - window.history.pushState(null, null, value); - } - }, - slugify: function(text) { - return text.toString().toLowerCase() - .replace(/\s+/g, '-') - .replace(/[^\w\-]+/g, '') - .replace(/\-\-+/g, '-') - .replace(/^-+/, '') - .replace(/-+$/, ''); - }, - scrollToSlide: function(speed, value, runCallbacks) { - if (value) { - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHistory = this.slugify(slide.attr('data-history')); - if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, runCallbacks); - } - } - } else { - s.slideTo(0, speed, runCallbacks); - } - } - }; - - - /*========================= - Keyboard Control - ===========================*/ - function handleKeyboard(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var kc = e.keyCode || e.charCode; - // Directions locks - if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { - return false; - } - if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { - return false; - } - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { - return; - } - if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { - return; - } - if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { - var inView = false; - //Check that swiper should be inside of visible area of window - if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) { - return; - } - var windowScroll = { - left: window.pageXOffset, - top: window.pageYOffset - }; - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var swiperOffset = s.container.offset(); - if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; - var swiperCoord = [ - [swiperOffset.left, swiperOffset.top], - [swiperOffset.left + s.width, swiperOffset.top], - [swiperOffset.left, swiperOffset.top + s.height], - [swiperOffset.left + s.width, swiperOffset.top + s.height] - ]; - for (var i = 0; i < swiperCoord.length; i++) { - var point = swiperCoord[i]; - if ( - point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && - point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight - ) { - inView = true; - } - - } - if (!inView) return; - } - if (s.isHorizontal()) { - if (kc === 37 || kc === 39) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); - if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); - } - else { - if (kc === 38 || kc === 40) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if (kc === 40) s.slideNext(); - if (kc === 38) s.slidePrev(); - } - s.emit('onKeyPress', s, kc); - } - s.disableKeyboardControl = function () { - s.params.keyboardControl = false; - $(document).off('keydown', handleKeyboard); - }; - s.enableKeyboardControl = function () { - s.params.keyboardControl = true; - $(document).on('keydown', handleKeyboard); - }; - - - /*========================= - Mousewheel Control - ===========================*/ - s.mousewheel = { - event: false, - lastScrollTime: (new window.Date()).getTime() - }; - function isEventSupported() { - var eventName = 'onwheel'; - var isSupported = eventName in document; - - if (!isSupported) { - var element = document.createElement('div'); - element.setAttribute(eventName, 'return;'); - isSupported = typeof element[eventName] === 'function'; - } - - if (!isSupported && - document.implementation && - document.implementation.hasFeature && - // always returns true in newer browsers as per the standard. - // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature - document.implementation.hasFeature('', '') !== true ) { - // This is the only way to test support for the `wheel` event in IE9+. - isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); - } - - return isSupported; - } - /** - * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is - * complicated, thus this doc is long and (hopefully) detailed enough to answer - * your questions. - * - * If you need to react to the mouse wheel in a predictable way, this code is - * like your bestest friend. * hugs * - * - * As of today, there are 4 DOM event types you can listen to: - * - * 'wheel' -- Chrome(31+), FF(17+), IE(9+) - * 'mousewheel' -- Chrome, IE(6+), Opera, Safari - * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother! - * 'DOMMouseScroll' -- FF(0.9.7+) since 2003 - * - * So what to do? The is the best: - * - * normalizeWheel.getEventType(); - * - * In your event callback, use this code to get sane interpretation of the - * deltas. This code will return an object with properties: - * - * spinX -- normalized spin speed (use for zoom) - x plane - * spinY -- " - y plane - * pixelX -- normalized distance (to pixels) - x plane - * pixelY -- " - y plane - * - * Wheel values are provided by the browser assuming you are using the wheel to - * scroll a web page by a number of lines or pixels (or pages). Values can vary - * significantly on different platforms and browsers, forgetting that you can - * scroll at different speeds. Some devices (like trackpads) emit more events - * at smaller increments with fine granularity, and some emit massive jumps with - * linear speed or acceleration. - * - * This code does its best to normalize the deltas for you: - * - * - spin is trying to normalize how far the wheel was spun (or trackpad - * dragged). This is super useful for zoom support where you want to - * throw away the chunky scroll steps on the PC and make those equal to - * the slow and smooth tiny steps on the Mac. Key data: This code tries to - * resolve a single slow step on a wheel to 1. - * - * - pixel is normalizing the desired scroll delta in pixel units. You'll - * get the crazy differences between browsers, but at least it'll be in - * pixels! - * - * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This - * should translate to positive value zooming IN, negative zooming OUT. - * This matches the newer 'wheel' event. - * - * Why are there spinX, spinY (or pixels)? - * - * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn - * with a mouse. It results in side-scrolling in the browser by default. - * - * - spinY is what you expect -- it's the classic axis of a mouse wheel. - * - * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and - * probably is by browsers in conjunction with fancy 3D controllers .. but - * you know. - * - * Implementation info: - * - * Examples of 'wheel' event if you scroll slowly (down) by one step with an - * average mouse: - * - * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120) - * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12) - * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A) - * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120) - * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120) - * - * On the trackpad: - * - * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6) - * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A) - * - * On other/older browsers.. it's more complicated as there can be multiple and - * also missing delta values. - * - * The 'wheel' event is more standard: - * - * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents - * - * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and - * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain - * backward compatibility with older events. Those other values help us - * better normalize spin speed. Example of what the browsers provide: - * - * | event.wheelDelta | event.detail - * ------------------+------------------+-------------- - * Safari v5/OS X | -120 | 0 - * Safari v5/Win7 | -120 | 0 - * Chrome v17/OS X | -120 | 0 - * Chrome v17/Win7 | -120 | 0 - * IE9/Win7 | -120 | undefined - * Firefox v4/OS X | undefined | 1 - * Firefox v4/Win7 | undefined | 3 - * - */ - function normalizeWheel( /*object*/ event ) /*object*/ { - // Reasonable defaults - var PIXEL_STEP = 10; - var LINE_HEIGHT = 40; - var PAGE_HEIGHT = 800; - - var sX = 0, sY = 0, // spinX, spinY - pX = 0, pY = 0; // pixelX, pixelY - - // Legacy - if( 'detail' in event ) { - sY = event.detail; - } - if( 'wheelDelta' in event ) { - sY = -event.wheelDelta / 120; - } - if( 'wheelDeltaY' in event ) { - sY = -event.wheelDeltaY / 120; - } - if( 'wheelDeltaX' in event ) { - sX = -event.wheelDeltaX / 120; - } - - // side scrolling on FF with DOMMouseScroll - if( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) { - sX = sY; - sY = 0; - } - - pX = sX * PIXEL_STEP; - pY = sY * PIXEL_STEP; - - if( 'deltaY' in event ) { - pY = event.deltaY; - } - if( 'deltaX' in event ) { - pX = event.deltaX; - } - - if( (pX || pY) && event.deltaMode ) { - if( event.deltaMode === 1 ) { // delta in LINE units - pX *= LINE_HEIGHT; - pY *= LINE_HEIGHT; - } else { // delta in PAGE units - pX *= PAGE_HEIGHT; - pY *= PAGE_HEIGHT; - } - } - - // Fall-back if spin cannot be determined - if( pX && !sX ) { - sX = (pX < 1) ? -1 : 1; - } - if( pY && !sY ) { - sY = (pY < 1) ? -1 : 1; - } - - return { - spinX: sX, - spinY: sY, - pixelX: pX, - pixelY: pY - }; - } - if (s.params.mousewheelControl) { - /** - * The best combination if you prefer spinX + spinY normalization. It favors - * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with - * 'wheel' event, making spin speed determination impossible. - */ - s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ? - 'DOMMouseScroll' : - isEventSupported() ? - 'wheel' : 'mousewheel'; - } - function handleMousewheel(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var delta = 0; - var rtlFactor = s.rtl ? -1 : 1; - - var data = normalizeWheel( e ); - - if (s.params.mousewheelForceToAxis) { - if (s.isHorizontal()) { - if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor; - else return; - } - else { - if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY; - else return; - } - } - else { - delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY; - } - - if (delta === 0) return; - - if (s.params.mousewheelInvert) delta = -delta; - - if (!s.params.freeMode) { - if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { - if (delta < 0) { - if ((!s.isEnd || s.params.loop) && !s.animating) { - s.slideNext(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - else { - if ((!s.isBeginning || s.params.loop) && !s.animating) { - s.slidePrev(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - } - s.mousewheel.lastScrollTime = (new window.Date()).getTime(); - - } - else { - //Freemode or scrollContainer: - var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; - var wasBeginning = s.isBeginning, - wasEnd = s.isEnd; - - if (position >= s.minTranslate()) position = s.minTranslate(); - if (position <= s.maxTranslate()) position = s.maxTranslate(); - - s.setWrapperTransition(0); - s.setWrapperTranslate(position); - s.updateProgress(); - s.updateActiveIndex(); - - if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { - s.updateClasses(); - } - - if (s.params.freeModeSticky) { - clearTimeout(s.mousewheel.timeout); - s.mousewheel.timeout = setTimeout(function () { - s.slideReset(); - }, 300); - } - else { - if (s.params.lazyLoading && s.lazy) { - s.lazy.load(); - } - } - // Emit event - s.emit('onScroll', s, e); - - // Stop autoplay - if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay(); - - // Return page scroll on edge positions - if (position === 0 || position === s.maxTranslate()) return; - } - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - return false; - } - s.disableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.off(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = false; - return true; - }; - - s.enableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.on(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = true; - return true; - }; - - - /*========================= - Parallax - ===========================*/ - function setParallaxTransform(el, progress) { - el = $(el); - var p, pX, pY; - var rtlFactor = s.rtl ? -1 : 1; - - p = el.attr('data-swiper-parallax') || '0'; - pX = el.attr('data-swiper-parallax-x'); - pY = el.attr('data-swiper-parallax-y'); - if (pX || pY) { - pX = pX || '0'; - pY = pY || '0'; - } - else { - if (s.isHorizontal()) { - pX = p; - pY = '0'; - } - else { - pY = p; - pX = '0'; - } - } - - if ((pX).indexOf('%') >= 0) { - pX = parseInt(pX, 10) * progress * rtlFactor + '%'; - } - else { - pX = pX * progress * rtlFactor + 'px' ; - } - if ((pY).indexOf('%') >= 0) { - pY = parseInt(pY, 10) * progress + '%'; - } - else { - pY = pY * progress + 'px' ; - } - - el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); - } - s.parallax = { - setTranslate: function () { - s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - setParallaxTransform(this, s.progress); - - }); - s.slides.each(function () { - var slide = $(this); - slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { - var progress = Math.min(Math.max(slide[0].progress, -1), 1); - setParallaxTransform(this, progress); - }); - }); - }, - setTransition: function (duration) { - if (typeof duration === 'undefined') duration = s.params.speed; - s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - var el = $(this); - var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; - if (duration === 0) parallaxDuration = 0; - el.transition(parallaxDuration); - }); - } - }; - - - /*========================= - Zoom - ===========================*/ - s.zoom = { - // "Global" Props - scale: 1, - currentScale: 1, - isScaling: false, - gesture: { - slide: undefined, - slideWidth: undefined, - slideHeight: undefined, - image: undefined, - imageWrap: undefined, - zoomMax: s.params.zoomMax - }, - image: { - isTouched: undefined, - isMoved: undefined, - currentX: undefined, - currentY: undefined, - minX: undefined, - minY: undefined, - maxX: undefined, - maxY: undefined, - width: undefined, - height: undefined, - startX: undefined, - startY: undefined, - touchesStart: {}, - touchesCurrent: {} - }, - velocity: { - x: undefined, - y: undefined, - prevPositionX: undefined, - prevPositionY: undefined, - prevTime: undefined - }, - // Calc Scale From Multi-touches - getDistanceBetweenTouches: function (e) { - if (e.targetTouches.length < 2) return 1; - var x1 = e.targetTouches[0].pageX, - y1 = e.targetTouches[0].pageY, - x2 = e.targetTouches[1].pageX, - y2 = e.targetTouches[1].pageY; - var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); - return distance; - }, - // Events - onGestureStart: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleStart = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.slide || !z.gesture.slide.length) { - z.gesture.slide = $(this); - if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ; - if (z.gesture.imageWrap.length === 0) { - z.gesture.image = undefined; - return; - } - } - z.gesture.image.transition(0); - z.isScaling = true; - }, - onGestureChange: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleMove = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (s.support.gestures) { - z.scale = e.scale * z.currentScale; - } - else { - z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale; - } - if (z.scale > z.gesture.zoomMax) { - z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5); - } - if (z.scale < s.params.zoomMin) { - z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5); - } - z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')'); - }, - onGestureEnd: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) { - return; - } - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin); - z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - z.currentScale = z.scale; - z.isScaling = false; - if (z.scale === 1) z.gesture.slide = undefined; - }, - onTouchStart: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (z.image.isTouched) return; - if (s.device.os === 'android') e.preventDefault(); - z.image.isTouched = true; - z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - }, - onTouchMove: function (e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - s.allowClick = false; - if (!z.image.isTouched || !z.gesture.slide) return; - - if (!z.image.isMoved) { - z.image.width = z.gesture.image[0].offsetWidth; - z.image.height = z.gesture.image[0].offsetHeight; - z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0; - z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0; - z.gesture.slideWidth = z.gesture.slide[0].offsetWidth; - z.gesture.slideHeight = z.gesture.slide[0].offsetHeight; - z.gesture.imageWrap.transition(0); - if (s.rtl) z.image.startX = -z.image.startX; - if (s.rtl) z.image.startY = -z.image.startY; - } - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - - if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return; - - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - - z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (!z.image.isMoved && !z.isScaling) { - if (s.isHorizontal() && - (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) || - (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x) - ) { - z.image.isTouched = false; - return; - } - else if (!s.isHorizontal() && - (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) || - (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y) - ) { - z.image.isTouched = false; - return; - } - } - e.preventDefault(); - e.stopPropagation(); - - z.image.isMoved = true; - z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX; - z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY; - - if (z.image.currentX < z.image.minX) { - z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8); - } - if (z.image.currentX > z.image.maxX) { - z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8); - } - - if (z.image.currentY < z.image.minY) { - z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8); - } - if (z.image.currentY > z.image.maxY) { - z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8); - } - - //Velocity - if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x; - if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y; - if (!z.velocity.prevTime) z.velocity.prevTime = Date.now(); - z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2; - z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2; - if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0; - if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0; - z.velocity.prevPositionX = z.image.touchesCurrent.x; - z.velocity.prevPositionY = z.image.touchesCurrent.y; - z.velocity.prevTime = Date.now(); - - z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTouchEnd: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (!z.image.isTouched || !z.image.isMoved) { - z.image.isTouched = false; - z.image.isMoved = false; - return; - } - z.image.isTouched = false; - z.image.isMoved = false; - var momentumDurationX = 300; - var momentumDurationY = 300; - var momentumDistanceX = z.velocity.x * momentumDurationX; - var newPositionX = z.image.currentX + momentumDistanceX; - var momentumDistanceY = z.velocity.y * momentumDurationY; - var newPositionY = z.image.currentY + momentumDistanceY; - - //Fix duration - if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x); - if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y); - var momentumDuration = Math.max(momentumDurationX, momentumDurationY); - - z.image.currentX = newPositionX; - z.image.currentY = newPositionY; - - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX); - z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY); - - z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTransitionEnd: function (s) { - var z = s.zoom; - if (z.gesture.slide && s.previousIndex !== s.activeIndex) { - z.gesture.image.transform('translate3d(0,0,0) scale(1)'); - z.gesture.imageWrap.transform('translate3d(0,0,0)'); - z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined; - z.scale = z.currentScale = 1; - } - }, - // Toggle Zoom - toggleZoom: function (s, e) { - var z = s.zoom; - if (!z.gesture.slide) { - z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - - var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight; - - if (typeof z.image.touchesStart.x === 'undefined' && e) { - touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; - touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; - } - else { - touchX = z.image.touchesStart.x; - touchY = z.image.touchesStart.y; - } - - if (z.scale && z.scale !== 1) { - // Zoom Out - z.scale = z.currentScale = 1; - z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)'); - z.gesture.slide = undefined; - } - else { - // Zoom In - z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax; - if (e) { - slideWidth = z.gesture.slide[0].offsetWidth; - slideHeight = z.gesture.slide[0].offsetHeight; - offsetX = z.gesture.slide.offset().left; - offsetY = z.gesture.slide.offset().top; - diffX = offsetX + slideWidth/2 - touchX; - diffY = offsetY + slideHeight/2 - touchY; - - imageWidth = z.gesture.image[0].offsetWidth; - imageHeight = z.gesture.image[0].offsetHeight; - scaledWidth = imageWidth * z.scale; - scaledHeight = imageHeight * z.scale; - - translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0); - translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0); - translateMaxX = -translateMinX; - translateMaxY = -translateMinY; - - translateX = diffX * z.scale; - translateY = diffY * z.scale; - - if (translateX < translateMinX) { - translateX = translateMinX; - } - if (translateX > translateMaxX) { - translateX = translateMaxX; - } - - if (translateY < translateMinY) { - translateY = translateMinY; - } - if (translateY > translateMaxY) { - translateY = translateMaxY; - } - } - else { - translateX = 0; - translateY = 0; - } - z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - } - }, - // Attach/Detach Events - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - - if (s.params.zoom) { - var target = s.slides; - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - // Scale image - if (s.support.gestures) { - s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener); - s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener); - s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener); - } - else if (s.touchEvents.start === 'touchstart') { - s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener); - s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener); - s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener); - } - - // Move image - s[action]('touchStart', s.zoom.onTouchStart); - s.slides.each(function (index, slide){ - if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) { - $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove); - } - }); - s[action]('touchEnd', s.zoom.onTouchEnd); - - // Scale Out - s[action]('transitionEnd', s.zoom.onTransitionEnd); - if (s.params.zoomToggle) { - s.on('doubleTap', s.zoom.toggleZoom); - } - } - }, - init: function () { - s.zoom.attachEvents(); - }, - destroy: function () { - s.zoom.attachEvents(true); - } - }; - - - /*========================= - Plugins API. Collect all and init all plugins - ===========================*/ - s._plugins = []; - for (var plugin in s.plugins) { - var p = s.plugins[plugin](s, s.params[plugin]); - if (p) s._plugins.push(p); - } - // Method to call all plugins event/method - s.callPlugins = function (eventName) { - for (var i = 0; i < s._plugins.length; i++) { - if (eventName in s._plugins[i]) { - s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - }; - - - /*========================= - Events/Callbacks/Plugins Emitter - ===========================*/ - function normalizeEventName (eventName) { - if (eventName.indexOf('on') !== 0) { - if (eventName[0] !== eventName[0].toUpperCase()) { - eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); - } - else { - eventName = 'on' + eventName; - } - } - return eventName; - } - s.emitterEventListeners = { - - }; - s.emit = function (eventName) { - // Trigger callbacks - if (s.params[eventName]) { - s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - var i; - // Trigger events - if (s.emitterEventListeners[eventName]) { - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - // Trigger plugins - if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - }; - s.on = function (eventName, handler) { - eventName = normalizeEventName(eventName); - if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; - s.emitterEventListeners[eventName].push(handler); - return s; - }; - s.off = function (eventName, handler) { - var i; - eventName = normalizeEventName(eventName); - if (typeof handler === 'undefined') { - // Remove all handlers for such event - s.emitterEventListeners[eventName] = []; - return s; - } - if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); - } - return s; - }; - s.once = function (eventName, handler) { - eventName = normalizeEventName(eventName); - var _handler = function () { - handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); - s.off(eventName, _handler); - }; - s.on(eventName, _handler); - return s; - }; - - - // Accessibility tools - s.a11y = { - makeFocusable: function ($el) { - $el.attr('tabIndex', '0'); - return $el; - }, - addRole: function ($el, role) { - $el.attr('role', role); - return $el; - }, - - addLabel: function ($el, label) { - $el.attr('aria-label', label); - return $el; - }, - - disable: function ($el) { - $el.attr('aria-disabled', true); - return $el; - }, - - enable: function ($el) { - $el.attr('aria-disabled', false); - return $el; - }, - - onEnterKey: function (event) { - if (event.keyCode !== 13) return; - if ($(event.target).is(s.params.nextButton)) { - s.onClickNext(event); - if (s.isEnd) { - s.a11y.notify(s.params.lastSlideMessage); - } - else { - s.a11y.notify(s.params.nextSlideMessage); - } - } - else if ($(event.target).is(s.params.prevButton)) { - s.onClickPrev(event); - if (s.isBeginning) { - s.a11y.notify(s.params.firstSlideMessage); - } - else { - s.a11y.notify(s.params.prevSlideMessage); - } - } - if ($(event.target).is('.' + s.params.bulletClass)) { - $(event.target)[0].click(); - } - }, - - liveRegion: $(''), - - notify: function (message) { - var notification = s.a11y.liveRegion; - if (notification.length === 0) return; - notification.html(''); - notification.html(message); - }, - init: function () { - // Setup accessibility - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.a11y.makeFocusable(s.nextButton); - s.a11y.addRole(s.nextButton, 'button'); - s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.a11y.makeFocusable(s.prevButton); - s.a11y.addRole(s.prevButton, 'button'); - s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); - } - - $(s.container).append(s.a11y.liveRegion); - }, - initPagination: function () { - if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { - s.bullets.each(function () { - var bullet = $(this); - s.a11y.makeFocusable(bullet); - s.a11y.addRole(bullet, 'button'); - s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); - }); - } - }, - destroy: function () { - if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); - } - }; - - - /*========================= - Init/Destroy - ===========================*/ - s.init = function () { - if (s.params.loop) s.createLoop(); - s.updateContainerSize(); - s.updateSlidesSize(); - s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - if (s.params.scrollbarDraggable) { - s.scrollbar.enableDraggable(); - } - } - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - if (!s.params.loop) s.updateProgress(); - s.effects[s.params.effect].setTranslate(); - } - if (s.params.loop) { - s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); - } - else { - s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); - if (s.params.initialSlide === 0) { - if (s.parallax && s.params.parallax) s.parallax.setTranslate(); - if (s.lazy && s.params.lazyLoading) { - s.lazy.load(); - s.lazy.initialImageLoaded = true; - } - } - } - s.attachEvents(); - if (s.params.observer && s.support.observer) { - s.initObservers(); - } - if (s.params.preloadImages && !s.params.lazyLoading) { - s.preloadImages(); - } - if (s.params.zoom && s.zoom) { - s.zoom.init(); - } - if (s.params.autoplay) { - s.startAutoplay(); - } - if (s.params.keyboardControl) { - if (s.enableKeyboardControl) s.enableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.enableMousewheelControl) s.enableMousewheelControl(); - } - // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history - if (s.params.hashnavReplaceState) { - s.params.replaceState = s.params.hashnavReplaceState; - } - if (s.params.history) { - if (s.history) s.history.init(); - } - if (s.params.hashnav) { - if (s.hashnav) s.hashnav.init(); - } - if (s.params.a11y && s.a11y) s.a11y.init(); - s.emit('onInit', s); - }; - - // Cleanup dynamic styles - s.cleanupStyles = function () { - // Container - s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); - - // Wrapper - s.wrapper.removeAttr('style'); - - // Slides - if (s.slides && s.slides.length) { - s.slides - .removeClass([ - s.params.slideVisibleClass, - s.params.slideActiveClass, - s.params.slideNextClass, - s.params.slidePrevClass - ].join(' ')) - .removeAttr('style') - .removeAttr('data-swiper-column') - .removeAttr('data-swiper-row'); - } - - // Pagination/Bullets - if (s.paginationContainer && s.paginationContainer.length) { - s.paginationContainer.removeClass(s.params.paginationHiddenClass); - } - if (s.bullets && s.bullets.length) { - s.bullets.removeClass(s.params.bulletActiveClass); - } - - // Buttons - if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); - if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); - - // Scrollbar - if (s.params.scrollbar && s.scrollbar) { - if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); - if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); - } - }; - - // Destroy - s.destroy = function (deleteInstance, cleanupStyles) { - // Detach evebts - s.detachEvents(); - // Stop autoplay - s.stopAutoplay(); - // Disable draggable - if (s.params.scrollbar && s.scrollbar) { - if (s.params.scrollbarDraggable) { - s.scrollbar.disableDraggable(); - } - } - // Destroy loop - if (s.params.loop) { - s.destroyLoop(); - } - // Cleanup styles - if (cleanupStyles) { - s.cleanupStyles(); - } - // Disconnect observer - s.disconnectObservers(); - - // Destroy zoom - if (s.params.zoom && s.zoom) { - s.zoom.destroy(); - } - // Disable keyboard/mousewheel - if (s.params.keyboardControl) { - if (s.disableKeyboardControl) s.disableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.disableMousewheelControl) s.disableMousewheelControl(); - } - // Disable a11y - if (s.params.a11y && s.a11y) s.a11y.destroy(); - // Delete history popstate - if (s.params.history && !s.params.replaceState) { - window.removeEventListener('popstate', s.history.setHistoryPopState); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.destroy(); - } - // Destroy callback - s.emit('onDestroy'); - // Delete instance - if (deleteInstance !== false) s = null; - }; - - s.init(); - - - - // Return swiper instance - return s; - }; - - - /*================================================== - Prototype - ====================================================*/ - Swiper.prototype = { - isSafari: (function () { - var ua = window.navigator.userAgent.toLowerCase(); - return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); - })(), - isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent), - isArray: function (arr) { - return Object.prototype.toString.apply(arr) === '[object Array]'; - }, - /*================================================== - Browser - ====================================================*/ - browser: { - ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, - ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1), - lteIE9: (function() { - // create temporary DIV - var div = document.createElement('div'); - // add content to tmp DIV which is wrapped into the IE HTML conditional statement - div.innerHTML = ''; - // return true / false value based on what will browser render - return div.getElementsByTagName('i').length === 1; - })() - }, - /*================================================== - Devices - ====================================================*/ - device: (function () { - var ua = window.navigator.userAgent; - var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); - var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); - var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); - var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); - return { - ios: ipad || iphone || ipod, - android: android - }; - })(), - /*================================================== - Feature Detection - ====================================================*/ - support: { - touch : (window.Modernizr && Modernizr.touch === true) || (function () { - return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); - })(), - - transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { - var div = document.createElement('div').style; - return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); - })(), - - flexbox: (function () { - var div = document.createElement('div').style; - var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); - for (var i = 0; i < styles.length; i++) { - if (styles[i] in div) return true; - } - })(), - - observer: (function () { - return ('MutationObserver' in window || 'WebkitMutationObserver' in window); - })(), - - passiveListener: (function () { - var supportsPassive = false; - try { - var opts = Object.defineProperty({}, 'passive', { - get: function() { - supportsPassive = true; - } - }); - window.addEventListener('testPassiveListener', null, opts); - } catch (e) {} - return supportsPassive; - })(), - - gestures: (function () { - return 'ongesturestart' in window; - })() - }, - /*================================================== - Plugins - ====================================================*/ - plugins: {} - }; - - - /*=========================== - Get jQuery - ===========================*/ - addLibraryPlugin($); - - var domLib = $; - - - /*=========================== - Add .swiper plugin from Dom libraries - ===========================*/ - function addLibraryPlugin(lib) { - lib.fn.swiper = function (params) { - var firstInstance; - lib(this).each(function () { - var s = new Swiper(this, params); - if (!firstInstance) firstInstance = s; - }); - return firstInstance; - }; - } - - if (domLib) { - if (!('transitionEnd' in domLib.fn)) { - domLib.fn.transitionEnd = function (callback) { - var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], - i, j, dom = this; - function fireCallBack(e) { - /*jshint validthis:true */ - if (e.target !== this) return; - callback.call(this, e); - for (i = 0; i < events.length; i++) { - dom.off(events[i], fireCallBack); - } - } - if (callback) { - for (i = 0; i < events.length; i++) { - dom.on(events[i], fireCallBack); - } - } - return this; - }; - } - if (!('transform' in domLib.fn)) { - domLib.fn.transform = function (transform) { - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; - } - return this; - }; - } - if (!('transition' in domLib.fn)) { - domLib.fn.transition = function (duration) { - if (typeof duration !== 'string') { - duration = duration + 'ms'; - } - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; - } - return this; - }; - } - if (!('outerWidth' in domLib.fn)) { - domLib.fn.outerWidth = function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); - else - return this[0].offsetWidth; - } - else return null; - }; - } - } - - - return Swiper; -})); - -//# sourceMappingURL=maps/swiper.jquery.umd.js.map diff --git a/dist/js/swiper.jquery.umd.min.js b/dist/js/swiper.jquery.umd.min.js deleted file mode 100644 index 23d0f9165..000000000 --- a/dist/js/swiper.jquery.umd.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -!function(e,a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):e.Swiper=a(e.jQuery)}(this,function(e){"use strict";var a=function(t,s){function r(e){return Math.floor(e)}function i(){var e=y.params.autoplay,a=y.slides.eq(y.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||y.params.autoplay),y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},e)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});s.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),y.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents("."+y.params.slideClass).length>0&&0===y.container.parents("."+y.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev()),y.emit("onKeyPress",y,a)}}function p(e){var a=0,t=0,s=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,r=10*t,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||r)&&e.deltaMode&&(1===e.deltaMode?(s*=40,r*=40):(s*=800,r*=800)),s&&!a&&(a=s<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:r}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=y.rtl?-1:1,s=p(e);if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(y.params.mousewheelInvert&&(a=-a),y.params.freeMode){var r=y.getWrapperTranslate()+a*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),y.emit("onScroll",y,e),y.params.autoplay&&y.params.autoplayDisableOnInteraction&&y.stopAutoplay(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(a<0)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext(),y.emit("onScroll",y,e);else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev(),y.emit("onScroll",y,e);y.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function u(a,t){a=e(a);var s,r,i,n=y.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function m(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(t,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=s&&s.virtualTranslate;s=s||{};var h={};for(var v in s)if("object"!=typeof s[v]||null===s[v]||(s[v].nodeType||s[v]===window||s[v]===document||"undefined"!=typeof Dom7&&s[v]instanceof Dom7||"undefined"!=typeof jQuery&&s[v]instanceof jQuery))h[v]=s[v];else{h[v]={};for(var f in s[v])h[v][f]=s[v][f]}for(var w in c)if(void 0===s[w])s[w]=c[w];else if("object"==typeof s[w])for(var x in c[w])void 0===s[w][x]&&(s[w][x]=c[w][x]);var y=this;if(y.params=s,y.originalParams=h,y.classNames=[],void 0!==e&&"undefined"!=typeof Dom7&&(e=Dom7),(void 0!==e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=e,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(t),0!==y.container.length)){if(y.container.length>1){var T=[];return y.container.each(function(){T.push(new a(this,s))}),T}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push(y.params.containerModifierClass+y.params.direction),y.params.freeMode&&y.classNames.push(y.params.containerModifierClass+"free-mode"),y.support.flexbox||(y.classNames.push(y.params.containerModifierClass+"no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push(y.params.containerModifierClass+"autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),y.params.touchReleaseOnEdges&&(y.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push(y.params.containerModifierClass+"3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push(y.params.containerModifierClass+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0),"fade"!==y.params.effect&&"flip"!==y.params.effect||(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,void 0===g&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=e(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass(y.params.paginationModifierClass+"clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass(y.params.paginationModifierClass+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=e(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=e(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push(y.params.containerModifierClass+"rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push(y.params.containerModifierClass+"multirow"),y.device.android&&y.classNames.push(y.params.containerModifierClass+"android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1,y.params.allowSwipeToPrev===!1&&y.params.grabCursor&&y.unsetGrabCursor()},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1,y.params.allowSwipeToNext===!1&&y.params.grabCursor&&y.unsetGrabCursor()},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1,y.params.grabCursor&&y.unsetGrabCursor()},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0,y.params.allowSwipeToPrev===!0&&y.params.grabCursor&&y.setGrabCursor()},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0,y.params.allowSwipeToNext===!0&&y.params.grabCursor&&y.setGrabCursor()},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0,y.params.grabCursor&&y.setGrabCursor()},y.setGrabCursor=function(e){y.container[0].style.cursor="move",y.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",y.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",y.container[0].style.cursor=e?"grabbing":"grab"},y.unsetGrabCursor=function(){y.container[0].style.cursor=""},y.params.grabCursor&&y.setGrabCursor(),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r,i){function n(){i&&i()}var o;e.complete&&r?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},y.preloadImages=function(){function e(){void 0!==y&&null!==y&&y&&(void 0!==y.imagesLoaded&&y.imagesLoaded++,y.imagesLoaded===y.imagesToLoad.length&&(y.params.updateOnImagesReady&&y.update(),y.emit("onImagesReady",y)))}y.imagesToLoad=y.container.find("img");for(var a=0;a1)for(e=0;ey.slides.length)break;a.push(y.slides.eq(s)[0])}else a.push(y.slides.eq(y.activeIndex)[0]);for(e=0;et?r:t}t&&y.wrapper.css("height",t+"px")},y.updateContainerSize=function(){var e,a;e=void 0!==y.params.width?y.params.width:y.container[0].clientWidth,a=void 0!==y.params.height?y.params.height:y.container[0].clientHeight,0===e&&y.isHorizontal()||0===a&&!y.isHorizontal()||(e=e-parseInt(y.container.css("padding-left"),10)-parseInt(y.container.css("padding-right"),10),a=a-parseInt(y.container.css("padding-top"),10)-parseInt(y.container.css("padding-bottom"),10),y.width=e,y.height=a,y.size=y.isHorizontal()?y.width:y.height)},y.updateSlidesSize=function(){y.slides=y.wrapper.children("."+y.params.slideClass),y.snapGrid=[],y.slidesGrid=[],y.slidesSizesGrid=[];var e,a=y.params.spaceBetween,t=-y.params.slidesOffsetBefore,s=0,i=0;if(void 0!==y.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var m,c,g;"column"===y.params.slidesPerColumnFill?(c=Math.floor(e/l),g=e-c*l,(c>d||c===d&&g===l-1)&&++g>=l&&(g=0,c++),m=c+g*n/l,u.css({"-webkit-box-ordinal-group":m,"-moz-box-ordinal-group":m,"-ms-flex-order":m,"-webkit-order":m,order:m})):(g=Math.floor(e/p),c=e-g*p),u.css("margin-"+(y.isHorizontal()?"top":"left"),0!==g&&y.params.spaceBetween&&y.params.spaceBetween+"px").attr("data-swiper-column",c).attr("data-swiper-row",g)}"none"!==u.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-y.size/2-a),0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup==0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup==0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var h;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.support.flexbox&&!y.params.setWrapperSize||(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(h=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;ey.size&&(s=!0));for(a=y.activeIndex-1;a>=0;a--)y.slides[a]&&!s&&(r+=y.slides[a].swiperSlideSize,t++,r>y.size&&(s=!0))}else for(e=y.activeIndex+1;e=0&&i0&&n<=y.size||i<=0&&n>=y.size)&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){void 0===e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);y.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),t=Math.floor(e/y.params.slidesPerGroup),t>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses(),y.updateRealIndex())},y.updateRealIndex=function(){y.realIndex=parseInt(y.slides.eq(y.activeIndex).attr("data-swiper-slide-index")||y.activeIndex,10)},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass+" "+y.params.slideDuplicateActiveClass+" "+y.params.slideDuplicateNextClass+" "+y.params.slideDuplicatePrevClass);var a=y.slides.eq(y.activeIndex);a.addClass(y.params.slideActiveClass),s.loop&&(a.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+y.realIndex+'"]').addClass(y.params.slideDuplicateActiveClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+y.realIndex+'"]').addClass(y.params.slideDuplicateActiveClass));var t=a.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&(t=y.slides.eq(0),t.addClass(y.params.slideNextClass));var r=a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===r.length&&(r=y.slides.eq(-1),r.addClass(y.params.slidePrevClass)),s.loop&&(t.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicateNextClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicateNextClass),r.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicatePrevClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicatePrevClass)),y.paginationContainer&&y.paginationContainer.length>0){var i,n=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(i=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup),i>y.slides.length-1-2*y.loopedSlides&&(i-=y.slides.length-2*y.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==y.params.paginationType&&(i=n+i)):i=void 0!==y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){e(this).index()===i&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(i).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(i+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(n)),"progress"===y.params.paginationType){var o=(i+1)/n,l=o,p=1;y.isHorizontal()||(p=o,l=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,i+1,n)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;t";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){y.rtl,y.translate;t=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(t),y.updateActiveIndex(),y.updateClasses()}if(y){y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set();var t;if(e){y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0))||a()}else y.params.autoHeight&&y.updateAutoHeight()}},y.onResize=function(e){y.params.onBeforeResize&&y.params.onBeforeResize(y),y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t,y.params.onAfterResize&&y.params.onAfterResize(y)},y.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?y.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(y.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":y.touchEventsDesktop.start,move:y.support.touch||!y.params.simulateTouch?"touchmove":y.touchEventsDesktop.move,end:y.support.touch||!y.params.simulateTouch?"touchend":y.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=!!y.params.nested;if(y.browser.ie)r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1);else{if(y.support.touch){var o=!("touchstart"!==y.touchEvents.start||!y.support.passiveListener||!y.params.passiveListeners)&&{passive:!0,capture:!1};r[t](y.touchEvents.start,y.onTouchStart,o),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,o)}(s.simulateTouch&&!y.device.ios&&!y.device.android||s.simulateTouch&&!y.support.touch&&y.device.ios)&&(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))}window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),y.isEnd&&!y.params.loop||y.slideNext()}, -y.onClickPrev=function(e){e.preventDefault(),y.isBeginning&&!y.params.loop||y.slidePrev()},y.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(a){var t=n(a,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+l/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+y.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-l?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+y.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var b,C,S,z,M,P,E,I,k,D,L="input, select, textarea, button, video",B=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,X;y.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(G="touchstart"===a.type)||!("which"in a)||3!==a.which){if(y.params.noSwiping&&n(a,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(a,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=y.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(b=!0,C=!1,S=!0,M=void 0,X=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(L)&&(r=!1),document.activeElement&&e(document.activeElement).is(L)&&document.activeElement.blur(),r&&a.preventDefault()}y.emit("onTouchStart",y,a)}}}},y.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return y.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(y.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(b&&(y.touches.startX=y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.startY=y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&y.params.touchReleaseOnEdges&&!y.params.loop)if(y.isHorizontal()){if(y.touches.currentXy.touches.startX&&y.translate>=y.minTranslate())return}else if(y.touches.currentYy.touches.startY&&y.translate>=y.minTranslate())return;if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(L))return C=!0,void(y.allowClick=!1);if(S&&y.emit("onTouchMove",y,a),!(a.targetTouches&&a.targetTouches.length>1)){if(y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===M){var t;y.isHorizontal()&&y.touches.currentY===y.touches.startY||!y.isHorizontal()&&y.touches.currentX===y.touches.startX?M=!1:(t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI,M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle)}if(M&&y.emit("onTouchMoveOpposite",y,a),void 0===X&&(y.touches.currentX===y.touches.startX&&y.touches.currentY===y.touches.startY||(X=!0)),b){if(M)return void(b=!1);if(X){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),C||(s.loop&&y.fixLoop(),E=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),D=!1,!y.params.grabCursor||y.params.allowSwipeToNext!==!0&&y.params.allowSwipeToPrev!==!0||y.setGrabCursor(!0)),C=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+E;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1,y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+E+r,y.params.resistanceRatio))):r<0&&PE&&(P=E),y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(P=E);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=E,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}y.params.followFinger&&((y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P))}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&y.emit("onTouchEnd",y,a),S=!1,b){y.params.grabCursor&&C&&b&&(y.params.allowSwipeToNext===!0||y.params.allowSwipeToPrev===!0)&&y.setGrabCursor(!1);var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),s<300&&t-B>300&&(k&&clearTimeout(k),k=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!e(a.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,a))},300)),s<300&&t-B<300&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,a))),B=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!b||!C||!y.swipeDirection||0===y.touches.diff||P===E)return void(b=C=!1);b=C=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;y.velocity=y.velocity*y.params.freeModeMomentumVelocityRatio,H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,u=y.translate+d;y.rtl&&(u=-u);var m,c=!1,g=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(uy.minTranslate())y.params.freeModeMomentumBounce?(u-y.minTranslate()>g&&(u=y.minTranslate()+g),m=y.minTranslate(),c=!0,D=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var h,v=0;for(v=0;v-u){h=v;break}u=Math.abs(y.snapGrid[h]-u)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var f,w=0,x=y.slidesSizesGrid[0];for(f=0;f=y.slidesGrid[f]&&r=y.slidesGrid[f]&&(w=f,x=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var T=(r-y.slidesGrid[w])/x;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(T>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(T>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];if(y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r),y.params.normalizeSlideIndex)for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!(!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e)&&(void 0===a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.updateRealIndex(),y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),!1):(y.updateClasses(),y.onTransitionStart(t),0===a||y.browser.lteIE9?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),!0)))},y.onTransitionStart=function(e){void 0===e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),void 0===e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.history&&y.history&&y.history.setHistory(y.params.history,y.activeIndex),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)}return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex-1,a,e,t)}return y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.disableTouchControl=function(){return y.params.onlyExternal=!0,!0},y.enableTouchControl=function(){return y.params.onlyExternal=!1,!0},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var n,o=y.maxTranslate()-y.minTranslate();n=0===o?0:(e-y.minTranslate())/o,n!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return void 0===a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return void 0===e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;aa.length&&(y.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a'),t.append(d)),0===u.length&&(u=e('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(y.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),y.params.virtualTranslate&&0!==a){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&e(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),y.wrapper.append(a)),a.css({height:y.width+"px"})):(a=y.container.find(".swiper-cube-shadow"),0===a.length&&(a=e('
'),y.container.append(a))));for(var s=0;s-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(u),y.params.cube.slideShadows){var m=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),c=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===m.length&&(m=e('
'),r.append(m)),0===c.length&&(c=e('
'),r.append(c)),m.length&&(m[0].style.opacity=Math.max(-o,0)),c.length&&(c[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())a.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var g=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*g*Math.PI/360)/2+Math.cos(2*g*Math.PI/360)/2),v=y.params.cube.shadowScale,f=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;a.transform("scale3d("+v+", 1, "+f+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/f+"px) rotateX(-90deg)")}var x=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+x+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=y.translate,t=y.isHorizontal()?-a+y.width/2:-a+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;i'),o.append(f)),0===w.length&&(w=e('
'),o.append(w)),f.length&&(f[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(y.browser.ie){y.wrapper[0].style.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(a),r=s.find("."+y.params.lazyLoadingClass+":not(."+y.params.lazyStatusLoadedClass+"):not(."+y.params.lazyStatusLoadingClass+")");!s.hasClass(y.params.lazyLoadingClass)||s.hasClass(y.params.lazyStatusLoadedClass)||s.hasClass(y.params.lazyStatusLoadingClass)||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass(y.params.lazyStatusLoadingClass);var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");y.loadImage(a[0],i||r,n,o,!1,function(){if(void 0!==y&&null!==y&&y){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass(y.params.lazyStatusLoadedClass).removeClass(y.params.lazyStatusLoadingClass),s.find("."+y.params.lazyPreloaderClass+", ."+y.params.preloaderClass).remove(),y.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var l=y.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(l.index(),!1)}else{var p=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');y.lazy.loadImageInSlide(p.index(),!1)}}y.emit("onLazyImageReady",y,s[0],a[0])}}),y.emit("onLazyImageLoad",y,s[0],a[0])})}},load:function(){var a,t=y.params.slidesPerView;if("auto"===t&&(t=0),y.lazy.initialImageLoaded||(y.lazy.initialImageLoaded=!0),y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=y.activeIndex;a1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var s=y.params.lazyLoadingInPrevNextAmount,r=t,i=Math.min(y.activeIndex+r+Math.max(s,r),y.slides.length),n=Math.max(y.activeIndex-Math.max(r,s),0);for(a=y.activeIndex+t;a0&&y.lazy.loadImageInSlide(o.index());var l=y.wrapper.children("."+y.params.slidePrevClass);l.length>0&&y.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,r=-y.minTranslate()*a.moveDivider,i=-y.maxTranslate()*a.moveDivider;si&&(s=i),s=-s/a.moveDivider,y.updateProgress(s),y.setWrapperTranslate(s,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},draggableEvents:function(){return y.params.simulateTouch!==!1||y.support.touch?y.touchEvents:y.touchEventsDesktop}(),enableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(y.params.scrollbar){var a=y.scrollbar;a.track=e(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&a.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(a.track=y.container.find(y.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=y.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=y.size/y.virtualSize,a.moveDivider=a.divider*(a.trackSize/y.size),a.dragSize=a.trackSize*a.divider,y.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",y.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,r;this.x.length;this.interpolate=function(e){return e?(r=t(this.x,e),s=r-1,(e-this.x[s])*(this.y[r]-this.y[s])/(this.x[r]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(Array.isArray(n))for(var o=0;o-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),y.disableMousewheelControl=function(){if(!y.mousewheel.event)return!1;var a=y.container;return"container"!==y.params.mousewheelEventsTarged&&(a=e(y.params.mousewheelEventsTarged)),a.off(y.mousewheel.event,d),y.params.mousewheelControl=!1,!0},y.enableMousewheelControl=function(){if(!y.mousewheel.event)return!1;var a=y.container;return"container"!==y.params.mousewheelEventsTarged&&(a=e(y.params.mousewheelEventsTarged)),a.on(y.mousewheel.event,d),y.params.mousewheelControl=!0,!0},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){u(this,y.progress)}),y.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){u(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},y.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:y.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,r=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(r-t,2))},onGestureStart:function(a){var t=y.zoom;if(!y.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}if(!(t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=y.slides.eq(y.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+y.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||y.params.zoomMax,0!==t.gesture.imageWrap.length)))return void(t.gesture.image=void 0);t.gesture.image.transition(0),t.isScaling=!0},onGestureChange:function(e){var a=y.zoom;if(!y.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(y.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scalea.image.touchesStart.x)return void(a.image.isTouched=!1);if(!y.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.ya.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentXa.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentYa.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,r=300,i=t.velocity.x*s,n=t.image.currentX+i,o=t.velocity.y*r,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(r=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,r);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,u=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-u/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var r,i,n,o,l,p,d,u,m,c,g,h,v,f,w,x,y,T;void 0===s.image.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,i="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=s.image.touchesStart.x,i=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(y=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+y/2-r,p=o+T/2-i,m=s.gesture.image[0].offsetWidth,c=s.gesture.image[0].offsetHeight,g=m*s.scale,h=c*s.scale,v=Math.min(y/2-g/2,0),f=Math.min(T/2-h/2,0),w=-v,x=-f,d=l*s.scale,u=p*s.scale,dw&&(d=w),ux&&(u=x)):(d=0,u=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+u+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(y.params.zoom){var s=(y.slides,!("touchstart"!==y.touchEvents.start||!y.support.passiveListener||!y.params.passiveListeners)&&{passive:!0,capture:!1});y.support.gestures?(y.slides[t]("gesturestart",y.zoom.onGestureStart,s),y.slides[t]("gesturechange",y.zoom.onGestureChange,s),y.slides[t]("gestureend",y.zoom.onGestureEnd,s)):"touchstart"===y.touchEvents.start&&(y.slides[t](y.touchEvents.start,y.zoom.onGestureStart,s),y.slides[t](y.touchEvents.move,y.zoom.onGestureChange,s),y.slides[t](y.touchEvents.end,y.zoom.onGestureEnd,s)),y[t]("touchStart",y.zoom.onTouchStart),y.slides.each(function(a,s){e(s).find("."+y.params.zoomContainerClass).length>0&&e(s)[t](y.touchEvents.move,y.zoom.onTouchMove)}),y[t]("touchEnd",y.zoom.onTouchEnd),y[t]("transitionEnd",y.zoom.onTransitionEnd),y.params.zoomToggle&&y.on("doubleTap",y.zoom.toggleZoom)}},init:function(){y.zoom.attachEvents()},destroy:function(){y.zoom.attachEvents(!0)}},y._plugins=[];for(var Y in y.plugins){var A=y.plugins[Y](y,y.params[Y]);A&&y._plugins.push(A)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),e(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var a=e(this);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(),y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.zoom&&y.zoom&&y.zoom.init(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(),y.params.hashnavReplaceState&&(y.params.replaceState=y.params.hashnavReplaceState),y.params.history&&y.history&&y.history.init(),y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.zoom&&y.zoom&&y.zoom.destroy(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.params.history&&!y.params.replaceState&&window.removeEventListener("popstate",y.history.setHistoryPopState),y.params.hashnav&&y.hashnav&&y.hashnav.destroy(),y.emit("onDestroy"),e!==!1&&(y=null)},y.init(),y}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="",1===e.getElementsByTagName("i").length}()},device:function(){var e=window.navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),a}); -//# sourceMappingURL=maps/swiper.jquery.umd.min.js.map diff --git a/dist/js/swiper.js b/dist/js/swiper.js deleted file mode 100644 index 6ee645ef9..000000000 --- a/dist/js/swiper.js +++ /dev/null @@ -1,5354 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -(function () { - 'use strict'; - var $; - - /*=========================== - Swiper - ===========================*/ - var Swiper = function (container, params) { - if (!(this instanceof Swiper)) return new Swiper(container, params); - - - var defaults = { - direction: 'horizontal', - touchEventsTarget: 'container', - initialSlide: 0, - speed: 300, - // autoplay - autoplay: false, - autoplayDisableOnInteraction: true, - autoplayStopOnLast: false, - // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView). - iOSEdgeSwipeDetection: false, - iOSEdgeSwipeThreshold: 20, - // Free mode - freeMode: false, - freeModeMomentum: true, - freeModeMomentumRatio: 1, - freeModeMomentumBounce: true, - freeModeMomentumBounceRatio: 1, - freeModeMomentumVelocityRatio: 1, - freeModeSticky: false, - freeModeMinimumVelocity: 0.02, - // Autoheight - autoHeight: false, - // Set wrapper width - setWrapperSize: false, - // Virtual Translate - virtualTranslate: false, - // Effects - effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' - coverflow: { - rotate: 50, - stretch: 0, - depth: 100, - modifier: 1, - slideShadows : true - }, - flip: { - slideShadows : true, - limitRotation: true - }, - cube: { - slideShadows: true, - shadow: true, - shadowOffset: 20, - shadowScale: 0.94 - }, - fade: { - crossFade: false - }, - // Parallax - parallax: false, - // Zoom - zoom: false, - zoomMax: 3, - zoomMin: 1, - zoomToggle: true, - // Scrollbar - scrollbar: null, - scrollbarHide: true, - scrollbarDraggable: false, - scrollbarSnapOnRelease: false, - // Keyboard Mousewheel - keyboardControl: false, - mousewheelControl: false, - mousewheelReleaseOnEdges: false, - mousewheelInvert: false, - mousewheelForceToAxis: false, - mousewheelSensitivity: 1, - mousewheelEventsTarged: 'container', - // Hash Navigation - hashnav: false, - hashnavWatchState: false, - // History - history: false, - // Commong Nav State - replaceState: false, - // Breakpoints - breakpoints: undefined, - // Slides grid - spaceBetween: 0, - slidesPerView: 1, - slidesPerColumn: 1, - slidesPerColumnFill: 'column', - slidesPerGroup: 1, - centeredSlides: false, - slidesOffsetBefore: 0, // in px - slidesOffsetAfter: 0, // in px - // Round length - roundLengths: false, - // Touches - touchRatio: 1, - touchAngle: 45, - simulateTouch: true, - shortSwipes: true, - longSwipes: true, - longSwipesRatio: 0.5, - longSwipesMs: 300, - followFinger: true, - onlyExternal: false, - threshold: 0, - touchMoveStopPropagation: true, - touchReleaseOnEdges: false, - // Unique Navigation Elements - uniqueNavElements: true, - // Pagination - pagination: null, - paginationElement: 'span', - paginationClickable: false, - paginationHide: false, - paginationBulletRender: null, - paginationProgressRender: null, - paginationFractionRender: null, - paginationCustomRender: null, - paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom' - // Resistance - resistance: true, - resistanceRatio: 0.85, - // Next/prev buttons - nextButton: null, - prevButton: null, - // Progress - watchSlidesProgress: false, - watchSlidesVisibility: false, - // Cursor - grabCursor: false, - // Clicks - preventClicks: true, - preventClicksPropagation: true, - slideToClickedSlide: false, - // Lazy Loading - lazyLoading: false, - lazyLoadingInPrevNext: false, - lazyLoadingInPrevNextAmount: 1, - lazyLoadingOnTransitionStart: false, - // Images - preloadImages: true, - updateOnImagesReady: true, - // loop - loop: false, - loopAdditionalSlides: 0, - loopedSlides: null, - // Control - control: undefined, - controlInverse: false, - controlBy: 'slide', //or 'container' - normalizeSlideIndex: true, - // Swiping/no swiping - allowSwipeToPrev: true, - allowSwipeToNext: true, - swipeHandler: null, //'.swipe-handler', - noSwiping: true, - noSwipingClass: 'swiper-no-swiping', - // Passive Listeners - passiveListeners: true, - // NS - containerModifierClass: 'swiper-container-', // NEW - slideClass: 'swiper-slide', - slideActiveClass: 'swiper-slide-active', - slideDuplicateActiveClass: 'swiper-slide-duplicate-active', - slideVisibleClass: 'swiper-slide-visible', - slideDuplicateClass: 'swiper-slide-duplicate', - slideNextClass: 'swiper-slide-next', - slideDuplicateNextClass: 'swiper-slide-duplicate-next', - slidePrevClass: 'swiper-slide-prev', - slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', - wrapperClass: 'swiper-wrapper', - bulletClass: 'swiper-pagination-bullet', - bulletActiveClass: 'swiper-pagination-bullet-active', - buttonDisabledClass: 'swiper-button-disabled', - paginationCurrentClass: 'swiper-pagination-current', - paginationTotalClass: 'swiper-pagination-total', - paginationHiddenClass: 'swiper-pagination-hidden', - paginationProgressbarClass: 'swiper-pagination-progressbar', - paginationClickableClass: 'swiper-pagination-clickable', // NEW - paginationModifierClass: 'swiper-pagination-', // NEW - lazyLoadingClass: 'swiper-lazy', - lazyStatusLoadingClass: 'swiper-lazy-loading', - lazyStatusLoadedClass: 'swiper-lazy-loaded', - lazyPreloaderClass: 'swiper-lazy-preloader', - notificationClass: 'swiper-notification', - preloaderClass: 'preloader', - zoomContainerClass: 'swiper-zoom-container', - - // Observer - observer: false, - observeParents: false, - // Accessibility - a11y: false, - prevSlideMessage: 'Previous slide', - nextSlideMessage: 'Next slide', - firstSlideMessage: 'This is the first slide', - lastSlideMessage: 'This is the last slide', - paginationBulletMessage: 'Go to slide {{index}}', - // Callbacks - runCallbacksOnInit: true - /* - Callbacks: - onInit: function (swiper) - onDestroy: function (swiper) - onBeforeResize: function (swiper) - onAfterResize: function (swiper) - onClick: function (swiper, e) - onTap: function (swiper, e) - onDoubleTap: function (swiper, e) - onSliderMove: function (swiper, e) - onSlideChangeStart: function (swiper) - onSlideChangeEnd: function (swiper) - onTransitionStart: function (swiper) - onTransitionEnd: function (swiper) - onImagesReady: function (swiper) - onProgress: function (swiper, progress) - onTouchStart: function (swiper, e) - onTouchMove: function (swiper, e) - onTouchMoveOpposite: function (swiper, e) - onTouchEnd: function (swiper, e) - onReachBeginning: function (swiper) - onReachEnd: function (swiper) - onSetTransition: function (swiper, duration) - onSetTranslate: function (swiper, translate) - onAutoplayStart: function (swiper) - onAutoplayStop: function (swiper), - onLazyImageLoad: function (swiper, slide, image) - onLazyImageReady: function (swiper, slide, image) - onKeyPress: function (swiper, keyCode) - */ - - }; - var initialVirtualTranslate = params && params.virtualTranslate; - - params = params || {}; - var originalParams = {}; - for (var param in params) { - if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) { - originalParams[param] = {}; - for (var deepParam in params[param]) { - originalParams[param][deepParam] = params[param][deepParam]; - } - } - else { - originalParams[param] = params[param]; - } - } - for (var def in defaults) { - if (typeof params[def] === 'undefined') { - params[def] = defaults[def]; - } - else if (typeof params[def] === 'object') { - for (var deepDef in defaults[def]) { - if (typeof params[def][deepDef] === 'undefined') { - params[def][deepDef] = defaults[def][deepDef]; - } - } - } - } - - // Swiper - var s = this; - - // Params - s.params = params; - s.originalParams = originalParams; - - // Classname - s.classNames = []; - /*========================= - Dom Library and plugins - ===========================*/ - if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){ - $ = Dom7; - } - if (typeof $ === 'undefined') { - if (typeof Dom7 === 'undefined') { - $ = window.Dom7 || window.Zepto || window.jQuery; - } - else { - $ = Dom7; - } - if (!$) return; - } - // Export it to Swiper instance - s.$ = $; - - /*========================= - Breakpoints - ===========================*/ - s.currentBreakpoint = undefined; - s.getActiveBreakpoint = function () { - //Get breakpoint for window width - if (!s.params.breakpoints) return false; - var breakpoint = false; - var points = [], point; - for ( point in s.params.breakpoints ) { - if (s.params.breakpoints.hasOwnProperty(point)) { - points.push(point); - } - } - points.sort(function (a, b) { - return parseInt(a, 10) > parseInt(b, 10); - }); - for (var i = 0; i < points.length; i++) { - point = points[i]; - if (point >= window.innerWidth && !breakpoint) { - breakpoint = point; - } - } - return breakpoint || 'max'; - }; - s.setBreakpoint = function () { - //Set breakpoint for window width and update parameters - var breakpoint = s.getActiveBreakpoint(); - if (breakpoint && s.currentBreakpoint !== breakpoint) { - var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; - var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); - for ( var param in breakPointsParams ) { - s.params[param] = breakPointsParams[param]; - } - s.currentBreakpoint = breakpoint; - if(needsReLoop && s.destroyLoop) { - s.reLoop(true); - } - } - }; - // Set breakpoint on load - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - /*========================= - Preparation - Define Container, Wrapper and Pagination - ===========================*/ - s.container = $(container); - if (s.container.length === 0) return; - if (s.container.length > 1) { - var swipers = []; - s.container.each(function () { - var container = this; - swipers.push(new Swiper(this, params)); - }); - return swipers; - } - - // Save instance in container HTML Element and in data - s.container[0].swiper = s; - s.container.data('swiper', s); - - s.classNames.push(s.params.containerModifierClass + s.params.direction); - - if (s.params.freeMode) { - s.classNames.push(s.params.containerModifierClass + 'free-mode'); - } - if (!s.support.flexbox) { - s.classNames.push(s.params.containerModifierClass + 'no-flexbox'); - s.params.slidesPerColumn = 1; - } - if (s.params.autoHeight) { - s.classNames.push(s.params.containerModifierClass + 'autoheight'); - } - // Enable slides progress when required - if (s.params.parallax || s.params.watchSlidesVisibility) { - s.params.watchSlidesProgress = true; - } - // Max resistance when touchReleaseOnEdges - if (s.params.touchReleaseOnEdges) { - s.params.resistanceRatio = 0; - } - // Coverflow / 3D - if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { - if (s.support.transforms3d) { - s.params.watchSlidesProgress = true; - s.classNames.push(s.params.containerModifierClass + '3d'); - } - else { - s.params.effect = 'slide'; - } - } - if (s.params.effect !== 'slide') { - s.classNames.push(s.params.containerModifierClass + s.params.effect); - } - if (s.params.effect === 'cube') { - s.params.resistanceRatio = 0; - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.centeredSlides = false; - s.params.spaceBetween = 0; - s.params.virtualTranslate = true; - } - if (s.params.effect === 'fade' || s.params.effect === 'flip') { - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.watchSlidesProgress = true; - s.params.spaceBetween = 0; - if (typeof initialVirtualTranslate === 'undefined') { - s.params.virtualTranslate = true; - } - } - - // Grab Cursor - if (s.params.grabCursor && s.support.touch) { - s.params.grabCursor = false; - } - - // Wrapper - s.wrapper = s.container.children('.' + s.params.wrapperClass); - - // Pagination - if (s.params.pagination) { - s.paginationContainer = $(s.params.pagination); - if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { - s.paginationContainer = s.container.find(s.params.pagination); - } - - if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { - s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable'); - } - else { - s.params.paginationClickable = false; - } - s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType); - } - // Next/Prev Buttons - if (s.params.nextButton || s.params.prevButton) { - if (s.params.nextButton) { - s.nextButton = $(s.params.nextButton); - if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { - s.nextButton = s.container.find(s.params.nextButton); - } - } - if (s.params.prevButton) { - s.prevButton = $(s.params.prevButton); - if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { - s.prevButton = s.container.find(s.params.prevButton); - } - } - } - - // Is Horizontal - s.isHorizontal = function () { - return s.params.direction === 'horizontal'; - }; - // s.isH = isH; - - // RTL - s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); - if (s.rtl) { - s.classNames.push(s.params.containerModifierClass + 'rtl'); - } - - // Wrong RTL support - if (s.rtl) { - s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; - } - - // Columns - if (s.params.slidesPerColumn > 1) { - s.classNames.push(s.params.containerModifierClass + 'multirow'); - } - - // Check for Android - if (s.device.android) { - s.classNames.push(s.params.containerModifierClass + 'android'); - } - - // Add classes - s.container.addClass(s.classNames.join(' ')); - - // Translate - s.translate = 0; - - // Progress - s.progress = 0; - - // Velocity - s.velocity = 0; - - /*========================= - Locks, unlocks - ===========================*/ - s.lockSwipeToNext = function () { - s.params.allowSwipeToNext = false; - if (s.params.allowSwipeToPrev === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipeToPrev = function () { - s.params.allowSwipeToPrev = false; - if (s.params.allowSwipeToNext === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; - if (s.params.grabCursor) s.unsetGrabCursor(); - }; - s.unlockSwipeToNext = function () { - s.params.allowSwipeToNext = true; - if (s.params.allowSwipeToPrev === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipeToPrev = function () { - s.params.allowSwipeToPrev = true; - if (s.params.allowSwipeToNext === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; - if (s.params.grabCursor) s.setGrabCursor(); - }; - - /*========================= - Round helper - ===========================*/ - function round(a) { - return Math.floor(a); - } - /*========================= - Set grab cursor - ===========================*/ - s.setGrabCursor = function(moving) { - s.container[0].style.cursor = 'move'; - s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; - s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; - s.container[0].style.cursor = moving ? 'grabbing': 'grab'; - }; - s.unsetGrabCursor = function () { - s.container[0].style.cursor = ''; - }; - if (s.params.grabCursor) { - s.setGrabCursor(); - } - /*========================= - Update on Images Ready - ===========================*/ - s.imagesToLoad = []; - s.imagesLoaded = 0; - - s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) { - var image; - function onReady () { - if (callback) callback(); - } - if (!imgElement.complete || !checkForComplete) { - if (src) { - image = new window.Image(); - image.onload = onReady; - image.onerror = onReady; - if (sizes) { - image.sizes = sizes; - } - if (srcset) { - image.srcset = srcset; - } - if (src) { - image.src = src; - } - } else { - onReady(); - } - - } else {//image already loaded... - onReady(); - } - }; - s.preloadImages = function () { - s.imagesToLoad = s.container.find('img'); - function _onReady() { - if (typeof s === 'undefined' || s === null || !s) return; - if (s.imagesLoaded !== undefined) s.imagesLoaded++; - if (s.imagesLoaded === s.imagesToLoad.length) { - if (s.params.updateOnImagesReady) s.update(); - s.emit('onImagesReady', s); - } - } - for (var i = 0; i < s.imagesToLoad.length; i++) { - s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady); - } - }; - - /*========================= - Autoplay - ===========================*/ - s.autoplayTimeoutId = undefined; - s.autoplaying = false; - s.autoplayPaused = false; - function autoplay() { - var autoplayDelay = s.params.autoplay; - var activeSlide = s.slides.eq(s.activeIndex); - if (activeSlide.attr('data-swiper-autoplay')) { - autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay; - } - s.autoplayTimeoutId = setTimeout(function () { - if (s.params.loop) { - s.fixLoop(); - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!s.isEnd) { - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!params.autoplayStopOnLast) { - s._slideTo(0); - s.emit('onAutoplay', s); - } - else { - s.stopAutoplay(); - } - } - } - }, autoplayDelay); - } - s.startAutoplay = function () { - if (typeof s.autoplayTimeoutId !== 'undefined') return false; - if (!s.params.autoplay) return false; - if (s.autoplaying) return false; - s.autoplaying = true; - s.emit('onAutoplayStart', s); - autoplay(); - }; - s.stopAutoplay = function (internal) { - if (!s.autoplayTimeoutId) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplaying = false; - s.autoplayTimeoutId = undefined; - s.emit('onAutoplayStop', s); - }; - s.pauseAutoplay = function (speed) { - if (s.autoplayPaused) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplayPaused = true; - if (speed === 0) { - s.autoplayPaused = false; - autoplay(); - } - else { - s.wrapper.transitionEnd(function () { - if (!s) return; - s.autoplayPaused = false; - if (!s.autoplaying) { - s.stopAutoplay(); - } - else { - autoplay(); - } - }); - } - }; - /*========================= - Min/Max Translate - ===========================*/ - s.minTranslate = function () { - return (-s.snapGrid[0]); - }; - s.maxTranslate = function () { - return (-s.snapGrid[s.snapGrid.length - 1]); - }; - /*========================= - Slider/slides sizes - ===========================*/ - s.updateAutoHeight = function () { - var activeSlides = []; - var newHeight = 0; - var i; - - // Find slides currently in view - if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) { - for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) { - var index = s.activeIndex + i; - if(index > s.slides.length) break; - activeSlides.push(s.slides.eq(index)[0]); - } - } else { - activeSlides.push(s.slides.eq(s.activeIndex)[0]); - } - - // Find new height from heighest slide in view - for (i = 0; i < activeSlides.length; i++) { - if (typeof activeSlides[i] !== 'undefined') { - var height = activeSlides[i].offsetHeight; - newHeight = height > newHeight ? height : newHeight; - } - } - - // Update Height - if (newHeight) s.wrapper.css('height', newHeight + 'px'); - }; - s.updateContainerSize = function () { - var width, height; - if (typeof s.params.width !== 'undefined') { - width = s.params.width; - } - else { - width = s.container[0].clientWidth; - } - if (typeof s.params.height !== 'undefined') { - height = s.params.height; - } - else { - height = s.container[0].clientHeight; - } - if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { - return; - } - - //Subtract paddings - width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); - height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); - - // Store values - s.width = width; - s.height = height; - s.size = s.isHorizontal() ? s.width : s.height; - }; - - s.updateSlidesSize = function () { - s.slides = s.wrapper.children('.' + s.params.slideClass); - s.snapGrid = []; - s.slidesGrid = []; - s.slidesSizesGrid = []; - - var spaceBetween = s.params.spaceBetween, - slidePosition = -s.params.slidesOffsetBefore, - i, - prevSlideSize = 0, - index = 0; - if (typeof s.size === 'undefined') return; - if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { - spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; - } - - s.virtualSize = -spaceBetween; - // reset margins - if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); - else s.slides.css({marginRight: '', marginBottom: ''}); - - var slidesNumberEvenToRows; - if (s.params.slidesPerColumn > 1) { - if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { - slidesNumberEvenToRows = s.slides.length; - } - else { - slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; - } - if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { - slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); - } - } - - // Calc slides - var slideSize; - var slidesPerColumn = s.params.slidesPerColumn; - var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; - var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); - for (i = 0; i < s.slides.length; i++) { - slideSize = 0; - var slide = s.slides.eq(i); - if (s.params.slidesPerColumn > 1) { - // Set slides order - var newSlideOrderIndex; - var column, row; - if (s.params.slidesPerColumnFill === 'column') { - column = Math.floor(i / slidesPerColumn); - row = i - column * slidesPerColumn; - if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { - if (++row >= slidesPerColumn) { - row = 0; - column++; - } - } - newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; - slide - .css({ - '-webkit-box-ordinal-group': newSlideOrderIndex, - '-moz-box-ordinal-group': newSlideOrderIndex, - '-ms-flex-order': newSlideOrderIndex, - '-webkit-order': newSlideOrderIndex, - 'order': newSlideOrderIndex - }); - } - else { - row = Math.floor(i / slidesPerRow); - column = i - row * slidesPerRow; - } - slide - .css( - 'margin-' + (s.isHorizontal() ? 'top' : 'left'), - (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') - ) - .attr('data-swiper-column', column) - .attr('data-swiper-row', row); - - } - if (slide.css('display') === 'none') continue; - if (s.params.slidesPerView === 'auto') { - slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); - if (s.params.roundLengths) slideSize = round(slideSize); - } - else { - slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; - if (s.params.roundLengths) slideSize = round(slideSize); - - if (s.isHorizontal()) { - s.slides[i].style.width = slideSize + 'px'; - } - else { - s.slides[i].style.height = slideSize + 'px'; - } - } - s.slides[i].swiperSlideSize = slideSize; - s.slidesSizesGrid.push(slideSize); - - - if (s.params.centeredSlides) { - slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; - if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - } - else { - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - slidePosition = slidePosition + slideSize + spaceBetween; - } - - s.virtualSize += slideSize + spaceBetween; - - prevSlideSize = slideSize; - - index ++; - } - s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; - var newSlidesGrid; - - if ( - s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { - s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - } - if (!s.support.flexbox || s.params.setWrapperSize) { - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - } - - if (s.params.slidesPerColumn > 1) { - s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; - s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - if (s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); - } - s.snapGrid = newSlidesGrid; - } - } - - // Remove last grid elements depending on width - if (!s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] <= s.virtualSize - s.size) { - newSlidesGrid.push(s.snapGrid[i]); - } - } - s.snapGrid = newSlidesGrid; - if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { - s.snapGrid.push(s.virtualSize - s.size); - } - } - if (s.snapGrid.length === 0) s.snapGrid = [0]; - - if (s.params.spaceBetween !== 0) { - if (s.isHorizontal()) { - if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); - else s.slides.css({marginRight: spaceBetween + 'px'}); - } - else s.slides.css({marginBottom: spaceBetween + 'px'}); - } - if (s.params.watchSlidesProgress) { - s.updateSlidesOffset(); - } - }; - s.updateSlidesOffset = function () { - for (var i = 0; i < s.slides.length; i++) { - s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; - } - }; - - /*========================= - Dynamic Slides Per View - ===========================*/ - s.currentSlidesPerView = function () { - var spv = 1, i, j; - if (s.params.centeredSlides) { - var size = s.slides[s.activeIndex].swiperSlideSize; - var breakLoop; - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slides[i] && !breakLoop) { - size += s.slides[i].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - for (j = s.activeIndex - 1; j >= 0; j--) { - if (s.slides[j] && !breakLoop) { - size += s.slides[j].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - } - else { - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) { - spv++; - } - } - } - return spv; - }; - /*========================= - Slider/slides progress - ===========================*/ - s.updateSlidesProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - if (s.slides.length === 0) return; - if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); - - var offsetCenter = -translate; - if (s.rtl) offsetCenter = translate; - - // Visible Slides - s.slides.removeClass(s.params.slideVisibleClass); - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides[i]; - var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); - if (s.params.watchSlidesVisibility) { - var slideBefore = -(offsetCenter - slide.swiperSlideOffset); - var slideAfter = slideBefore + s.slidesSizesGrid[i]; - var isVisible = - (slideBefore >= 0 && slideBefore < s.size) || - (slideAfter > 0 && slideAfter <= s.size) || - (slideBefore <= 0 && slideAfter >= s.size); - if (isVisible) { - s.slides.eq(i).addClass(s.params.slideVisibleClass); - } - } - slide.progress = s.rtl ? -slideProgress : slideProgress; - } - }; - s.updateProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - var translatesDiff = s.maxTranslate() - s.minTranslate(); - var wasBeginning = s.isBeginning; - var wasEnd = s.isEnd; - if (translatesDiff === 0) { - s.progress = 0; - s.isBeginning = s.isEnd = true; - } - else { - s.progress = (translate - s.minTranslate()) / (translatesDiff); - s.isBeginning = s.progress <= 0; - s.isEnd = s.progress >= 1; - } - if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); - if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); - - if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); - s.emit('onProgress', s, s.progress); - }; - s.updateActiveIndex = function () { - var translate = s.rtl ? s.translate : -s.translate; - var newActiveIndex, i, snapIndex; - for (i = 0; i < s.slidesGrid.length; i ++) { - if (typeof s.slidesGrid[i + 1] !== 'undefined') { - if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { - newActiveIndex = i; - } - else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { - newActiveIndex = i + 1; - } - } - else { - if (translate >= s.slidesGrid[i]) { - newActiveIndex = i; - } - } - } - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; - } - // for (i = 0; i < s.slidesGrid.length; i++) { - // if (- translate >= s.slidesGrid[i]) { - // newActiveIndex = i; - // } - // } - snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); - if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; - - if (newActiveIndex === s.activeIndex) { - return; - } - s.snapIndex = snapIndex; - s.previousIndex = s.activeIndex; - s.activeIndex = newActiveIndex; - s.updateClasses(); - s.updateRealIndex(); - }; - s.updateRealIndex = function(){ - s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10); - }; - - /*========================= - Classes - ===========================*/ - s.updateClasses = function () { - s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass); - var activeSlide = s.slides.eq(s.activeIndex); - // Active classes - activeSlide.addClass(s.params.slideActiveClass); - if (params.loop) { - // Duplicate to all looped slides - if (activeSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - } - // Next Slide - var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); - if (s.params.loop && nextSlide.length === 0) { - nextSlide = s.slides.eq(0); - nextSlide.addClass(s.params.slideNextClass); - } - // Prev Slide - var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); - if (s.params.loop && prevSlide.length === 0) { - prevSlide = s.slides.eq(-1); - prevSlide.addClass(s.params.slidePrevClass); - } - if (params.loop) { - // Duplicate to all looped slides - if (nextSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - if (prevSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - } - - // Pagination - if (s.paginationContainer && s.paginationContainer.length > 0) { - // Current/Total - var current, - total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - if (s.params.loop) { - current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); - if (current > s.slides.length - 1 - s.loopedSlides * 2) { - current = current - (s.slides.length - s.loopedSlides * 2); - } - if (current > total - 1) current = current - total; - if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; - } - else { - if (typeof s.snapIndex !== 'undefined') { - current = s.snapIndex; - } - else { - current = s.activeIndex || 0; - } - } - // Types - if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { - s.bullets.removeClass(s.params.bulletActiveClass); - if (s.paginationContainer.length > 1) { - s.bullets.each(function () { - if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); - }); - } - else { - s.bullets.eq(current).addClass(s.params.bulletActiveClass); - } - } - if (s.params.paginationType === 'fraction') { - s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); - s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); - } - if (s.params.paginationType === 'progress') { - var scale = (current + 1) / total, - scaleX = scale, - scaleY = 1; - if (!s.isHorizontal()) { - scaleY = scale; - scaleX = 1; - } - s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); - } - if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { - s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - - // Next/active buttons - if (!s.params.loop) { - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - if (s.isBeginning) { - s.prevButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); - } - else { - s.prevButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); - } - } - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - if (s.isEnd) { - s.nextButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); - } - else { - s.nextButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); - } - } - } - }; - - /*========================= - Pagination - ===========================*/ - s.updatePagination = function () { - if (!s.params.pagination) return; - if (s.paginationContainer && s.paginationContainer.length > 0) { - var paginationHTML = ''; - if (s.params.paginationType === 'bullets') { - var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - for (var i = 0; i < numberOfBullets; i++) { - if (s.params.paginationBulletRender) { - paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass); - } - else { - paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">'; - } - } - s.paginationContainer.html(paginationHTML); - s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); - if (s.params.paginationClickable && s.params.a11y && s.a11y) { - s.a11y.initPagination(); - } - } - if (s.params.paginationType === 'fraction') { - if (s.params.paginationFractionRender) { - paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); - } - else { - paginationHTML = - '' + - ' / ' + - ''; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType === 'progress') { - if (s.params.paginationProgressRender) { - paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); - } - else { - paginationHTML = ''; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType !== 'custom') { - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - }; - /*========================= - Common update method - ===========================*/ - s.update = function (updateTranslate) { - if (!s) return; - s.updateContainerSize(); - s.updateSlidesSize(); - s.updateProgress(); - s.updatePagination(); - s.updateClasses(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - var newTranslate; - function forceSetTranslate() { - var translate = s.rtl ? -s.translate : s.translate; - newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - } - if (updateTranslate) { - var translated; - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - if (s.params.freeMode) { - forceSetTranslate(); - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - translated = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - translated = s.slideTo(s.activeIndex, 0, false, true); - } - if (!translated) { - forceSetTranslate(); - } - } - } - else if (s.params.autoHeight) { - s.updateAutoHeight(); - } - }; - - /*========================= - Resize Handler - ===========================*/ - s.onResize = function (forceUpdatePagination) { - if (s.params.onBeforeResize) s.params.onBeforeResize(s); - //Breakpoints - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - // Disable locks on resize - var allowSwipeToPrev = s.params.allowSwipeToPrev; - var allowSwipeToNext = s.params.allowSwipeToNext; - s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; - - s.updateContainerSize(); - s.updateSlidesSize(); - if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - var slideChangedBySlideTo = false; - if (s.params.freeMode) { - var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - s.updateClasses(); - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); - } - } - if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { - s.lazy.load(); - } - // Return locks after resize - s.params.allowSwipeToPrev = allowSwipeToPrev; - s.params.allowSwipeToNext = allowSwipeToNext; - if (s.params.onAfterResize) s.params.onAfterResize(s); - }; - - /*========================= - Events - ===========================*/ - - //Define Touch Events - s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'}; - if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'}; - else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'}; - s.touchEvents = { - start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start, - move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move, - end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end - }; - - - // WP8 Touch Events Fix - if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { - (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); - } - - // Attach/detach events - s.initEvents = function (detach) { - var actionDom = detach ? 'off' : 'on'; - var action = detach ? 'removeEventListener' : 'addEventListener'; - var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; - var target = s.support.touch ? touchEventsTarget : document; - - var moveCapture = s.params.nested ? true : false; - - //Touch Events - if (s.browser.ie) { - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); - target[action](s.touchEvents.move, s.onTouchMove, moveCapture); - target[action](s.touchEvents.end, s.onTouchEnd, false); - } - else { - if (s.support.touch) { - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener); - touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); - touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener); - } - if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) { - touchEventsTarget[action]('mousedown', s.onTouchStart, false); - document[action]('mousemove', s.onTouchMove, moveCapture); - document[action]('mouseup', s.onTouchEnd, false); - } - } - window[action]('resize', s.onResize); - - // Next, Prev, Index - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.nextButton[actionDom]('click', s.onClickNext); - if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.prevButton[actionDom]('click', s.onClickPrev); - if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.pagination && s.params.paginationClickable) { - s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); - if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); - } - - // Prevent Links Clicks - if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); - }; - s.attachEvents = function () { - s.initEvents(); - }; - s.detachEvents = function () { - s.initEvents(true); - }; - - /*========================= - Handle Clicks - ===========================*/ - // Prevent Clicks - s.allowClick = true; - s.preventClicks = function (e) { - if (!s.allowClick) { - if (s.params.preventClicks) e.preventDefault(); - if (s.params.preventClicksPropagation && s.animating) { - e.stopPropagation(); - e.stopImmediatePropagation(); - } - } - }; - // Clicks - s.onClickNext = function (e) { - e.preventDefault(); - if (s.isEnd && !s.params.loop) return; - s.slideNext(); - }; - s.onClickPrev = function (e) { - e.preventDefault(); - if (s.isBeginning && !s.params.loop) return; - s.slidePrev(); - }; - s.onClickIndex = function (e) { - e.preventDefault(); - var index = $(this).index() * s.params.slidesPerGroup; - if (s.params.loop) index = index + s.loopedSlides; - s.slideTo(index); - }; - - /*========================= - Handle Touches - ===========================*/ - function findElementInEvent(e, selector) { - var el = $(e.target); - if (!el.is(selector)) { - if (typeof selector === 'string') { - el = el.parents(selector); - } - else if (selector.nodeType) { - var found; - el.parents().each(function (index, _el) { - if (_el === selector) found = selector; - }); - if (!found) return undefined; - else return selector; - } - } - if (el.length === 0) { - return undefined; - } - return el[0]; - } - s.updateClickedSlide = function (e) { - var slide = findElementInEvent(e, '.' + s.params.slideClass); - var slideFound = false; - if (slide) { - for (var i = 0; i < s.slides.length; i++) { - if (s.slides[i] === slide) slideFound = true; - } - } - - if (slide && slideFound) { - s.clickedSlide = slide; - s.clickedIndex = $(slide).index(); - } - else { - s.clickedSlide = undefined; - s.clickedIndex = undefined; - return; - } - if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { - var slideToIndex = s.clickedIndex, - realIndex, - duplicatedSlides, - slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView; - if (s.params.loop) { - if (s.animating) return; - realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10); - if (s.params.centeredSlides) { - if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - else { - if (slideToIndex > s.slides.length - slidesPerView) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - } - else { - s.slideTo(slideToIndex); - } - } - }; - - var isTouched, - isMoved, - allowTouchCallbacks, - touchStartTime, - isScrolling, - currentTranslate, - startTranslate, - allowThresholdMove, - // Form elements to match - formElements = 'input, select, textarea, button, video', - // Last click time - lastClickTime = Date.now(), clickTimeout, - //Velocities - velocities = [], - allowMomentumBounce; - - // Animating Flag - s.animating = false; - - // Touches information - s.touches = { - startX: 0, - startY: 0, - currentX: 0, - currentY: 0, - diff: 0 - }; - - // Touch handlers - var isTouchEvent, startMoving; - s.onTouchStart = function (e) { - if (e.originalEvent) e = e.originalEvent; - isTouchEvent = e.type === 'touchstart'; - if (!isTouchEvent && 'which' in e && e.which === 3) return; - if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { - s.allowClick = true; - return; - } - if (s.params.swipeHandler) { - if (!findElementInEvent(e, s.params.swipeHandler)) return; - } - - var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - - // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore - if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { - return; - } - - isTouched = true; - isMoved = false; - allowTouchCallbacks = true; - isScrolling = undefined; - startMoving = undefined; - s.touches.startX = startX; - s.touches.startY = startY; - touchStartTime = Date.now(); - s.allowClick = true; - s.updateContainerSize(); - s.swipeDirection = undefined; - if (s.params.threshold > 0) allowThresholdMove = false; - if (e.type !== 'touchstart') { - var preventDefault = true; - if ($(e.target).is(formElements)) preventDefault = false; - if (document.activeElement && $(document.activeElement).is(formElements)) { - document.activeElement.blur(); - } - if (preventDefault) { - e.preventDefault(); - } - } - s.emit('onTouchStart', s, e); - }; - - s.onTouchMove = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (isTouchEvent && e.type === 'mousemove') return; - if (e.preventedByNestedSwiper) { - s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - return; - } - if (s.params.onlyExternal) { - // isMoved = true; - s.allowClick = false; - if (isTouched) { - s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - touchStartTime = Date.now(); - } - return; - } - if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) { - if (!s.isHorizontal()) { - // Vertical - if ( - (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) || - (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate()) - ) { - return; - } - } - else { - if ( - (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) || - (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate()) - ) { - return; - } - } - } - if (isTouchEvent && document.activeElement) { - if (e.target === document.activeElement && $(e.target).is(formElements)) { - isMoved = true; - s.allowClick = false; - return; - } - } - if (allowTouchCallbacks) { - s.emit('onTouchMove', s, e); - } - if (e.targetTouches && e.targetTouches.length > 1) return; - - s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (typeof isScrolling === 'undefined') { - var touchAngle; - if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) { - isScrolling = false; - } - else { - touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; - isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); - } - } - if (isScrolling) { - s.emit('onTouchMoveOpposite', s, e); - } - if (typeof startMoving === 'undefined') { - if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { - startMoving = true; - } - } - if (!isTouched) return; - if (isScrolling) { - isTouched = false; - return; - } - if (!startMoving) { - return; - } - s.allowClick = false; - s.emit('onSliderMove', s, e); - e.preventDefault(); - if (s.params.touchMoveStopPropagation && !s.params.nested) { - e.stopPropagation(); - } - - if (!isMoved) { - if (params.loop) { - s.fixLoop(); - } - startTranslate = s.getWrapperTranslate(); - s.setWrapperTransition(0); - if (s.animating) { - s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); - } - if (s.params.autoplay && s.autoplaying) { - if (s.params.autoplayDisableOnInteraction) { - s.stopAutoplay(); - } - else { - s.pauseAutoplay(); - } - } - allowMomentumBounce = false; - //Grab Cursor - if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(true); - } - } - isMoved = true; - - var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - - diff = diff * s.params.touchRatio; - if (s.rtl) diff = -diff; - - s.swipeDirection = diff > 0 ? 'prev' : 'next'; - currentTranslate = diff + startTranslate; - - var disableParentSwiper = true; - if ((diff > 0 && currentTranslate > s.minTranslate())) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); - } - else if (diff < 0 && currentTranslate < s.maxTranslate()) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); - } - - if (disableParentSwiper) { - e.preventedByNestedSwiper = true; - } - - // Directions locks - if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { - currentTranslate = startTranslate; - } - if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { - currentTranslate = startTranslate; - } - - - // Threshold - if (s.params.threshold > 0) { - if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { - if (!allowThresholdMove) { - allowThresholdMove = true; - s.touches.startX = s.touches.currentX; - s.touches.startY = s.touches.currentY; - currentTranslate = startTranslate; - s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - return; - } - } - else { - currentTranslate = startTranslate; - return; - } - } - - if (!s.params.followFinger) return; - - // Update active index in free mode - if (s.params.freeMode || s.params.watchSlidesProgress) { - s.updateActiveIndex(); - } - if (s.params.freeMode) { - //Velocity - if (velocities.length === 0) { - velocities.push({ - position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], - time: touchStartTime - }); - } - velocities.push({ - position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], - time: (new window.Date()).getTime() - }); - } - // Update progress - s.updateProgress(currentTranslate); - // Update translate - s.setWrapperTranslate(currentTranslate); - }; - s.onTouchEnd = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (allowTouchCallbacks) { - s.emit('onTouchEnd', s, e); - } - allowTouchCallbacks = false; - if (!isTouched) return; - //Return Grab Cursor - if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(false); - } - - // Time diff - var touchEndTime = Date.now(); - var timeDiff = touchEndTime - touchStartTime; - - // Tap, doubleTap, Click - if (s.allowClick) { - s.updateClickedSlide(e); - s.emit('onTap', s, e); - if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { - if (clickTimeout) clearTimeout(clickTimeout); - clickTimeout = setTimeout(function () { - if (!s) return; - if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { - s.paginationContainer.toggleClass(s.params.paginationHiddenClass); - } - s.emit('onClick', s, e); - }, 300); - - } - if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { - if (clickTimeout) clearTimeout(clickTimeout); - s.emit('onDoubleTap', s, e); - } - } - - lastClickTime = Date.now(); - setTimeout(function () { - if (s) s.allowClick = true; - }, 0); - - if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { - isTouched = isMoved = false; - return; - } - isTouched = isMoved = false; - - var currentPos; - if (s.params.followFinger) { - currentPos = s.rtl ? s.translate : -s.translate; - } - else { - currentPos = -currentTranslate; - } - if (s.params.freeMode) { - if (currentPos < -s.minTranslate()) { - s.slideTo(s.activeIndex); - return; - } - else if (currentPos > -s.maxTranslate()) { - if (s.slides.length < s.snapGrid.length) { - s.slideTo(s.snapGrid.length - 1); - } - else { - s.slideTo(s.slides.length - 1); - } - return; - } - - if (s.params.freeModeMomentum) { - if (velocities.length > 1) { - var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); - - var distance = lastMoveEvent.position - velocityEvent.position; - var time = lastMoveEvent.time - velocityEvent.time; - s.velocity = distance / time; - s.velocity = s.velocity / 2; - if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { - s.velocity = 0; - } - // this implies that the user stopped moving a finger then released. - // There would be no events with distance zero, so the last event is stale. - if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { - s.velocity = 0; - } - } else { - s.velocity = 0; - } - s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio; - - velocities.length = 0; - var momentumDuration = 1000 * s.params.freeModeMomentumRatio; - var momentumDistance = s.velocity * momentumDuration; - - var newPosition = s.translate + momentumDistance; - if (s.rtl) newPosition = - newPosition; - var doBounce = false; - var afterBouncePosition; - var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; - if (newPosition < s.maxTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition + s.maxTranslate() < -bounceAmount) { - newPosition = s.maxTranslate() - bounceAmount; - } - afterBouncePosition = s.maxTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.maxTranslate(); - } - } - else if (newPosition > s.minTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition - s.minTranslate() > bounceAmount) { - newPosition = s.minTranslate() + bounceAmount; - } - afterBouncePosition = s.minTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.minTranslate(); - } - } - else if (s.params.freeModeSticky) { - var j = 0, - nextSlide; - for (j = 0; j < s.snapGrid.length; j += 1) { - if (s.snapGrid[j] > -newPosition) { - nextSlide = j; - break; - } - - } - if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { - newPosition = s.snapGrid[nextSlide]; - } else { - newPosition = s.snapGrid[nextSlide - 1]; - } - if (!s.rtl) newPosition = - newPosition; - } - //Fix duration - if (s.velocity !== 0) { - if (s.rtl) { - momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); - } - else { - momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); - } - } - else if (s.params.freeModeSticky) { - s.slideReset(); - return; - } - - if (s.params.freeModeMomentumBounce && doBounce) { - s.updateProgress(afterBouncePosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s || !allowMomentumBounce) return; - s.emit('onMomentumBounce', s); - - s.setWrapperTransition(s.params.speed); - s.setWrapperTranslate(afterBouncePosition); - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - }); - } else if (s.velocity) { - s.updateProgress(newPosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - } - - } else { - s.updateProgress(newPosition); - } - - s.updateActiveIndex(); - } - if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { - s.updateProgress(); - s.updateActiveIndex(); - } - return; - } - - // Find current slide - var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; - for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { - if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { - if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { - stopIndex = i; - groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; - } - } - else { - if (currentPos >= s.slidesGrid[i]) { - stopIndex = i; - groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; - } - } - } - - // Find current slide size - var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; - - if (timeDiff > s.params.longSwipesMs) { - // Long touches - if (!s.params.longSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - - } - if (s.swipeDirection === 'prev') { - if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - } - } - else { - // Short swipes - if (!s.params.shortSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - s.slideTo(stopIndex + s.params.slidesPerGroup); - - } - if (s.swipeDirection === 'prev') { - s.slideTo(stopIndex); - } - } - }; - /*========================= - Transitions - ===========================*/ - s._slideTo = function (slideIndex, speed) { - return s.slideTo(slideIndex, speed, true, true); - }; - s.slideTo = function (slideIndex, speed, runCallbacks, internal) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (typeof slideIndex === 'undefined') slideIndex = 0; - if (slideIndex < 0) slideIndex = 0; - s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); - if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; - - var translate = - s.snapGrid[s.snapIndex]; - // Stop autoplay - if (s.params.autoplay && s.autoplaying) { - if (internal || !s.params.autoplayDisableOnInteraction) { - s.pauseAutoplay(speed); - } - else { - s.stopAutoplay(); - } - } - // Update progress - s.updateProgress(translate); - - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - for (var i = 0; i < s.slidesGrid.length; i++) { - if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { - slideIndex = i; - } - } - } - - // Directions locks - if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { - return false; - } - if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { - if ((s.activeIndex || 0) !== slideIndex ) return false; - } - - // Update Index - if (typeof speed === 'undefined') speed = s.params.speed; - s.previousIndex = s.activeIndex || 0; - s.activeIndex = slideIndex; - s.updateRealIndex(); - if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { - // Update Height - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - s.updateClasses(); - if (s.params.effect !== 'slide') { - s.setWrapperTranslate(translate); - } - return false; - } - s.updateClasses(); - s.onTransitionStart(runCallbacks); - - if (speed === 0 || s.browser.lteIE9) { - s.setWrapperTranslate(translate); - s.setWrapperTransition(0); - s.onTransitionEnd(runCallbacks); - } - else { - s.setWrapperTranslate(translate); - s.setWrapperTransition(speed); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(runCallbacks); - }); - } - - } - - return true; - }; - - s.onTransitionStart = function (runCallbacks) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - if (s.lazy) s.lazy.onTransitionStart(); - if (runCallbacks) { - s.emit('onTransitionStart', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeStart', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextStart', s); - } - else { - s.emit('onSlidePrevStart', s); - } - } - - } - }; - s.onTransitionEnd = function (runCallbacks) { - s.animating = false; - s.setWrapperTransition(0); - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.lazy) s.lazy.onTransitionEnd(); - if (runCallbacks) { - s.emit('onTransitionEnd', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeEnd', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextEnd', s); - } - else { - s.emit('onSlidePrevEnd', s); - } - } - } - if (s.params.history && s.history) { - s.history.setHistory(s.params.history, s.activeIndex); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.setHash(); - } - - }; - s.slideNext = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - }; - s._slideNext = function (speed) { - return s.slideNext(true, speed, true); - }; - s.slidePrev = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - }; - s._slidePrev = function (speed) { - return s.slidePrev(true, speed, true); - }; - s.slideReset = function (runCallbacks, speed, internal) { - return s.slideTo(s.activeIndex, speed, runCallbacks); - }; - - s.disableTouchControl = function () { - s.params.onlyExternal = true; - return true; - }; - s.enableTouchControl = function () { - s.params.onlyExternal = false; - return true; - }; - - /*========================= - Translate/transition helpers - ===========================*/ - s.setWrapperTransition = function (duration, byController) { - s.wrapper.transition(duration); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTransition(duration); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTransition(duration); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTransition(duration); - } - if (s.params.control && s.controller) { - s.controller.setTransition(duration, byController); - } - s.emit('onSetTransition', s, duration); - }; - s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { - var x = 0, y = 0, z = 0; - if (s.isHorizontal()) { - x = s.rtl ? -translate : translate; - } - else { - y = translate; - } - - if (s.params.roundLengths) { - x = round(x); - y = round(y); - } - - if (!s.params.virtualTranslate) { - if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); - else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); - } - - s.translate = s.isHorizontal() ? x : y; - - // Check if we need to update progress - var progress; - var translatesDiff = s.maxTranslate() - s.minTranslate(); - if (translatesDiff === 0) { - progress = 0; - } - else { - progress = (translate - s.minTranslate()) / (translatesDiff); - } - if (progress !== s.progress) { - s.updateProgress(translate); - } - - if (updateActiveIndex) s.updateActiveIndex(); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTranslate(s.translate); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTranslate(s.translate); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTranslate(s.translate); - } - if (s.params.control && s.controller) { - s.controller.setTranslate(s.translate, byController); - } - s.emit('onSetTranslate', s, s.translate); - }; - - s.getTranslate = function (el, axis) { - var matrix, curTransform, curStyle, transformMatrix; - - // automatic axis detection - if (typeof axis === 'undefined') { - axis = 'x'; - } - - if (s.params.virtualTranslate) { - return s.rtl ? -s.translate : s.translate; - } - - curStyle = window.getComputedStyle(el, null); - if (window.WebKitCSSMatrix) { - curTransform = curStyle.transform || curStyle.webkitTransform; - if (curTransform.split(',').length > 6) { - curTransform = curTransform.split(', ').map(function(a){ - return a.replace(',','.'); - }).join(', '); - } - // Some old versions of Webkit choke when 'none' is passed; pass - // empty string instead in this case - transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); - } - else { - transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); - matrix = transformMatrix.toString().split(','); - } - - if (axis === 'x') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m41; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[12]); - //Normal Browsers - else - curTransform = parseFloat(matrix[4]); - } - if (axis === 'y') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m42; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[13]); - //Normal Browsers - else - curTransform = parseFloat(matrix[5]); - } - if (s.rtl && curTransform) curTransform = -curTransform; - return curTransform || 0; - }; - s.getWrapperTranslate = function (axis) { - if (typeof axis === 'undefined') { - axis = s.isHorizontal() ? 'x' : 'y'; - } - return s.getTranslate(s.wrapper[0], axis); - }; - - /*========================= - Observer - ===========================*/ - s.observers = []; - function initObserver(target, options) { - options = options || {}; - // create an observer instance - var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; - var observer = new ObserverFunc(function (mutations) { - mutations.forEach(function (mutation) { - s.onResize(true); - s.emit('onObserverUpdate', s, mutation); - }); - }); - - observer.observe(target, { - attributes: typeof options.attributes === 'undefined' ? true : options.attributes, - childList: typeof options.childList === 'undefined' ? true : options.childList, - characterData: typeof options.characterData === 'undefined' ? true : options.characterData - }); - - s.observers.push(observer); - } - s.initObservers = function () { - if (s.params.observeParents) { - var containerParents = s.container.parents(); - for (var i = 0; i < containerParents.length; i++) { - initObserver(containerParents[i]); - } - } - - // Observe container - initObserver(s.container[0], {childList: false}); - - // Observe wrapper - initObserver(s.wrapper[0], {attributes: false}); - }; - s.disconnectObservers = function () { - for (var i = 0; i < s.observers.length; i++) { - s.observers[i].disconnect(); - } - s.observers = []; - }; - /*========================= - Loop - ===========================*/ - // Create looped slides - s.createLoop = function () { - // Remove duplicated slides - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - - var slides = s.wrapper.children('.' + s.params.slideClass); - - if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; - - s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); - s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; - if (s.loopedSlides > slides.length) { - s.loopedSlides = slides.length; - } - - var prependSlides = [], appendSlides = [], i; - slides.each(function (index, el) { - var slide = $(this); - if (index < s.loopedSlides) appendSlides.push(el); - if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); - slide.attr('data-swiper-slide-index', index); - }); - for (i = 0; i < appendSlides.length; i++) { - s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - for (i = prependSlides.length - 1; i >= 0; i--) { - s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - }; - s.destroyLoop = function () { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - s.slides.removeAttr('data-swiper-slide-index'); - }; - s.reLoop = function (updatePosition) { - var oldIndex = s.activeIndex - s.loopedSlides; - s.destroyLoop(); - s.createLoop(); - s.updateSlidesSize(); - if (updatePosition) { - s.slideTo(oldIndex + s.loopedSlides, 0, false); - } - - }; - s.fixLoop = function () { - var newIndex; - //Fix For Negative Oversliding - if (s.activeIndex < s.loopedSlides) { - newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - //Fix For Positive Oversliding - else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { - newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - }; - /*========================= - Append/Prepend/Remove Slides - ===========================*/ - s.appendSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.append(slides[i]); - } - } - else { - s.wrapper.append(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - }; - s.prependSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - var newActiveIndex = s.activeIndex + 1; - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.prepend(slides[i]); - } - newActiveIndex = s.activeIndex + slides.length; - } - else { - s.wrapper.prepend(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - s.slideTo(newActiveIndex, 0, false); - }; - s.removeSlide = function (slidesIndexes) { - if (s.params.loop) { - s.destroyLoop(); - s.slides = s.wrapper.children('.' + s.params.slideClass); - } - var newActiveIndex = s.activeIndex, - indexToRemove; - if (typeof slidesIndexes === 'object' && slidesIndexes.length) { - for (var i = 0; i < slidesIndexes.length; i++) { - indexToRemove = slidesIndexes[i]; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - } - newActiveIndex = Math.max(newActiveIndex, 0); - } - else { - indexToRemove = slidesIndexes; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - newActiveIndex = Math.max(newActiveIndex, 0); - } - - if (s.params.loop) { - s.createLoop(); - } - - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - if (s.params.loop) { - s.slideTo(newActiveIndex + s.loopedSlides, 0, false); - } - else { - s.slideTo(newActiveIndex, 0, false); - } - - }; - s.removeAllSlides = function () { - var slidesIndexes = []; - for (var i = 0; i < s.slides.length; i++) { - slidesIndexes.push(i); - } - s.removeSlide(slidesIndexes); - }; - - - /*========================= - Effects - ===========================*/ - s.effects = { - fade: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var offset = slide[0].swiperSlideOffset; - var tx = -offset; - if (!s.params.virtualTranslate) tx = tx - s.translate; - var ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - var slideOpacity = s.params.fade.crossFade ? - Math.max(1 - Math.abs(slide[0].progress), 0) : - 1 + Math.min(Math.max(slide[0].progress, -1), 0); - slide - .css({ - opacity: slideOpacity - }) - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); - - } - - }, - setTransition: function (duration) { - s.slides.transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - flip: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var progress = slide[0].progress; - if (s.params.flip.limitRotation) { - progress = Math.max(Math.min(slide[0].progress, 1), -1); - } - var offset = slide[0].swiperSlideOffset; - var rotate = -180 * progress, - rotateY = rotate, - rotateX = 0, - tx = -offset, - ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - rotateX = -rotateY; - rotateY = 0; - } - else if (s.rtl) { - rotateY = -rotateY; - } - - slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; - - if (s.params.flip.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - - slide - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.eq(s.activeIndex).transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - if (!$(this).hasClass(s.params.slideActiveClass)) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - cube: { - setTranslate: function () { - var wrapperRotate = 0, cubeShadow; - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow = s.wrapper.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('
'); - s.wrapper.append(cubeShadow); - } - cubeShadow.css({height: s.width + 'px'}); - } - else { - cubeShadow = s.container.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('
'); - s.container.append(cubeShadow); - } - } - } - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var slideAngle = i * 90; - var round = Math.floor(slideAngle / 360); - if (s.rtl) { - slideAngle = -slideAngle; - round = Math.floor(-slideAngle / 360); - } - var progress = Math.max(Math.min(slide[0].progress, 1), -1); - var tx = 0, ty = 0, tz = 0; - if (i % 4 === 0) { - tx = - round * 4 * s.size; - tz = 0; - } - else if ((i - 1) % 4 === 0) { - tx = 0; - tz = - round * 4 * s.size; - } - else if ((i - 2) % 4 === 0) { - tx = s.size + round * 4 * s.size; - tz = s.size; - } - else if ((i - 3) % 4 === 0) { - tx = - s.size; - tz = 3 * s.size + s.size * 4 * round; - } - if (s.rtl) { - tx = -tx; - } - - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - - var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; - if (progress <= 1 && progress > -1) { - wrapperRotate = i * 90 + progress * 90; - if (s.rtl) wrapperRotate = -i * 90 - progress * 90; - } - slide.transform(transform); - if (s.params.cube.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - } - s.wrapper.css({ - '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' - }); - - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); - } - else { - var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; - var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); - var scale1 = s.params.cube.shadowScale, - scale2 = s.params.cube.shadowScale / multiplier, - offset = s.params.cube.shadowOffset; - cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); - } - } - var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; - s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.cube.shadow && !s.isHorizontal()) { - s.container.find('.swiper-cube-shadow').transition(duration); - } - } - }, - coverflow: { - setTranslate: function () { - var transform = s.translate; - var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; - var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; - var translate = s.params.coverflow.depth; - //Each slide offset from center - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideSize = s.slidesSizesGrid[i]; - var slideOffset = slide[0].swiperSlideOffset; - var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; - - var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; - var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; - // var rotateZ = 0 - var translateZ = -translate * Math.abs(offsetMultiplier); - - var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); - var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; - - //Fix for ultra small values - if (Math.abs(translateX) < 0.001) translateX = 0; - if (Math.abs(translateY) < 0.001) translateY = 0; - if (Math.abs(translateZ) < 0.001) translateZ = 0; - if (Math.abs(rotateY) < 0.001) rotateY = 0; - if (Math.abs(rotateX) < 0.001) rotateX = 0; - - var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; - - slide.transform(slideTransform); - slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; - if (s.params.coverflow.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('
'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('
'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; - if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; - } - } - - //Set correct perspective for IE10 - if (s.browser.ie) { - var ws = s.wrapper[0].style; - ws.perspectiveOrigin = center + 'px 50%'; - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - } - } - }; - - - /*========================= - Images Lazy Loading - ===========================*/ - s.lazy = { - initialImageLoaded: false, - loadImageInSlide: function (index, loadInDuplicate) { - if (typeof index === 'undefined') return; - if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; - if (s.slides.length === 0) return; - - var slide = s.slides.eq(index); - var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')'); - if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) { - img = img.add(slide[0]); - } - if (img.length === 0) return; - - img.each(function () { - var _img = $(this); - _img.addClass(s.params.lazyStatusLoadingClass); - var background = _img.attr('data-background'); - var src = _img.attr('data-src'), - srcset = _img.attr('data-srcset'), - sizes = _img.attr('data-sizes'); - s.loadImage(_img[0], (src || background), srcset, sizes, false, function () { - if (typeof s === 'undefined' || s === null || !s) return; - if (background) { - _img.css('background-image', 'url("' + background + '")'); - _img.removeAttr('data-background'); - } - else { - if (srcset) { - _img.attr('srcset', srcset); - _img.removeAttr('data-srcset'); - } - if (sizes) { - _img.attr('sizes', sizes); - _img.removeAttr('data-sizes'); - } - if (src) { - _img.attr('src', src); - _img.removeAttr('data-src'); - } - - } - - _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass); - slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove(); - if (s.params.loop && loadInDuplicate) { - var slideOriginalIndex = slide.attr('data-swiper-slide-index'); - if (slide.hasClass(s.params.slideDuplicateClass)) { - var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); - s.lazy.loadImageInSlide(originalSlide.index(), false); - } - else { - var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); - s.lazy.loadImageInSlide(duplicatedSlide.index(), false); - } - } - s.emit('onLazyImageReady', s, slide[0], _img[0]); - }); - - s.emit('onLazyImageLoad', s, slide[0], _img[0]); - }); - - }, - load: function () { - var i; - var slidesPerView = s.params.slidesPerView; - if (slidesPerView === 'auto') { - slidesPerView = 0; - } - if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true; - if (s.params.watchSlidesVisibility) { - s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { - s.lazy.loadImageInSlide($(this).index()); - }); - } - else { - if (slidesPerView > 1) { - for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - s.lazy.loadImageInSlide(s.activeIndex); - } - } - if (s.params.lazyLoadingInPrevNext) { - if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { - var amount = s.params.lazyLoadingInPrevNextAmount; - var spv = slidesPerView; - var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); - var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); - // Next Slides - for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - // Prev Slides - for (i = minIndex; i < s.activeIndex ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); - if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); - - var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); - if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); - } - } - }, - onTransitionStart: function () { - if (s.params.lazyLoading) { - if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { - s.lazy.load(); - } - } - }, - onTransitionEnd: function () { - if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { - s.lazy.load(); - } - } - }; - - - /*========================= - Scrollbar - ===========================*/ - s.scrollbar = { - isTouched: false, - setDragPosition: function (e) { - var sb = s.scrollbar; - var x = 0, y = 0; - var translate; - var pointerPosition = s.isHorizontal() ? - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; - var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; - var positionMin = -s.minTranslate() * sb.moveDivider; - var positionMax = -s.maxTranslate() * sb.moveDivider; - if (position < positionMin) { - position = positionMin; - } - else if (position > positionMax) { - position = positionMax; - } - position = -position / sb.moveDivider; - s.updateProgress(position); - s.setWrapperTranslate(position, true); - }, - dragStart: function (e) { - var sb = s.scrollbar; - sb.isTouched = true; - e.preventDefault(); - e.stopPropagation(); - - sb.setDragPosition(e); - clearTimeout(sb.dragTimeout); - - sb.track.transition(0); - if (s.params.scrollbarHide) { - sb.track.css('opacity', 1); - } - s.wrapper.transition(100); - sb.drag.transition(100); - s.emit('onScrollbarDragStart', s); - }, - dragMove: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - sb.setDragPosition(e); - s.wrapper.transition(0); - sb.track.transition(0); - sb.drag.transition(0); - s.emit('onScrollbarDragMove', s); - }, - dragEnd: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - sb.isTouched = false; - if (s.params.scrollbarHide) { - clearTimeout(sb.dragTimeout); - sb.dragTimeout = setTimeout(function () { - sb.track.css('opacity', 0); - sb.track.transition(400); - }, 1000); - - } - s.emit('onScrollbarDragEnd', s); - if (s.params.scrollbarSnapOnRelease) { - s.slideReset(); - } - }, - draggableEvents: (function () { - if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop; - else return s.touchEvents; - })(), - enableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).on(sb.draggableEvents.start, sb.dragStart); - $(target).on(sb.draggableEvents.move, sb.dragMove); - $(target).on(sb.draggableEvents.end, sb.dragEnd); - }, - disableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).off(sb.draggableEvents.start, sb.dragStart); - $(target).off(sb.draggableEvents.move, sb.dragMove); - $(target).off(sb.draggableEvents.end, sb.dragEnd); - }, - set: function () { - if (!s.params.scrollbar) return; - var sb = s.scrollbar; - sb.track = $(s.params.scrollbar); - if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { - sb.track = s.container.find(s.params.scrollbar); - } - sb.drag = sb.track.find('.swiper-scrollbar-drag'); - if (sb.drag.length === 0) { - sb.drag = $('
'); - sb.track.append(sb.drag); - } - sb.drag[0].style.width = ''; - sb.drag[0].style.height = ''; - sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; - - sb.divider = s.size / s.virtualSize; - sb.moveDivider = sb.divider * (sb.trackSize / s.size); - sb.dragSize = sb.trackSize * sb.divider; - - if (s.isHorizontal()) { - sb.drag[0].style.width = sb.dragSize + 'px'; - } - else { - sb.drag[0].style.height = sb.dragSize + 'px'; - } - - if (sb.divider >= 1) { - sb.track[0].style.display = 'none'; - } - else { - sb.track[0].style.display = ''; - } - if (s.params.scrollbarHide) { - sb.track[0].style.opacity = 0; - } - }, - setTranslate: function () { - if (!s.params.scrollbar) return; - var diff; - var sb = s.scrollbar; - var translate = s.translate || 0; - var newPos; - - var newSize = sb.dragSize; - newPos = (sb.trackSize - sb.dragSize) * s.progress; - if (s.rtl && s.isHorizontal()) { - newPos = -newPos; - if (newPos > 0) { - newSize = sb.dragSize - newPos; - newPos = 0; - } - else if (-newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize + newPos; - } - } - else { - if (newPos < 0) { - newSize = sb.dragSize + newPos; - newPos = 0; - } - else if (newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize - newPos; - } - } - if (s.isHorizontal()) { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); - } - else { - sb.drag.transform('translateX(' + (newPos) + 'px)'); - } - sb.drag[0].style.width = newSize + 'px'; - } - else { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); - } - else { - sb.drag.transform('translateY(' + (newPos) + 'px)'); - } - sb.drag[0].style.height = newSize + 'px'; - } - if (s.params.scrollbarHide) { - clearTimeout(sb.timeout); - sb.track[0].style.opacity = 1; - sb.timeout = setTimeout(function () { - sb.track[0].style.opacity = 0; - sb.track.transition(400); - }, 1000); - } - }, - setTransition: function (duration) { - if (!s.params.scrollbar) return; - s.scrollbar.drag.transition(duration); - } - }; - - - /*========================= - Controller - ===========================*/ - s.controller = { - LinearSpline: function (x, y) { - var binarySearch = (function() { - var maxIndex, minIndex, guess; - return function(array, val) { - minIndex = -1; - maxIndex = array.length; - while (maxIndex - minIndex > 1) - if (array[guess = maxIndex + minIndex >> 1] <= val) { - minIndex = guess; - } else { - maxIndex = guess; - } - return maxIndex; - }; - })(); - this.x = x; - this.y = y; - this.lastIndex = x.length - 1; - // Given an x value (x2), return the expected y2 value: - // (x1,y1) is the known point before given value, - // (x3,y3) is the known point after given value. - var i1, i3; - var l = this.x.length; - - this.interpolate = function (x2) { - if (!x2) return 0; - - // Get the indexes of x1 and x3 (the array indexes before and after given x2): - i3 = binarySearch(this.x, x2); - i1 = i3 - 1; - - // We have our indexes i1 & i3, so we can calculate already: - // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 - return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; - }; - }, - //xxx: for now i will just save one spline function to to - getInterpolateFunction: function(c){ - if(!s.controller.spline) s.controller.spline = s.params.loop ? - new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : - new s.controller.LinearSpline(s.snapGrid, c.snapGrid); - }, - setTranslate: function (translate, byController) { - var controlled = s.params.control; - var multiplier, controlledTranslate; - function setControlledTranslate(c) { - // this will create an Interpolate function based on the snapGrids - // x is the Grid of the scrolled scroller and y will be the controlled scroller - // it makes sense to create this only once and recall it for the interpolation - // the function does a lot of value caching for performance - translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; - if (s.params.controlBy === 'slide') { - s.controller.getInterpolateFunction(c); - // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid - // but it did not work out - controlledTranslate = -s.controller.spline.interpolate(-translate); - } - - if(!controlledTranslate || s.params.controlBy === 'container'){ - multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); - controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); - } - - if (s.params.controlInverse) { - controlledTranslate = c.maxTranslate() - controlledTranslate; - } - c.updateProgress(controlledTranslate); - c.setWrapperTranslate(controlledTranslate, false, s); - c.updateActiveIndex(); - } - if (Array.isArray(controlled)) { - for (var i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTranslate(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - - setControlledTranslate(controlled); - } - }, - setTransition: function (duration, byController) { - var controlled = s.params.control; - var i; - function setControlledTransition(c) { - c.setWrapperTransition(duration, s); - if (duration !== 0) { - c.onTransitionStart(); - c.wrapper.transitionEnd(function(){ - if (!controlled) return; - if (c.params.loop && s.params.controlBy === 'slide') { - c.fixLoop(); - } - c.onTransitionEnd(); - - }); - } - } - if (Array.isArray(controlled)) { - for (i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTransition(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - setControlledTransition(controlled); - } - } - }; - - - /*========================= - Hash Navigation - ===========================*/ - s.hashnav = { - onHashCange: function (e, a) { - var newHash = document.location.hash.replace('#', ''); - var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash'); - if (newHash !== activeSlideHash) { - s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash="' + (newHash) + '"]').index()); - } - }, - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - $(window)[action]('hashchange', s.hashnav.onHashCange); - }, - setHash: function () { - if (!s.hashnav.initialized || !s.params.hashnav) return; - if (s.params.replaceState && window.history && window.history.replaceState) { - window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || '')); - } else { - var slide = s.slides.eq(s.activeIndex); - var hash = slide.attr('data-hash') || slide.attr('data-history'); - document.location.hash = hash || ''; - } - }, - init: function () { - if (!s.params.hashnav || s.params.history) return; - s.hashnav.initialized = true; - var hash = document.location.hash.replace('#', ''); - if (hash) { - var speed = 0; - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHash = slide.attr('data-hash') || slide.attr('data-history'); - if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, s.params.runCallbacksOnInit, true); - } - } - } - if (s.params.hashnavWatchState) s.hashnav.attachEvents(); - }, - destroy: function () { - if (s.params.hashnavWatchState) s.hashnav.attachEvents(true); - } - }; - - - /*========================= - History Api with fallback to Hashnav - ===========================*/ - s.history = { - init: function () { - if (!s.params.history) return; - if (!window.history || !window.history.pushState) { - s.params.history = false; - s.params.hashnav = true; - return; - } - s.history.initialized = true; - this.paths = this.getPathValues(); - if (!this.paths.key && !this.paths.value) return; - this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit); - if (!s.params.replaceState) { - window.addEventListener('popstate', this.setHistoryPopState); - } - }, - setHistoryPopState: function() { - s.history.paths = s.history.getPathValues(); - s.history.scrollToSlide(s.params.speed, s.history.paths.value, false); - }, - getPathValues: function() { - var pathArray = window.location.pathname.slice(1).split('/'); - var total = pathArray.length; - var key = pathArray[total - 2]; - var value = pathArray[total - 1]; - return { key: key, value: value }; - }, - setHistory: function (key, index) { - if (!s.history.initialized || !s.params.history) return; - var slide = s.slides.eq(index); - var value = this.slugify(slide.attr('data-history')); - if (!window.location.pathname.includes(key)) { - value = key + '/' + value; - } - if (s.params.replaceState) { - window.history.replaceState(null, null, value); - } else { - window.history.pushState(null, null, value); - } - }, - slugify: function(text) { - return text.toString().toLowerCase() - .replace(/\s+/g, '-') - .replace(/[^\w\-]+/g, '') - .replace(/\-\-+/g, '-') - .replace(/^-+/, '') - .replace(/-+$/, ''); - }, - scrollToSlide: function(speed, value, runCallbacks) { - if (value) { - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHistory = this.slugify(slide.attr('data-history')); - if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, runCallbacks); - } - } - } else { - s.slideTo(0, speed, runCallbacks); - } - } - }; - - - /*========================= - Keyboard Control - ===========================*/ - function handleKeyboard(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var kc = e.keyCode || e.charCode; - // Directions locks - if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { - return false; - } - if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { - return false; - } - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { - return; - } - if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { - return; - } - if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { - var inView = false; - //Check that swiper should be inside of visible area of window - if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) { - return; - } - var windowScroll = { - left: window.pageXOffset, - top: window.pageYOffset - }; - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var swiperOffset = s.container.offset(); - if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; - var swiperCoord = [ - [swiperOffset.left, swiperOffset.top], - [swiperOffset.left + s.width, swiperOffset.top], - [swiperOffset.left, swiperOffset.top + s.height], - [swiperOffset.left + s.width, swiperOffset.top + s.height] - ]; - for (var i = 0; i < swiperCoord.length; i++) { - var point = swiperCoord[i]; - if ( - point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && - point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight - ) { - inView = true; - } - - } - if (!inView) return; - } - if (s.isHorizontal()) { - if (kc === 37 || kc === 39) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); - if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); - } - else { - if (kc === 38 || kc === 40) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if (kc === 40) s.slideNext(); - if (kc === 38) s.slidePrev(); - } - s.emit('onKeyPress', s, kc); - } - s.disableKeyboardControl = function () { - s.params.keyboardControl = false; - $(document).off('keydown', handleKeyboard); - }; - s.enableKeyboardControl = function () { - s.params.keyboardControl = true; - $(document).on('keydown', handleKeyboard); - }; - - - /*========================= - Mousewheel Control - ===========================*/ - s.mousewheel = { - event: false, - lastScrollTime: (new window.Date()).getTime() - }; - function isEventSupported() { - var eventName = 'onwheel'; - var isSupported = eventName in document; - - if (!isSupported) { - var element = document.createElement('div'); - element.setAttribute(eventName, 'return;'); - isSupported = typeof element[eventName] === 'function'; - } - - if (!isSupported && - document.implementation && - document.implementation.hasFeature && - // always returns true in newer browsers as per the standard. - // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature - document.implementation.hasFeature('', '') !== true ) { - // This is the only way to test support for the `wheel` event in IE9+. - isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); - } - - return isSupported; - } - /** - * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is - * complicated, thus this doc is long and (hopefully) detailed enough to answer - * your questions. - * - * If you need to react to the mouse wheel in a predictable way, this code is - * like your bestest friend. * hugs * - * - * As of today, there are 4 DOM event types you can listen to: - * - * 'wheel' -- Chrome(31+), FF(17+), IE(9+) - * 'mousewheel' -- Chrome, IE(6+), Opera, Safari - * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother! - * 'DOMMouseScroll' -- FF(0.9.7+) since 2003 - * - * So what to do? The is the best: - * - * normalizeWheel.getEventType(); - * - * In your event callback, use this code to get sane interpretation of the - * deltas. This code will return an object with properties: - * - * spinX -- normalized spin speed (use for zoom) - x plane - * spinY -- " - y plane - * pixelX -- normalized distance (to pixels) - x plane - * pixelY -- " - y plane - * - * Wheel values are provided by the browser assuming you are using the wheel to - * scroll a web page by a number of lines or pixels (or pages). Values can vary - * significantly on different platforms and browsers, forgetting that you can - * scroll at different speeds. Some devices (like trackpads) emit more events - * at smaller increments with fine granularity, and some emit massive jumps with - * linear speed or acceleration. - * - * This code does its best to normalize the deltas for you: - * - * - spin is trying to normalize how far the wheel was spun (or trackpad - * dragged). This is super useful for zoom support where you want to - * throw away the chunky scroll steps on the PC and make those equal to - * the slow and smooth tiny steps on the Mac. Key data: This code tries to - * resolve a single slow step on a wheel to 1. - * - * - pixel is normalizing the desired scroll delta in pixel units. You'll - * get the crazy differences between browsers, but at least it'll be in - * pixels! - * - * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This - * should translate to positive value zooming IN, negative zooming OUT. - * This matches the newer 'wheel' event. - * - * Why are there spinX, spinY (or pixels)? - * - * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn - * with a mouse. It results in side-scrolling in the browser by default. - * - * - spinY is what you expect -- it's the classic axis of a mouse wheel. - * - * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and - * probably is by browsers in conjunction with fancy 3D controllers .. but - * you know. - * - * Implementation info: - * - * Examples of 'wheel' event if you scroll slowly (down) by one step with an - * average mouse: - * - * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120) - * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12) - * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A) - * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120) - * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120) - * - * On the trackpad: - * - * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6) - * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A) - * - * On other/older browsers.. it's more complicated as there can be multiple and - * also missing delta values. - * - * The 'wheel' event is more standard: - * - * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents - * - * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and - * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain - * backward compatibility with older events. Those other values help us - * better normalize spin speed. Example of what the browsers provide: - * - * | event.wheelDelta | event.detail - * ------------------+------------------+-------------- - * Safari v5/OS X | -120 | 0 - * Safari v5/Win7 | -120 | 0 - * Chrome v17/OS X | -120 | 0 - * Chrome v17/Win7 | -120 | 0 - * IE9/Win7 | -120 | undefined - * Firefox v4/OS X | undefined | 1 - * Firefox v4/Win7 | undefined | 3 - * - */ - function normalizeWheel( /*object*/ event ) /*object*/ { - // Reasonable defaults - var PIXEL_STEP = 10; - var LINE_HEIGHT = 40; - var PAGE_HEIGHT = 800; - - var sX = 0, sY = 0, // spinX, spinY - pX = 0, pY = 0; // pixelX, pixelY - - // Legacy - if( 'detail' in event ) { - sY = event.detail; - } - if( 'wheelDelta' in event ) { - sY = -event.wheelDelta / 120; - } - if( 'wheelDeltaY' in event ) { - sY = -event.wheelDeltaY / 120; - } - if( 'wheelDeltaX' in event ) { - sX = -event.wheelDeltaX / 120; - } - - // side scrolling on FF with DOMMouseScroll - if( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) { - sX = sY; - sY = 0; - } - - pX = sX * PIXEL_STEP; - pY = sY * PIXEL_STEP; - - if( 'deltaY' in event ) { - pY = event.deltaY; - } - if( 'deltaX' in event ) { - pX = event.deltaX; - } - - if( (pX || pY) && event.deltaMode ) { - if( event.deltaMode === 1 ) { // delta in LINE units - pX *= LINE_HEIGHT; - pY *= LINE_HEIGHT; - } else { // delta in PAGE units - pX *= PAGE_HEIGHT; - pY *= PAGE_HEIGHT; - } - } - - // Fall-back if spin cannot be determined - if( pX && !sX ) { - sX = (pX < 1) ? -1 : 1; - } - if( pY && !sY ) { - sY = (pY < 1) ? -1 : 1; - } - - return { - spinX: sX, - spinY: sY, - pixelX: pX, - pixelY: pY - }; - } - if (s.params.mousewheelControl) { - /** - * The best combination if you prefer spinX + spinY normalization. It favors - * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with - * 'wheel' event, making spin speed determination impossible. - */ - s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ? - 'DOMMouseScroll' : - isEventSupported() ? - 'wheel' : 'mousewheel'; - } - function handleMousewheel(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var delta = 0; - var rtlFactor = s.rtl ? -1 : 1; - - var data = normalizeWheel( e ); - - if (s.params.mousewheelForceToAxis) { - if (s.isHorizontal()) { - if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor; - else return; - } - else { - if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY; - else return; - } - } - else { - delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY; - } - - if (delta === 0) return; - - if (s.params.mousewheelInvert) delta = -delta; - - if (!s.params.freeMode) { - if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { - if (delta < 0) { - if ((!s.isEnd || s.params.loop) && !s.animating) { - s.slideNext(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - else { - if ((!s.isBeginning || s.params.loop) && !s.animating) { - s.slidePrev(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - } - s.mousewheel.lastScrollTime = (new window.Date()).getTime(); - - } - else { - //Freemode or scrollContainer: - var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; - var wasBeginning = s.isBeginning, - wasEnd = s.isEnd; - - if (position >= s.minTranslate()) position = s.minTranslate(); - if (position <= s.maxTranslate()) position = s.maxTranslate(); - - s.setWrapperTransition(0); - s.setWrapperTranslate(position); - s.updateProgress(); - s.updateActiveIndex(); - - if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { - s.updateClasses(); - } - - if (s.params.freeModeSticky) { - clearTimeout(s.mousewheel.timeout); - s.mousewheel.timeout = setTimeout(function () { - s.slideReset(); - }, 300); - } - else { - if (s.params.lazyLoading && s.lazy) { - s.lazy.load(); - } - } - // Emit event - s.emit('onScroll', s, e); - - // Stop autoplay - if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay(); - - // Return page scroll on edge positions - if (position === 0 || position === s.maxTranslate()) return; - } - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - return false; - } - s.disableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.off(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = false; - return true; - }; - - s.enableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.on(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = true; - return true; - }; - - - /*========================= - Parallax - ===========================*/ - function setParallaxTransform(el, progress) { - el = $(el); - var p, pX, pY; - var rtlFactor = s.rtl ? -1 : 1; - - p = el.attr('data-swiper-parallax') || '0'; - pX = el.attr('data-swiper-parallax-x'); - pY = el.attr('data-swiper-parallax-y'); - if (pX || pY) { - pX = pX || '0'; - pY = pY || '0'; - } - else { - if (s.isHorizontal()) { - pX = p; - pY = '0'; - } - else { - pY = p; - pX = '0'; - } - } - - if ((pX).indexOf('%') >= 0) { - pX = parseInt(pX, 10) * progress * rtlFactor + '%'; - } - else { - pX = pX * progress * rtlFactor + 'px' ; - } - if ((pY).indexOf('%') >= 0) { - pY = parseInt(pY, 10) * progress + '%'; - } - else { - pY = pY * progress + 'px' ; - } - - el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); - } - s.parallax = { - setTranslate: function () { - s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - setParallaxTransform(this, s.progress); - - }); - s.slides.each(function () { - var slide = $(this); - slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { - var progress = Math.min(Math.max(slide[0].progress, -1), 1); - setParallaxTransform(this, progress); - }); - }); - }, - setTransition: function (duration) { - if (typeof duration === 'undefined') duration = s.params.speed; - s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - var el = $(this); - var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; - if (duration === 0) parallaxDuration = 0; - el.transition(parallaxDuration); - }); - } - }; - - - /*========================= - Zoom - ===========================*/ - s.zoom = { - // "Global" Props - scale: 1, - currentScale: 1, - isScaling: false, - gesture: { - slide: undefined, - slideWidth: undefined, - slideHeight: undefined, - image: undefined, - imageWrap: undefined, - zoomMax: s.params.zoomMax - }, - image: { - isTouched: undefined, - isMoved: undefined, - currentX: undefined, - currentY: undefined, - minX: undefined, - minY: undefined, - maxX: undefined, - maxY: undefined, - width: undefined, - height: undefined, - startX: undefined, - startY: undefined, - touchesStart: {}, - touchesCurrent: {} - }, - velocity: { - x: undefined, - y: undefined, - prevPositionX: undefined, - prevPositionY: undefined, - prevTime: undefined - }, - // Calc Scale From Multi-touches - getDistanceBetweenTouches: function (e) { - if (e.targetTouches.length < 2) return 1; - var x1 = e.targetTouches[0].pageX, - y1 = e.targetTouches[0].pageY, - x2 = e.targetTouches[1].pageX, - y2 = e.targetTouches[1].pageY; - var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); - return distance; - }, - // Events - onGestureStart: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleStart = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.slide || !z.gesture.slide.length) { - z.gesture.slide = $(this); - if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ; - if (z.gesture.imageWrap.length === 0) { - z.gesture.image = undefined; - return; - } - } - z.gesture.image.transition(0); - z.isScaling = true; - }, - onGestureChange: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleMove = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (s.support.gestures) { - z.scale = e.scale * z.currentScale; - } - else { - z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale; - } - if (z.scale > z.gesture.zoomMax) { - z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5); - } - if (z.scale < s.params.zoomMin) { - z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5); - } - z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')'); - }, - onGestureEnd: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) { - return; - } - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin); - z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - z.currentScale = z.scale; - z.isScaling = false; - if (z.scale === 1) z.gesture.slide = undefined; - }, - onTouchStart: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (z.image.isTouched) return; - if (s.device.os === 'android') e.preventDefault(); - z.image.isTouched = true; - z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - }, - onTouchMove: function (e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - s.allowClick = false; - if (!z.image.isTouched || !z.gesture.slide) return; - - if (!z.image.isMoved) { - z.image.width = z.gesture.image[0].offsetWidth; - z.image.height = z.gesture.image[0].offsetHeight; - z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0; - z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0; - z.gesture.slideWidth = z.gesture.slide[0].offsetWidth; - z.gesture.slideHeight = z.gesture.slide[0].offsetHeight; - z.gesture.imageWrap.transition(0); - if (s.rtl) z.image.startX = -z.image.startX; - if (s.rtl) z.image.startY = -z.image.startY; - } - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - - if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return; - - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - - z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (!z.image.isMoved && !z.isScaling) { - if (s.isHorizontal() && - (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) || - (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x) - ) { - z.image.isTouched = false; - return; - } - else if (!s.isHorizontal() && - (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) || - (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y) - ) { - z.image.isTouched = false; - return; - } - } - e.preventDefault(); - e.stopPropagation(); - - z.image.isMoved = true; - z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX; - z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY; - - if (z.image.currentX < z.image.minX) { - z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8); - } - if (z.image.currentX > z.image.maxX) { - z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8); - } - - if (z.image.currentY < z.image.minY) { - z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8); - } - if (z.image.currentY > z.image.maxY) { - z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8); - } - - //Velocity - if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x; - if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y; - if (!z.velocity.prevTime) z.velocity.prevTime = Date.now(); - z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2; - z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2; - if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0; - if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0; - z.velocity.prevPositionX = z.image.touchesCurrent.x; - z.velocity.prevPositionY = z.image.touchesCurrent.y; - z.velocity.prevTime = Date.now(); - - z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTouchEnd: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (!z.image.isTouched || !z.image.isMoved) { - z.image.isTouched = false; - z.image.isMoved = false; - return; - } - z.image.isTouched = false; - z.image.isMoved = false; - var momentumDurationX = 300; - var momentumDurationY = 300; - var momentumDistanceX = z.velocity.x * momentumDurationX; - var newPositionX = z.image.currentX + momentumDistanceX; - var momentumDistanceY = z.velocity.y * momentumDurationY; - var newPositionY = z.image.currentY + momentumDistanceY; - - //Fix duration - if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x); - if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y); - var momentumDuration = Math.max(momentumDurationX, momentumDurationY); - - z.image.currentX = newPositionX; - z.image.currentY = newPositionY; - - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX); - z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY); - - z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTransitionEnd: function (s) { - var z = s.zoom; - if (z.gesture.slide && s.previousIndex !== s.activeIndex) { - z.gesture.image.transform('translate3d(0,0,0) scale(1)'); - z.gesture.imageWrap.transform('translate3d(0,0,0)'); - z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined; - z.scale = z.currentScale = 1; - } - }, - // Toggle Zoom - toggleZoom: function (s, e) { - var z = s.zoom; - if (!z.gesture.slide) { - z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - - var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight; - - if (typeof z.image.touchesStart.x === 'undefined' && e) { - touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; - touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; - } - else { - touchX = z.image.touchesStart.x; - touchY = z.image.touchesStart.y; - } - - if (z.scale && z.scale !== 1) { - // Zoom Out - z.scale = z.currentScale = 1; - z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)'); - z.gesture.slide = undefined; - } - else { - // Zoom In - z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax; - if (e) { - slideWidth = z.gesture.slide[0].offsetWidth; - slideHeight = z.gesture.slide[0].offsetHeight; - offsetX = z.gesture.slide.offset().left; - offsetY = z.gesture.slide.offset().top; - diffX = offsetX + slideWidth/2 - touchX; - diffY = offsetY + slideHeight/2 - touchY; - - imageWidth = z.gesture.image[0].offsetWidth; - imageHeight = z.gesture.image[0].offsetHeight; - scaledWidth = imageWidth * z.scale; - scaledHeight = imageHeight * z.scale; - - translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0); - translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0); - translateMaxX = -translateMinX; - translateMaxY = -translateMinY; - - translateX = diffX * z.scale; - translateY = diffY * z.scale; - - if (translateX < translateMinX) { - translateX = translateMinX; - } - if (translateX > translateMaxX) { - translateX = translateMaxX; - } - - if (translateY < translateMinY) { - translateY = translateMinY; - } - if (translateY > translateMaxY) { - translateY = translateMaxY; - } - } - else { - translateX = 0; - translateY = 0; - } - z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - } - }, - // Attach/Detach Events - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - - if (s.params.zoom) { - var target = s.slides; - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - // Scale image - if (s.support.gestures) { - s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener); - s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener); - s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener); - } - else if (s.touchEvents.start === 'touchstart') { - s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener); - s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener); - s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener); - } - - // Move image - s[action]('touchStart', s.zoom.onTouchStart); - s.slides.each(function (index, slide){ - if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) { - $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove); - } - }); - s[action]('touchEnd', s.zoom.onTouchEnd); - - // Scale Out - s[action]('transitionEnd', s.zoom.onTransitionEnd); - if (s.params.zoomToggle) { - s.on('doubleTap', s.zoom.toggleZoom); - } - } - }, - init: function () { - s.zoom.attachEvents(); - }, - destroy: function () { - s.zoom.attachEvents(true); - } - }; - - - /*========================= - Plugins API. Collect all and init all plugins - ===========================*/ - s._plugins = []; - for (var plugin in s.plugins) { - var p = s.plugins[plugin](s, s.params[plugin]); - if (p) s._plugins.push(p); - } - // Method to call all plugins event/method - s.callPlugins = function (eventName) { - for (var i = 0; i < s._plugins.length; i++) { - if (eventName in s._plugins[i]) { - s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - }; - - - /*========================= - Events/Callbacks/Plugins Emitter - ===========================*/ - function normalizeEventName (eventName) { - if (eventName.indexOf('on') !== 0) { - if (eventName[0] !== eventName[0].toUpperCase()) { - eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); - } - else { - eventName = 'on' + eventName; - } - } - return eventName; - } - s.emitterEventListeners = { - - }; - s.emit = function (eventName) { - // Trigger callbacks - if (s.params[eventName]) { - s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - var i; - // Trigger events - if (s.emitterEventListeners[eventName]) { - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - // Trigger plugins - if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - }; - s.on = function (eventName, handler) { - eventName = normalizeEventName(eventName); - if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; - s.emitterEventListeners[eventName].push(handler); - return s; - }; - s.off = function (eventName, handler) { - var i; - eventName = normalizeEventName(eventName); - if (typeof handler === 'undefined') { - // Remove all handlers for such event - s.emitterEventListeners[eventName] = []; - return s; - } - if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); - } - return s; - }; - s.once = function (eventName, handler) { - eventName = normalizeEventName(eventName); - var _handler = function () { - handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); - s.off(eventName, _handler); - }; - s.on(eventName, _handler); - return s; - }; - - - // Accessibility tools - s.a11y = { - makeFocusable: function ($el) { - $el.attr('tabIndex', '0'); - return $el; - }, - addRole: function ($el, role) { - $el.attr('role', role); - return $el; - }, - - addLabel: function ($el, label) { - $el.attr('aria-label', label); - return $el; - }, - - disable: function ($el) { - $el.attr('aria-disabled', true); - return $el; - }, - - enable: function ($el) { - $el.attr('aria-disabled', false); - return $el; - }, - - onEnterKey: function (event) { - if (event.keyCode !== 13) return; - if ($(event.target).is(s.params.nextButton)) { - s.onClickNext(event); - if (s.isEnd) { - s.a11y.notify(s.params.lastSlideMessage); - } - else { - s.a11y.notify(s.params.nextSlideMessage); - } - } - else if ($(event.target).is(s.params.prevButton)) { - s.onClickPrev(event); - if (s.isBeginning) { - s.a11y.notify(s.params.firstSlideMessage); - } - else { - s.a11y.notify(s.params.prevSlideMessage); - } - } - if ($(event.target).is('.' + s.params.bulletClass)) { - $(event.target)[0].click(); - } - }, - - liveRegion: $(''), - - notify: function (message) { - var notification = s.a11y.liveRegion; - if (notification.length === 0) return; - notification.html(''); - notification.html(message); - }, - init: function () { - // Setup accessibility - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.a11y.makeFocusable(s.nextButton); - s.a11y.addRole(s.nextButton, 'button'); - s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.a11y.makeFocusable(s.prevButton); - s.a11y.addRole(s.prevButton, 'button'); - s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); - } - - $(s.container).append(s.a11y.liveRegion); - }, - initPagination: function () { - if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { - s.bullets.each(function () { - var bullet = $(this); - s.a11y.makeFocusable(bullet); - s.a11y.addRole(bullet, 'button'); - s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); - }); - } - }, - destroy: function () { - if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); - } - }; - - - /*========================= - Init/Destroy - ===========================*/ - s.init = function () { - if (s.params.loop) s.createLoop(); - s.updateContainerSize(); - s.updateSlidesSize(); - s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - if (s.params.scrollbarDraggable) { - s.scrollbar.enableDraggable(); - } - } - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - if (!s.params.loop) s.updateProgress(); - s.effects[s.params.effect].setTranslate(); - } - if (s.params.loop) { - s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); - } - else { - s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); - if (s.params.initialSlide === 0) { - if (s.parallax && s.params.parallax) s.parallax.setTranslate(); - if (s.lazy && s.params.lazyLoading) { - s.lazy.load(); - s.lazy.initialImageLoaded = true; - } - } - } - s.attachEvents(); - if (s.params.observer && s.support.observer) { - s.initObservers(); - } - if (s.params.preloadImages && !s.params.lazyLoading) { - s.preloadImages(); - } - if (s.params.zoom && s.zoom) { - s.zoom.init(); - } - if (s.params.autoplay) { - s.startAutoplay(); - } - if (s.params.keyboardControl) { - if (s.enableKeyboardControl) s.enableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.enableMousewheelControl) s.enableMousewheelControl(); - } - // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history - if (s.params.hashnavReplaceState) { - s.params.replaceState = s.params.hashnavReplaceState; - } - if (s.params.history) { - if (s.history) s.history.init(); - } - if (s.params.hashnav) { - if (s.hashnav) s.hashnav.init(); - } - if (s.params.a11y && s.a11y) s.a11y.init(); - s.emit('onInit', s); - }; - - // Cleanup dynamic styles - s.cleanupStyles = function () { - // Container - s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); - - // Wrapper - s.wrapper.removeAttr('style'); - - // Slides - if (s.slides && s.slides.length) { - s.slides - .removeClass([ - s.params.slideVisibleClass, - s.params.slideActiveClass, - s.params.slideNextClass, - s.params.slidePrevClass - ].join(' ')) - .removeAttr('style') - .removeAttr('data-swiper-column') - .removeAttr('data-swiper-row'); - } - - // Pagination/Bullets - if (s.paginationContainer && s.paginationContainer.length) { - s.paginationContainer.removeClass(s.params.paginationHiddenClass); - } - if (s.bullets && s.bullets.length) { - s.bullets.removeClass(s.params.bulletActiveClass); - } - - // Buttons - if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); - if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); - - // Scrollbar - if (s.params.scrollbar && s.scrollbar) { - if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); - if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); - } - }; - - // Destroy - s.destroy = function (deleteInstance, cleanupStyles) { - // Detach evebts - s.detachEvents(); - // Stop autoplay - s.stopAutoplay(); - // Disable draggable - if (s.params.scrollbar && s.scrollbar) { - if (s.params.scrollbarDraggable) { - s.scrollbar.disableDraggable(); - } - } - // Destroy loop - if (s.params.loop) { - s.destroyLoop(); - } - // Cleanup styles - if (cleanupStyles) { - s.cleanupStyles(); - } - // Disconnect observer - s.disconnectObservers(); - - // Destroy zoom - if (s.params.zoom && s.zoom) { - s.zoom.destroy(); - } - // Disable keyboard/mousewheel - if (s.params.keyboardControl) { - if (s.disableKeyboardControl) s.disableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.disableMousewheelControl) s.disableMousewheelControl(); - } - // Disable a11y - if (s.params.a11y && s.a11y) s.a11y.destroy(); - // Delete history popstate - if (s.params.history && !s.params.replaceState) { - window.removeEventListener('popstate', s.history.setHistoryPopState); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.destroy(); - } - // Destroy callback - s.emit('onDestroy'); - // Delete instance - if (deleteInstance !== false) s = null; - }; - - s.init(); - - - - // Return swiper instance - return s; - }; - - - /*================================================== - Prototype - ====================================================*/ - Swiper.prototype = { - isSafari: (function () { - var ua = window.navigator.userAgent.toLowerCase(); - return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); - })(), - isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent), - isArray: function (arr) { - return Object.prototype.toString.apply(arr) === '[object Array]'; - }, - /*================================================== - Browser - ====================================================*/ - browser: { - ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, - ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1), - lteIE9: (function() { - // create temporary DIV - var div = document.createElement('div'); - // add content to tmp DIV which is wrapped into the IE HTML conditional statement - div.innerHTML = ''; - // return true / false value based on what will browser render - return div.getElementsByTagName('i').length === 1; - })() - }, - /*================================================== - Devices - ====================================================*/ - device: (function () { - var ua = window.navigator.userAgent; - var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); - var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); - var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); - var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); - return { - ios: ipad || iphone || ipod, - android: android - }; - })(), - /*================================================== - Feature Detection - ====================================================*/ - support: { - touch : (window.Modernizr && Modernizr.touch === true) || (function () { - return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); - })(), - - transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { - var div = document.createElement('div').style; - return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); - })(), - - flexbox: (function () { - var div = document.createElement('div').style; - var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); - for (var i = 0; i < styles.length; i++) { - if (styles[i] in div) return true; - } - })(), - - observer: (function () { - return ('MutationObserver' in window || 'WebkitMutationObserver' in window); - })(), - - passiveListener: (function () { - var supportsPassive = false; - try { - var opts = Object.defineProperty({}, 'passive', { - get: function() { - supportsPassive = true; - } - }); - window.addEventListener('testPassiveListener', null, opts); - } catch (e) {} - return supportsPassive; - })(), - - gestures: (function () { - return 'ongesturestart' in window; - })() - }, - /*================================================== - Plugins - ====================================================*/ - plugins: {} - }; - - - /*=========================== - Dom7 Library - ===========================*/ - var Dom7 = (function () { - var Dom7 = function (arr) { - var _this = this, i = 0; - // Create array-like object - for (i = 0; i < arr.length; i++) { - _this[i] = arr[i]; - } - _this.length = arr.length; - // Return collection with methods - return this; - }; - var $ = function (selector, context) { - var arr = [], i = 0; - if (selector && !context) { - if (selector instanceof Dom7) { - return selector; - } - } - if (selector) { - // String - if (typeof selector === 'string') { - var els, tempParent, html = selector.trim(); - if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { - var toCreate = 'div'; - if (html.indexOf(':~]/)) { - // Pure ID selector - els = [document.getElementById(selector.split('#')[1])]; - } - else { - // Other selectors - els = (context || document).querySelectorAll(selector); - } - for (i = 0; i < els.length; i++) { - if (els[i]) arr.push(els[i]); - } - } - } - // Node/element - else if (selector.nodeType || selector === window || selector === document) { - arr.push(selector); - } - //Array of elements or instance of Dom - else if (selector.length > 0 && selector[0].nodeType) { - for (i = 0; i < selector.length; i++) { - arr.push(selector[i]); - } - } - } - return new Dom7(arr); - }; - Dom7.prototype = { - // Classes and attriutes - addClass: function (className) { - if (typeof className === 'undefined') { - return this; - } - var classes = className.split(' '); - for (var i = 0; i < classes.length; i++) { - for (var j = 0; j < this.length; j++) { - this[j].classList.add(classes[i]); - } - } - return this; - }, - removeClass: function (className) { - var classes = className.split(' '); - for (var i = 0; i < classes.length; i++) { - for (var j = 0; j < this.length; j++) { - this[j].classList.remove(classes[i]); - } - } - return this; - }, - hasClass: function (className) { - if (!this[0]) return false; - else return this[0].classList.contains(className); - }, - toggleClass: function (className) { - var classes = className.split(' '); - for (var i = 0; i < classes.length; i++) { - for (var j = 0; j < this.length; j++) { - this[j].classList.toggle(classes[i]); - } - } - return this; - }, - attr: function (attrs, value) { - if (arguments.length === 1 && typeof attrs === 'string') { - // Get attr - if (this[0]) return this[0].getAttribute(attrs); - else return undefined; - } - else { - // Set attrs - for (var i = 0; i < this.length; i++) { - if (arguments.length === 2) { - // String - this[i].setAttribute(attrs, value); - } - else { - // Object - for (var attrName in attrs) { - this[i][attrName] = attrs[attrName]; - this[i].setAttribute(attrName, attrs[attrName]); - } - } - } - return this; - } - }, - removeAttr: function (attr) { - for (var i = 0; i < this.length; i++) { - this[i].removeAttribute(attr); - } - return this; - }, - data: function (key, value) { - if (typeof value === 'undefined') { - // Get value - if (this[0]) { - var dataKey = this[0].getAttribute('data-' + key); - if (dataKey) return dataKey; - else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key]; - else return undefined; - } - else return undefined; - } - else { - // Set value - for (var i = 0; i < this.length; i++) { - var el = this[i]; - if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {}; - el.dom7ElementDataStorage[key] = value; - } - return this; - } - }, - // Transforms - transform : function (transform) { - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; - } - return this; - }, - transition: function (duration) { - if (typeof duration !== 'string') { - duration = duration + 'ms'; - } - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; - } - return this; - }, - //Events - on: function (eventName, targetSelector, listener, capture) { - function handleLiveEvent(e) { - var target = e.target; - if ($(target).is(targetSelector)) listener.call(target, e); - else { - var parents = $(target).parents(); - for (var k = 0; k < parents.length; k++) { - if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e); - } - } - } - var events = eventName.split(' '); - var i, j; - for (i = 0; i < this.length; i++) { - if (typeof targetSelector === 'function' || targetSelector === false) { - // Usual events - if (typeof targetSelector === 'function') { - listener = arguments[1]; - capture = arguments[2] || false; - } - for (j = 0; j < events.length; j++) { - this[i].addEventListener(events[j], listener, capture); - } - } - else { - //Live events - for (j = 0; j < events.length; j++) { - if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = []; - this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent}); - this[i].addEventListener(events[j], handleLiveEvent, capture); - } - } - } - - return this; - }, - off: function (eventName, targetSelector, listener, capture) { - var events = eventName.split(' '); - for (var i = 0; i < events.length; i++) { - for (var j = 0; j < this.length; j++) { - if (typeof targetSelector === 'function' || targetSelector === false) { - // Usual events - if (typeof targetSelector === 'function') { - listener = arguments[1]; - capture = arguments[2] || false; - } - this[j].removeEventListener(events[i], listener, capture); - } - else { - // Live event - if (this[j].dom7LiveListeners) { - for (var k = 0; k < this[j].dom7LiveListeners.length; k++) { - if (this[j].dom7LiveListeners[k].listener === listener) { - this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture); - } - } - } - } - } - } - return this; - }, - once: function (eventName, targetSelector, listener, capture) { - var dom = this; - if (typeof targetSelector === 'function') { - targetSelector = false; - listener = arguments[1]; - capture = arguments[2]; - } - function proxy(e) { - listener(e); - dom.off(eventName, targetSelector, proxy, capture); - } - dom.on(eventName, targetSelector, proxy, capture); - }, - trigger: function (eventName, eventData) { - for (var i = 0; i < this.length; i++) { - var evt; - try { - evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true}); - } - catch (e) { - evt = document.createEvent('Event'); - evt.initEvent(eventName, true, true); - evt.detail = eventData; - } - this[i].dispatchEvent(evt); - } - return this; - }, - transitionEnd: function (callback) { - var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], - i, j, dom = this; - function fireCallBack(e) { - /*jshint validthis:true */ - if (e.target !== this) return; - callback.call(this, e); - for (i = 0; i < events.length; i++) { - dom.off(events[i], fireCallBack); - } - } - if (callback) { - for (i = 0; i < events.length; i++) { - dom.on(events[i], fireCallBack); - } - } - return this; - }, - // Sizing/Styles - width: function () { - if (this[0] === window) { - return window.innerWidth; - } - else { - if (this.length > 0) { - return parseFloat(this.css('width')); - } - else { - return null; - } - } - }, - outerWidth: function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); - else - return this[0].offsetWidth; - } - else return null; - }, - height: function () { - if (this[0] === window) { - return window.innerHeight; - } - else { - if (this.length > 0) { - return parseFloat(this.css('height')); - } - else { - return null; - } - } - }, - outerHeight: function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom')); - else - return this[0].offsetHeight; - } - else return null; - }, - offset: function () { - if (this.length > 0) { - var el = this[0]; - var box = el.getBoundingClientRect(); - var body = document.body; - var clientTop = el.clientTop || body.clientTop || 0; - var clientLeft = el.clientLeft || body.clientLeft || 0; - var scrollTop = window.pageYOffset || el.scrollTop; - var scrollLeft = window.pageXOffset || el.scrollLeft; - return { - top: box.top + scrollTop - clientTop, - left: box.left + scrollLeft - clientLeft - }; - } - else { - return null; - } - }, - css: function (props, value) { - var i; - if (arguments.length === 1) { - if (typeof props === 'string') { - if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); - } - else { - for (i = 0; i < this.length; i++) { - for (var prop in props) { - this[i].style[prop] = props[prop]; - } - } - return this; - } - } - if (arguments.length === 2 && typeof props === 'string') { - for (i = 0; i < this.length; i++) { - this[i].style[props] = value; - } - return this; - } - return this; - }, - - //Dom manipulation - each: function (callback) { - for (var i = 0; i < this.length; i++) { - callback.call(this[i], i, this[i]); - } - return this; - }, - html: function (html) { - if (typeof html === 'undefined') { - return this[0] ? this[0].innerHTML : undefined; - } - else { - for (var i = 0; i < this.length; i++) { - this[i].innerHTML = html; - } - return this; - } - }, - text: function (text) { - if (typeof text === 'undefined') { - if (this[0]) { - return this[0].textContent.trim(); - } - else return null; - } - else { - for (var i = 0; i < this.length; i++) { - this[i].textContent = text; - } - return this; - } - }, - is: function (selector) { - if (!this[0]) return false; - var compareWith, i; - if (typeof selector === 'string') { - var el = this[0]; - if (el === document) return selector === document; - if (el === window) return selector === window; - - if (el.matches) return el.matches(selector); - else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); - else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector); - else if (el.msMatchesSelector) return el.msMatchesSelector(selector); - else { - compareWith = $(selector); - for (i = 0; i < compareWith.length; i++) { - if (compareWith[i] === this[0]) return true; - } - return false; - } - } - else if (selector === document) return this[0] === document; - else if (selector === window) return this[0] === window; - else { - if (selector.nodeType || selector instanceof Dom7) { - compareWith = selector.nodeType ? [selector] : selector; - for (i = 0; i < compareWith.length; i++) { - if (compareWith[i] === this[0]) return true; - } - return false; - } - return false; - } - - }, - index: function () { - if (this[0]) { - var child = this[0]; - var i = 0; - while ((child = child.previousSibling) !== null) { - if (child.nodeType === 1) i++; - } - return i; - } - else return undefined; - }, - eq: function (index) { - if (typeof index === 'undefined') return this; - var length = this.length; - var returnIndex; - if (index > length - 1) { - return new Dom7([]); - } - if (index < 0) { - returnIndex = length + index; - if (returnIndex < 0) return new Dom7([]); - else return new Dom7([this[returnIndex]]); - } - return new Dom7([this[index]]); - }, - append: function (newChild) { - var i, j; - for (i = 0; i < this.length; i++) { - if (typeof newChild === 'string') { - var tempDiv = document.createElement('div'); - tempDiv.innerHTML = newChild; - while (tempDiv.firstChild) { - this[i].appendChild(tempDiv.firstChild); - } - } - else if (newChild instanceof Dom7) { - for (j = 0; j < newChild.length; j++) { - this[i].appendChild(newChild[j]); - } - } - else { - this[i].appendChild(newChild); - } - } - return this; - }, - prepend: function (newChild) { - var i, j; - for (i = 0; i < this.length; i++) { - if (typeof newChild === 'string') { - var tempDiv = document.createElement('div'); - tempDiv.innerHTML = newChild; - for (j = tempDiv.childNodes.length - 1; j >= 0; j--) { - this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); - } - // this[i].insertAdjacentHTML('afterbegin', newChild); - } - else if (newChild instanceof Dom7) { - for (j = 0; j < newChild.length; j++) { - this[i].insertBefore(newChild[j], this[i].childNodes[0]); - } - } - else { - this[i].insertBefore(newChild, this[i].childNodes[0]); - } - } - return this; - }, - insertBefore: function (selector) { - var before = $(selector); - for (var i = 0; i < this.length; i++) { - if (before.length === 1) { - before[0].parentNode.insertBefore(this[i], before[0]); - } - else if (before.length > 1) { - for (var j = 0; j < before.length; j++) { - before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]); - } - } - } - }, - insertAfter: function (selector) { - var after = $(selector); - for (var i = 0; i < this.length; i++) { - if (after.length === 1) { - after[0].parentNode.insertBefore(this[i], after[0].nextSibling); - } - else if (after.length > 1) { - for (var j = 0; j < after.length; j++) { - after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling); - } - } - } - }, - next: function (selector) { - if (this.length > 0) { - if (selector) { - if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]); - else return new Dom7([]); - } - else { - if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]); - else return new Dom7([]); - } - } - else return new Dom7([]); - }, - nextAll: function (selector) { - var nextEls = []; - var el = this[0]; - if (!el) return new Dom7([]); - while (el.nextElementSibling) { - var next = el.nextElementSibling; - if (selector) { - if($(next).is(selector)) nextEls.push(next); - } - else nextEls.push(next); - el = next; - } - return new Dom7(nextEls); - }, - prev: function (selector) { - if (this.length > 0) { - if (selector) { - if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]); - else return new Dom7([]); - } - else { - if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]); - else return new Dom7([]); - } - } - else return new Dom7([]); - }, - prevAll: function (selector) { - var prevEls = []; - var el = this[0]; - if (!el) return new Dom7([]); - while (el.previousElementSibling) { - var prev = el.previousElementSibling; - if (selector) { - if($(prev).is(selector)) prevEls.push(prev); - } - else prevEls.push(prev); - el = prev; - } - return new Dom7(prevEls); - }, - parent: function (selector) { - var parents = []; - for (var i = 0; i < this.length; i++) { - if (selector) { - if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); - } - else { - parents.push(this[i].parentNode); - } - } - return $($.unique(parents)); - }, - parents: function (selector) { - var parents = []; - for (var i = 0; i < this.length; i++) { - var parent = this[i].parentNode; - while (parent) { - if (selector) { - if ($(parent).is(selector)) parents.push(parent); - } - else { - parents.push(parent); - } - parent = parent.parentNode; - } - } - return $($.unique(parents)); - }, - find : function (selector) { - var foundElements = []; - for (var i = 0; i < this.length; i++) { - var found = this[i].querySelectorAll(selector); - for (var j = 0; j < found.length; j++) { - foundElements.push(found[j]); - } - } - return new Dom7(foundElements); - }, - children: function (selector) { - var children = []; - for (var i = 0; i < this.length; i++) { - var childNodes = this[i].childNodes; - - for (var j = 0; j < childNodes.length; j++) { - if (!selector) { - if (childNodes[j].nodeType === 1) children.push(childNodes[j]); - } - else { - if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]); - } - } - } - return new Dom7($.unique(children)); - }, - remove: function () { - for (var i = 0; i < this.length; i++) { - if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); - } - return this; - }, - add: function () { - var dom = this; - var i, j; - for (i = 0; i < arguments.length; i++) { - var toAdd = $(arguments[i]); - for (j = 0; j < toAdd.length; j++) { - dom[dom.length] = toAdd[j]; - dom.length++; - } - } - return dom; - } - }; - $.fn = Dom7.prototype; - $.unique = function (arr) { - var unique = []; - for (var i = 0; i < arr.length; i++) { - if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]); - } - return unique; - }; - - return $; - })(); - - - /*=========================== - Get Dom libraries - ===========================*/ - var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7']; - for (var i = 0; i < swiperDomPlugins.length; i++) { - if (window[swiperDomPlugins[i]]) { - addLibraryPlugin(window[swiperDomPlugins[i]]); - } - } - // Required DOM Plugins - var domLib; - if (typeof Dom7 === 'undefined') { - domLib = window.Dom7 || window.Zepto || window.jQuery; - } - else { - domLib = Dom7; - } - - - /*=========================== - Add .swiper plugin from Dom libraries - ===========================*/ - function addLibraryPlugin(lib) { - lib.fn.swiper = function (params) { - var firstInstance; - lib(this).each(function () { - var s = new Swiper(this, params); - if (!firstInstance) firstInstance = s; - }); - return firstInstance; - }; - } - - if (domLib) { - if (!('transitionEnd' in domLib.fn)) { - domLib.fn.transitionEnd = function (callback) { - var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], - i, j, dom = this; - function fireCallBack(e) { - /*jshint validthis:true */ - if (e.target !== this) return; - callback.call(this, e); - for (i = 0; i < events.length; i++) { - dom.off(events[i], fireCallBack); - } - } - if (callback) { - for (i = 0; i < events.length; i++) { - dom.on(events[i], fireCallBack); - } - } - return this; - }; - } - if (!('transform' in domLib.fn)) { - domLib.fn.transform = function (transform) { - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; - } - return this; - }; - } - if (!('transition' in domLib.fn)) { - domLib.fn.transition = function (duration) { - if (typeof duration !== 'string') { - duration = duration + 'ms'; - } - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; - } - return this; - }; - } - if (!('outerWidth' in domLib.fn)) { - domLib.fn.outerWidth = function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); - else - return this[0].offsetWidth; - } - else return null; - }; - } - } - - - window.Swiper = Swiper; -})(); - -/*=========================== -Swiper AMD Export -===========================*/ -if (typeof(module) !== 'undefined') -{ - module.exports = window.Swiper; -} -else if (typeof define === 'function' && define.amd) { - define([], function () { - 'use strict'; - return window.Swiper; - }); -} - -//# sourceMappingURL=maps/swiper.js.map diff --git a/dist/js/swiper.min.js b/dist/js/swiper.min.js deleted file mode 100644 index 03a652f2e..000000000 --- a/dist/js/swiper.min.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -!function(){"use strict";var e,a=function(s,i){function r(e){return Math.floor(e)}function n(){var e=T.params.autoplay,a=T.slides.eq(T.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||T.params.autoplay),T.autoplayTimeoutId=setTimeout(function(){T.params.loop?(T.fixLoop(),T._slideNext(),T.emit("onAutoplay",T)):T.isEnd?i.autoplayStopOnLast?T.stopAutoplay():(T._slideTo(0),T.emit("onAutoplay",T)):(T._slideNext(),T.emit("onAutoplay",T))},e)}function o(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var i;return s.parents().each(function(e,a){a===t&&(i=t)}),i?t:void 0}if(0!==s.length)return s[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){T.onResize(!0),T.emit("onObserverUpdate",T,e)})});s.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),T.observers.push(s)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!T.params.allowSwipeToNext&&(T.isHorizontal()&&39===a||!T.isHorizontal()&&40===a))return!1;if(!T.params.allowSwipeToPrev&&(T.isHorizontal()&&37===a||!T.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(T.container.parents("."+T.params.slideClass).length>0&&0===T.container.parents("."+T.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},i=window.innerWidth,r=window.innerHeight,n=T.container.offset();T.rtl&&(n.left=n.left-T.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+T.width,n.top],[n.left,n.top+T.height],[n.left+T.width,n.top+T.height]],l=0;l=s.left&&p[0]<=s.left+i&&p[1]>=s.top&&p[1]<=s.top+r&&(t=!0)}if(!t)return}T.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!T.rtl||37===a&&T.rtl)&&T.slideNext(),(37===a&&!T.rtl||39===a&&T.rtl)&&T.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&T.slideNext(),38===a&&T.slidePrev()),T.emit("onKeyPress",T,a)}}function d(e){var a=0,t=0,s=0,i=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,i=10*t,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||i)&&e.deltaMode&&(1===e.deltaMode?(s*=40,i*=40):(s*=800,i*=800)),s&&!a&&(a=s<1?-1:1),i&&!t&&(t=i<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:i}}function u(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=T.rtl?-1:1,s=d(e);if(T.params.mousewheelForceToAxis)if(T.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(T.params.mousewheelInvert&&(a=-a),T.params.freeMode){var i=T.getWrapperTranslate()+a*T.params.mousewheelSensitivity,r=T.isBeginning,n=T.isEnd;if(i>=T.minTranslate()&&(i=T.minTranslate()),i<=T.maxTranslate()&&(i=T.maxTranslate()),T.setWrapperTransition(0),T.setWrapperTranslate(i),T.updateProgress(),T.updateActiveIndex(),(!r&&T.isBeginning||!n&&T.isEnd)&&T.updateClasses(),T.params.freeModeSticky?(clearTimeout(T.mousewheel.timeout),T.mousewheel.timeout=setTimeout(function(){T.slideReset()},300)):T.params.lazyLoading&&T.lazy&&T.lazy.load(),T.emit("onScroll",T,e),T.params.autoplay&&T.params.autoplayDisableOnInteraction&&T.stopAutoplay(),0===i||i===T.maxTranslate())return}else{if((new window.Date).getTime()-T.mousewheel.lastScrollTime>60)if(a<0)if(T.isEnd&&!T.params.loop||T.animating){if(T.params.mousewheelReleaseOnEdges)return!0}else T.slideNext(),T.emit("onScroll",T,e);else if(T.isBeginning&&!T.params.loop||T.animating){if(T.params.mousewheelReleaseOnEdges)return!0}else T.slidePrev(),T.emit("onScroll",T,e);T.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function c(a,t){a=e(a);var s,i,r,n=T.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",i=a.attr("data-swiper-parallax-x"),r=a.attr("data-swiper-parallax-y"),i||r?(i=i||"0",r=r||"0"):T.isHorizontal()?(i=s,r="0"):(r=s,i="0"),i=i.indexOf("%")>=0?parseInt(i,10)*t*n+"%":i*t*n+"px",r=r.indexOf("%")>=0?parseInt(r,10)*t+"%":r*t+"px",a.transform("translate3d("+i+", "+r+",0px)")}function m(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(s,i);var h={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=i&&i.virtualTranslate;i=i||{};var f={};for(var v in i)if("object"!=typeof i[v]||null===i[v]||(i[v].nodeType||i[v]===window||i[v]===document||void 0!==t&&i[v]instanceof t||"undefined"!=typeof jQuery&&i[v]instanceof jQuery))f[v]=i[v];else{f[v]={};for(var w in i[v])f[v][w]=i[v][w]}for(var y in h)if(void 0===i[y])i[y]=h[y];else if("object"==typeof i[y])for(var x in h[y])void 0===i[y][x]&&(i[y][x]=h[y][x]);var T=this;if(T.params=i,T.originalParams=f,T.classNames=[],void 0!==e&&void 0!==t&&(e=t),(void 0!==e||(e=void 0===t?window.Dom7||window.Zepto||window.jQuery:t))&&(T.$=e,T.currentBreakpoint=void 0,T.getActiveBreakpoint=function(){if(!T.params.breakpoints)return!1;var e,a=!1,t=[];for(e in T.params.breakpoints)T.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},T.setBreakpoint=function(){var e=T.getActiveBreakpoint();if(e&&T.currentBreakpoint!==e){var a=e in T.params.breakpoints?T.params.breakpoints[e]:T.originalParams,t=T.params.loop&&a.slidesPerView!==T.params.slidesPerView;for(var s in a)T.params[s]=a[s];T.currentBreakpoint=e,t&&T.destroyLoop&&T.reLoop(!0)}},T.params.breakpoints&&T.setBreakpoint(),T.container=e(s),0!==T.container.length)){if(T.container.length>1){var b=[];return T.container.each(function(){b.push(new a(this,i))}),b}T.container[0].swiper=T,T.container.data("swiper",T),T.classNames.push(T.params.containerModifierClass+T.params.direction),T.params.freeMode&&T.classNames.push(T.params.containerModifierClass+"free-mode"),T.support.flexbox||(T.classNames.push(T.params.containerModifierClass+"no-flexbox"),T.params.slidesPerColumn=1),T.params.autoHeight&&T.classNames.push(T.params.containerModifierClass+"autoheight"),(T.params.parallax||T.params.watchSlidesVisibility)&&(T.params.watchSlidesProgress=!0),T.params.touchReleaseOnEdges&&(T.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(T.params.effect)>=0&&(T.support.transforms3d?(T.params.watchSlidesProgress=!0,T.classNames.push(T.params.containerModifierClass+"3d")):T.params.effect="slide"),"slide"!==T.params.effect&&T.classNames.push(T.params.containerModifierClass+T.params.effect),"cube"===T.params.effect&&(T.params.resistanceRatio=0,T.params.slidesPerView=1,T.params.slidesPerColumn=1,T.params.slidesPerGroup=1,T.params.centeredSlides=!1,T.params.spaceBetween=0,T.params.virtualTranslate=!0),"fade"!==T.params.effect&&"flip"!==T.params.effect||(T.params.slidesPerView=1,T.params.slidesPerColumn=1,T.params.slidesPerGroup=1,T.params.watchSlidesProgress=!0,T.params.spaceBetween=0,void 0===g&&(T.params.virtualTranslate=!0)),T.params.grabCursor&&T.support.touch&&(T.params.grabCursor=!1),T.wrapper=T.container.children("."+T.params.wrapperClass),T.params.pagination&&(T.paginationContainer=e(T.params.pagination),T.params.uniqueNavElements&&"string"==typeof T.params.pagination&&T.paginationContainer.length>1&&1===T.container.find(T.params.pagination).length&&(T.paginationContainer=T.container.find(T.params.pagination)),"bullets"===T.params.paginationType&&T.params.paginationClickable?T.paginationContainer.addClass(T.params.paginationModifierClass+"clickable"):T.params.paginationClickable=!1,T.paginationContainer.addClass(T.params.paginationModifierClass+T.params.paginationType)),(T.params.nextButton||T.params.prevButton)&&(T.params.nextButton&&(T.nextButton=e(T.params.nextButton),T.params.uniqueNavElements&&"string"==typeof T.params.nextButton&&T.nextButton.length>1&&1===T.container.find(T.params.nextButton).length&&(T.nextButton=T.container.find(T.params.nextButton))),T.params.prevButton&&(T.prevButton=e(T.params.prevButton),T.params.uniqueNavElements&&"string"==typeof T.params.prevButton&&T.prevButton.length>1&&1===T.container.find(T.params.prevButton).length&&(T.prevButton=T.container.find(T.params.prevButton)))),T.isHorizontal=function(){return"horizontal"===T.params.direction},T.rtl=T.isHorizontal()&&("rtl"===T.container[0].dir.toLowerCase()||"rtl"===T.container.css("direction")),T.rtl&&T.classNames.push(T.params.containerModifierClass+"rtl"),T.rtl&&(T.wrongRTL="-webkit-box"===T.wrapper.css("display")),T.params.slidesPerColumn>1&&T.classNames.push(T.params.containerModifierClass+"multirow"),T.device.android&&T.classNames.push(T.params.containerModifierClass+"android"),T.container.addClass(T.classNames.join(" ")),T.translate=0,T.progress=0,T.velocity=0,T.lockSwipeToNext=function(){T.params.allowSwipeToNext=!1,T.params.allowSwipeToPrev===!1&&T.params.grabCursor&&T.unsetGrabCursor()},T.lockSwipeToPrev=function(){T.params.allowSwipeToPrev=!1,T.params.allowSwipeToNext===!1&&T.params.grabCursor&&T.unsetGrabCursor()},T.lockSwipes=function(){T.params.allowSwipeToNext=T.params.allowSwipeToPrev=!1,T.params.grabCursor&&T.unsetGrabCursor()},T.unlockSwipeToNext=function(){T.params.allowSwipeToNext=!0,T.params.allowSwipeToPrev===!0&&T.params.grabCursor&&T.setGrabCursor()},T.unlockSwipeToPrev=function(){T.params.allowSwipeToPrev=!0,T.params.allowSwipeToNext===!0&&T.params.grabCursor&&T.setGrabCursor()},T.unlockSwipes=function(){T.params.allowSwipeToNext=T.params.allowSwipeToPrev=!0,T.params.grabCursor&&T.setGrabCursor()},T.setGrabCursor=function(e){T.container[0].style.cursor="move",T.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",T.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",T.container[0].style.cursor=e?"grabbing":"grab"},T.unsetGrabCursor=function(){T.container[0].style.cursor=""},T.params.grabCursor&&T.setGrabCursor(),T.imagesToLoad=[],T.imagesLoaded=0,T.loadImage=function(e,a,t,s,i,r){function n(){r&&r()}var o;e.complete&&i?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},T.preloadImages=function(){function e(){void 0!==T&&null!==T&&T&&(void 0!==T.imagesLoaded&&T.imagesLoaded++,T.imagesLoaded===T.imagesToLoad.length&&(T.params.updateOnImagesReady&&T.update(),T.emit("onImagesReady",T)))}T.imagesToLoad=T.container.find("img");for(var a=0;a1)for(e=0;eT.slides.length)break;a.push(T.slides.eq(s)[0])}else a.push(T.slides.eq(T.activeIndex)[0]);for(e=0;et?i:t}t&&T.wrapper.css("height",t+"px")},T.updateContainerSize=function(){var e,a;e=void 0!==T.params.width?T.params.width:T.container[0].clientWidth,a=void 0!==T.params.height?T.params.height:T.container[0].clientHeight,0===e&&T.isHorizontal()||0===a&&!T.isHorizontal()||(e=e-parseInt(T.container.css("padding-left"),10)-parseInt(T.container.css("padding-right"),10),a=a-parseInt(T.container.css("padding-top"),10)-parseInt(T.container.css("padding-bottom"),10),T.width=e,T.height=a,T.size=T.isHorizontal()?T.width:T.height)},T.updateSlidesSize=function(){T.slides=T.wrapper.children("."+T.params.slideClass),T.snapGrid=[],T.slidesGrid=[],T.slidesSizesGrid=[];var e,a=T.params.spaceBetween,t=-T.params.slidesOffsetBefore,s=0,i=0;if(void 0!==T.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*T.size),T.virtualSize=-a,T.rtl?T.slides.css({marginLeft:"",marginTop:""}):T.slides.css({marginRight:"",marginBottom:""});var n;T.params.slidesPerColumn>1&&(n=Math.floor(T.slides.length/T.params.slidesPerColumn)===T.slides.length/T.params.slidesPerColumn?T.slides.length:Math.ceil(T.slides.length/T.params.slidesPerColumn)*T.params.slidesPerColumn,"auto"!==T.params.slidesPerView&&"row"===T.params.slidesPerColumnFill&&(n=Math.max(n,T.params.slidesPerView*T.params.slidesPerColumn)));var o,l=T.params.slidesPerColumn,p=n/l,d=p-(T.params.slidesPerColumn*p-T.slides.length);for(e=0;e1){var c,m,h;"column"===T.params.slidesPerColumnFill?(m=Math.floor(e/l),h=e-m*l,(m>d||m===d&&h===l-1)&&++h>=l&&(h=0,m++),c=m+h*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(h=Math.floor(e/p),m=e-h*p),u.css("margin-"+(T.isHorizontal()?"top":"left"),0!==h&&T.params.spaceBetween&&T.params.spaceBetween+"px").attr("data-swiper-column",m).attr("data-swiper-row",h)}"none"!==u.css("display")&&("auto"===T.params.slidesPerView?(o=T.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),T.params.roundLengths&&(o=r(o))):(o=(T.size-(T.params.slidesPerView-1)*a)/T.params.slidesPerView,T.params.roundLengths&&(o=r(o)),T.isHorizontal()?T.slides[e].style.width=o+"px":T.slides[e].style.height=o+"px"),T.slides[e].swiperSlideSize=o,T.slidesSizesGrid.push(o),T.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-T.size/2-a),0===e&&(t=t-T.size/2-a),Math.abs(t)<.001&&(t=0),i%T.params.slidesPerGroup==0&&T.snapGrid.push(t),T.slidesGrid.push(t)):(i%T.params.slidesPerGroup==0&&T.snapGrid.push(t),T.slidesGrid.push(t),t=t+o+a),T.virtualSize+=o+a,s=o,i++)}T.virtualSize=Math.max(T.virtualSize,T.size)+T.params.slidesOffsetAfter;var g;if(T.rtl&&T.wrongRTL&&("slide"===T.params.effect||"coverflow"===T.params.effect)&&T.wrapper.css({width:T.virtualSize+T.params.spaceBetween+"px"}),T.support.flexbox&&!T.params.setWrapperSize||(T.isHorizontal()?T.wrapper.css({width:T.virtualSize+T.params.spaceBetween+"px"}):T.wrapper.css({height:T.virtualSize+T.params.spaceBetween+"px"})),T.params.slidesPerColumn>1&&(T.virtualSize=(o+T.params.spaceBetween)*n,T.virtualSize=Math.ceil(T.virtualSize/T.params.slidesPerColumn)-T.params.spaceBetween,T.isHorizontal()?T.wrapper.css({width:T.virtualSize+T.params.spaceBetween+"px"}):T.wrapper.css({height:T.virtualSize+T.params.spaceBetween+"px"}),T.params.centeredSlides)){for(g=[],e=0;e1&&T.snapGrid.push(T.virtualSize-T.size)}0===T.snapGrid.length&&(T.snapGrid=[0]),0!==T.params.spaceBetween&&(T.isHorizontal()?T.rtl?T.slides.css({marginLeft:a+"px"}):T.slides.css({marginRight:a+"px"}):T.slides.css({marginBottom:a+"px"})),T.params.watchSlidesProgress&&T.updateSlidesOffset()}},T.updateSlidesOffset=function(){for(var e=0;eT.size&&(s=!0));for(a=T.activeIndex-1;a>=0;a--)T.slides[a]&&!s&&(i+=T.slides[a].swiperSlideSize,t++,i>T.size&&(s=!0))}else for(e=T.activeIndex+1;e=0&&r0&&n<=T.size||r<=0&&n>=T.size)&&T.slides.eq(t).addClass(T.params.slideVisibleClass)}s.progress=T.rtl?-i:i}}},T.updateProgress=function(e){void 0===e&&(e=T.translate||0);var a=T.maxTranslate()-T.minTranslate(),t=T.isBeginning,s=T.isEnd;0===a?(T.progress=0,T.isBeginning=T.isEnd=!0):(T.progress=(e-T.minTranslate())/a,T.isBeginning=T.progress<=0,T.isEnd=T.progress>=1),T.isBeginning&&!t&&T.emit("onReachBeginning",T),T.isEnd&&!s&&T.emit("onReachEnd",T),T.params.watchSlidesProgress&&T.updateSlidesProgress(e),T.emit("onProgress",T,T.progress)},T.updateActiveIndex=function(){var e,a,t,s=T.rtl?T.translate:-T.translate;for(a=0;a=T.slidesGrid[a]&&s=T.slidesGrid[a]&&s=T.slidesGrid[a]&&(e=a);T.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),t=Math.floor(e/T.params.slidesPerGroup),t>=T.snapGrid.length&&(t=T.snapGrid.length-1),e!==T.activeIndex&&(T.snapIndex=t,T.previousIndex=T.activeIndex,T.activeIndex=e,T.updateClasses(),T.updateRealIndex())},T.updateRealIndex=function(){T.realIndex=parseInt(T.slides.eq(T.activeIndex).attr("data-swiper-slide-index")||T.activeIndex,10)},T.updateClasses=function(){T.slides.removeClass(T.params.slideActiveClass+" "+T.params.slideNextClass+" "+T.params.slidePrevClass+" "+T.params.slideDuplicateActiveClass+" "+T.params.slideDuplicateNextClass+" "+T.params.slideDuplicatePrevClass);var a=T.slides.eq(T.activeIndex);a.addClass(T.params.slideActiveClass),i.loop&&(a.hasClass(T.params.slideDuplicateClass)?T.wrapper.children("."+T.params.slideClass+":not(."+T.params.slideDuplicateClass+')[data-swiper-slide-index="'+T.realIndex+'"]').addClass(T.params.slideDuplicateActiveClass):T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+T.realIndex+'"]').addClass(T.params.slideDuplicateActiveClass));var t=a.next("."+T.params.slideClass).addClass(T.params.slideNextClass);T.params.loop&&0===t.length&&(t=T.slides.eq(0),t.addClass(T.params.slideNextClass));var s=a.prev("."+T.params.slideClass).addClass(T.params.slidePrevClass);if(T.params.loop&&0===s.length&&(s=T.slides.eq(-1),s.addClass(T.params.slidePrevClass)),i.loop&&(t.hasClass(T.params.slideDuplicateClass)?T.wrapper.children("."+T.params.slideClass+":not(."+T.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicateNextClass):T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicateNextClass),s.hasClass(T.params.slideDuplicateClass)?T.wrapper.children("."+T.params.slideClass+":not(."+T.params.slideDuplicateClass+')[data-swiper-slide-index="'+s.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicatePrevClass):T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+s.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicatePrevClass)),T.paginationContainer&&T.paginationContainer.length>0){var r,n=T.params.loop?Math.ceil((T.slides.length-2*T.loopedSlides)/T.params.slidesPerGroup):T.snapGrid.length;if(T.params.loop?(r=Math.ceil((T.activeIndex-T.loopedSlides)/T.params.slidesPerGroup),r>T.slides.length-1-2*T.loopedSlides&&(r-=T.slides.length-2*T.loopedSlides),r>n-1&&(r-=n),r<0&&"bullets"!==T.params.paginationType&&(r=n+r)):r=void 0!==T.snapIndex?T.snapIndex:T.activeIndex||0,"bullets"===T.params.paginationType&&T.bullets&&T.bullets.length>0&&(T.bullets.removeClass(T.params.bulletActiveClass),T.paginationContainer.length>1?T.bullets.each(function(){e(this).index()===r&&e(this).addClass(T.params.bulletActiveClass)}):T.bullets.eq(r).addClass(T.params.bulletActiveClass)),"fraction"===T.params.paginationType&&(T.paginationContainer.find("."+T.params.paginationCurrentClass).text(r+1),T.paginationContainer.find("."+T.params.paginationTotalClass).text(n)),"progress"===T.params.paginationType){var o=(r+1)/n,l=o,p=1;T.isHorizontal()||(p=o,l=1),T.paginationContainer.find("."+T.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(T.params.speed)}"custom"===T.params.paginationType&&T.params.paginationCustomRender&&(T.paginationContainer.html(T.params.paginationCustomRender(T,r+1,n)),T.emit("onPaginationRendered",T,T.paginationContainer[0]))}T.params.loop||(T.params.prevButton&&T.prevButton&&T.prevButton.length>0&&(T.isBeginning?(T.prevButton.addClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.disable(T.prevButton)):(T.prevButton.removeClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.enable(T.prevButton))),T.params.nextButton&&T.nextButton&&T.nextButton.length>0&&(T.isEnd?(T.nextButton.addClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.disable(T.nextButton)):(T.nextButton.removeClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.enable(T.nextButton))))},T.updatePagination=function(){if(T.params.pagination&&T.paginationContainer&&T.paginationContainer.length>0){var e="";if("bullets"===T.params.paginationType){for(var a=T.params.loop?Math.ceil((T.slides.length-2*T.loopedSlides)/T.params.slidesPerGroup):T.snapGrid.length,t=0;t";T.paginationContainer.html(e),T.bullets=T.paginationContainer.find("."+T.params.bulletClass),T.params.paginationClickable&&T.params.a11y&&T.a11y&&T.a11y.initPagination()}"fraction"===T.params.paginationType&&(e=T.params.paginationFractionRender?T.params.paginationFractionRender(T,T.params.paginationCurrentClass,T.params.paginationTotalClass):' / ',T.paginationContainer.html(e)),"progress"===T.params.paginationType&&(e=T.params.paginationProgressRender?T.params.paginationProgressRender(T,T.params.paginationProgressbarClass):'',T.paginationContainer.html(e)),"custom"!==T.params.paginationType&&T.emit("onPaginationRendered",T,T.paginationContainer[0])}},T.update=function(e){function a(){T.rtl,T.translate;t=Math.min(Math.max(T.translate,T.maxTranslate()),T.minTranslate()),T.setWrapperTranslate(t),T.updateActiveIndex(),T.updateClasses()}if(T){T.updateContainerSize(),T.updateSlidesSize(),T.updateProgress(),T.updatePagination(),T.updateClasses(),T.params.scrollbar&&T.scrollbar&&T.scrollbar.set();var t;if(e){T.controller&&T.controller.spline&&(T.controller.spline=void 0),T.params.freeMode?(a(),T.params.autoHeight&&T.updateAutoHeight()):(("auto"===T.params.slidesPerView||T.params.slidesPerView>1)&&T.isEnd&&!T.params.centeredSlides?T.slideTo(T.slides.length-1,0,!1,!0):T.slideTo(T.activeIndex,0,!1,!0))||a()}else T.params.autoHeight&&T.updateAutoHeight()}},T.onResize=function(e){T.params.onBeforeResize&&T.params.onBeforeResize(T),T.params.breakpoints&&T.setBreakpoint();var a=T.params.allowSwipeToPrev,t=T.params.allowSwipeToNext;T.params.allowSwipeToPrev=T.params.allowSwipeToNext=!0,T.updateContainerSize(),T.updateSlidesSize(),("auto"===T.params.slidesPerView||T.params.freeMode||e)&&T.updatePagination(),T.params.scrollbar&&T.scrollbar&&T.scrollbar.set(),T.controller&&T.controller.spline&&(T.controller.spline=void 0);var s=!1;if(T.params.freeMode){var i=Math.min(Math.max(T.translate,T.maxTranslate()),T.minTranslate());T.setWrapperTranslate(i),T.updateActiveIndex(),T.updateClasses(),T.params.autoHeight&&T.updateAutoHeight()}else T.updateClasses(),s=("auto"===T.params.slidesPerView||T.params.slidesPerView>1)&&T.isEnd&&!T.params.centeredSlides?T.slideTo(T.slides.length-1,0,!1,!0):T.slideTo(T.activeIndex,0,!1,!0);T.params.lazyLoading&&!s&&T.lazy&&T.lazy.load(),T.params.allowSwipeToPrev=a,T.params.allowSwipeToNext=t,T.params.onAfterResize&&T.params.onAfterResize(T)},T.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?T.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(T.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),T.touchEvents={start:T.support.touch||!T.params.simulateTouch?"touchstart":T.touchEventsDesktop.start,move:T.support.touch||!T.params.simulateTouch?"touchmove":T.touchEventsDesktop.move,end:T.support.touch||!T.params.simulateTouch?"touchend":T.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===T.params.touchEventsTarget?T.container:T.wrapper).addClass("swiper-wp8-"+T.params.direction),T.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",s="container"===T.params.touchEventsTarget?T.container[0]:T.wrapper[0],r=T.support.touch?s:document,n=!!T.params.nested;if(T.browser.ie)s[t](T.touchEvents.start,T.onTouchStart,!1),r[t](T.touchEvents.move,T.onTouchMove,n),r[t](T.touchEvents.end,T.onTouchEnd,!1);else{if(T.support.touch){var o=!("touchstart"!==T.touchEvents.start||!T.support.passiveListener||!T.params.passiveListeners)&&{passive:!0,capture:!1};s[t](T.touchEvents.start,T.onTouchStart,o),s[t](T.touchEvents.move,T.onTouchMove,n),s[t](T.touchEvents.end,T.onTouchEnd,o)}(i.simulateTouch&&!T.device.ios&&!T.device.android||i.simulateTouch&&!T.support.touch&&T.device.ios)&&(s[t]("mousedown",T.onTouchStart,!1),document[t]("mousemove",T.onTouchMove,n),document[t]("mouseup",T.onTouchEnd,!1))}window[t]("resize",T.onResize),T.params.nextButton&&T.nextButton&&T.nextButton.length>0&&(T.nextButton[a]("click",T.onClickNext),T.params.a11y&&T.a11y&&T.nextButton[a]("keydown",T.a11y.onEnterKey)),T.params.prevButton&&T.prevButton&&T.prevButton.length>0&&(T.prevButton[a]("click",T.onClickPrev),T.params.a11y&&T.a11y&&T.prevButton[a]("keydown",T.a11y.onEnterKey)),T.params.pagination&&T.params.paginationClickable&&(T.paginationContainer[a]("click","."+T.params.bulletClass,T.onClickIndex),T.params.a11y&&T.a11y&&T.paginationContainer[a]("keydown","."+T.params.bulletClass,T.a11y.onEnterKey)),(T.params.preventClicks||T.params.preventClicksPropagation)&&s[t]("click",T.preventClicks,!0)},T.attachEvents=function(){T.initEvents()},T.detachEvents=function(){T.initEvents(!0)},T.allowClick=!0,T.preventClicks=function(e){T.allowClick||(T.params.preventClicks&&e.preventDefault(),T.params.preventClicksPropagation&&T.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},T.onClickNext=function(e){e.preventDefault(),T.isEnd&&!T.params.loop||T.slideNext()},T.onClickPrev=function(e){e.preventDefault(),T.isBeginning&&!T.params.loop||T.slidePrev()},T.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*T.params.slidesPerGroup;T.params.loop&&(t+=T.loopedSlides),T.slideTo(t)}, -T.updateClickedSlide=function(a){var t=o(a,"."+T.params.slideClass),s=!1;if(t)for(var i=0;iT.slides.length-T.loopedSlides+l/2?(T.fixLoop(),n=T.wrapper.children("."+T.params.slideClass+'[data-swiper-slide-index="'+r+'"]:not(.'+T.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){T.slideTo(n)},0)):T.slideTo(n):n>T.slides.length-l?(T.fixLoop(),n=T.wrapper.children("."+T.params.slideClass+'[data-swiper-slide-index="'+r+'"]:not(.'+T.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){T.slideTo(n)},0)):T.slideTo(n)}else T.slideTo(n)}};var S,C,z,M,E,P,I,k,L,D,B="input, select, textarea, button, video",H=Date.now(),G=[];T.animating=!1,T.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var X,A;T.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(X="touchstart"===a.type)||!("which"in a)||3!==a.which){if(T.params.noSwiping&&o(a,"."+T.params.noSwipingClass))return void(T.allowClick=!0);if(!T.params.swipeHandler||o(a,T.params.swipeHandler)){var t=T.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=T.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(T.device.ios&&T.params.iOSEdgeSwipeDetection&&t<=T.params.iOSEdgeSwipeThreshold)){if(S=!0,C=!1,z=!0,E=void 0,A=void 0,T.touches.startX=t,T.touches.startY=s,M=Date.now(),T.allowClick=!0,T.updateContainerSize(),T.swipeDirection=void 0,T.params.threshold>0&&(k=!1),"touchstart"!==a.type){var i=!0;e(a.target).is(B)&&(i=!1),document.activeElement&&e(document.activeElement).is(B)&&document.activeElement.blur(),i&&a.preventDefault()}T.emit("onTouchStart",T,a)}}}},T.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!X||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return T.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(T.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(T.params.onlyExternal)return T.allowClick=!1,void(S&&(T.touches.startX=T.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,T.touches.startY=T.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,M=Date.now()));if(X&&T.params.touchReleaseOnEdges&&!T.params.loop)if(T.isHorizontal()){if(T.touches.currentXT.touches.startX&&T.translate>=T.minTranslate())return}else if(T.touches.currentYT.touches.startY&&T.translate>=T.minTranslate())return;if(X&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(B))return C=!0,void(T.allowClick=!1);if(z&&T.emit("onTouchMove",T,a),!(a.targetTouches&&a.targetTouches.length>1)){if(T.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,T.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===E){var t;T.isHorizontal()&&T.touches.currentY===T.touches.startY||!T.isHorizontal()&&T.touches.currentX===T.touches.startX?E=!1:(t=180*Math.atan2(Math.abs(T.touches.currentY-T.touches.startY),Math.abs(T.touches.currentX-T.touches.startX))/Math.PI,E=T.isHorizontal()?t>T.params.touchAngle:90-t>T.params.touchAngle)}if(E&&T.emit("onTouchMoveOpposite",T,a),void 0===A&&(T.touches.currentX===T.touches.startX&&T.touches.currentY===T.touches.startY||(A=!0)),S){if(E)return void(S=!1);if(A){T.allowClick=!1,T.emit("onSliderMove",T,a),a.preventDefault(),T.params.touchMoveStopPropagation&&!T.params.nested&&a.stopPropagation(),C||(i.loop&&T.fixLoop(),I=T.getWrapperTranslate(),T.setWrapperTransition(0),T.animating&&T.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),T.params.autoplay&&T.autoplaying&&(T.params.autoplayDisableOnInteraction?T.stopAutoplay():T.pauseAutoplay()),D=!1,!T.params.grabCursor||T.params.allowSwipeToNext!==!0&&T.params.allowSwipeToPrev!==!0||T.setGrabCursor(!0)),C=!0;var s=T.touches.diff=T.isHorizontal()?T.touches.currentX-T.touches.startX:T.touches.currentY-T.touches.startY;s*=T.params.touchRatio,T.rtl&&(s=-s),T.swipeDirection=s>0?"prev":"next",P=s+I;var r=!0;if(s>0&&P>T.minTranslate()?(r=!1,T.params.resistance&&(P=T.minTranslate()-1+Math.pow(-T.minTranslate()+I+s,T.params.resistanceRatio))):s<0&&PI&&(P=I),T.params.threshold>0){if(!(Math.abs(s)>T.params.threshold||k))return void(P=I);if(!k)return k=!0,T.touches.startX=T.touches.currentX,T.touches.startY=T.touches.currentY,P=I,void(T.touches.diff=T.isHorizontal()?T.touches.currentX-T.touches.startX:T.touches.currentY-T.touches.startY)}T.params.followFinger&&((T.params.freeMode||T.params.watchSlidesProgress)&&T.updateActiveIndex(),T.params.freeMode&&(0===G.length&&G.push({position:T.touches[T.isHorizontal()?"startX":"startY"],time:M}),G.push({position:T.touches[T.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),T.updateProgress(P),T.setWrapperTranslate(P))}}}}},T.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),z&&T.emit("onTouchEnd",T,a),z=!1,S){T.params.grabCursor&&C&&S&&(T.params.allowSwipeToNext===!0||T.params.allowSwipeToPrev===!0)&&T.setGrabCursor(!1);var t=Date.now(),s=t-M;if(T.allowClick&&(T.updateClickedSlide(a),T.emit("onTap",T,a),s<300&&t-H>300&&(L&&clearTimeout(L),L=setTimeout(function(){T&&(T.params.paginationHide&&T.paginationContainer.length>0&&!e(a.target).hasClass(T.params.bulletClass)&&T.paginationContainer.toggleClass(T.params.paginationHiddenClass),T.emit("onClick",T,a))},300)),s<300&&t-H<300&&(L&&clearTimeout(L),T.emit("onDoubleTap",T,a))),H=Date.now(),setTimeout(function(){T&&(T.allowClick=!0)},0),!S||!C||!T.swipeDirection||0===T.touches.diff||P===I)return void(S=C=!1);S=C=!1;var i;if(i=T.params.followFinger?T.rtl?T.translate:-T.translate:-P,T.params.freeMode){if(i<-T.minTranslate())return void T.slideTo(T.activeIndex);if(i>-T.maxTranslate())return void(T.slides.length1){var r=G.pop(),n=G.pop(),o=r.position-n.position,l=r.time-n.time;T.velocity=o/l,T.velocity=T.velocity/2,Math.abs(T.velocity)150||(new window.Date).getTime()-r.time>300)&&(T.velocity=0)}else T.velocity=0;T.velocity=T.velocity*T.params.freeModeMomentumVelocityRatio,G.length=0;var p=1e3*T.params.freeModeMomentumRatio,d=T.velocity*p,u=T.translate+d;T.rtl&&(u=-u);var c,m=!1,h=20*Math.abs(T.velocity)*T.params.freeModeMomentumBounceRatio;if(uT.minTranslate())T.params.freeModeMomentumBounce?(u-T.minTranslate()>h&&(u=T.minTranslate()+h),c=T.minTranslate(),m=!0,D=!0):u=T.minTranslate();else if(T.params.freeModeSticky){var g,f=0;for(f=0;f-u){g=f;break}u=Math.abs(T.snapGrid[g]-u)=T.params.longSwipesMs)&&(T.updateProgress(),T.updateActiveIndex()))}var v,w=0,y=T.slidesSizesGrid[0];for(v=0;v=T.slidesGrid[v]&&i=T.slidesGrid[v]&&(w=v,y=T.slidesGrid[T.slidesGrid.length-1]-T.slidesGrid[T.slidesGrid.length-2]);var x=(i-T.slidesGrid[w])/y;if(s>T.params.longSwipesMs){if(!T.params.longSwipes)return void T.slideTo(T.activeIndex);"next"===T.swipeDirection&&(x>=T.params.longSwipesRatio?T.slideTo(w+T.params.slidesPerGroup):T.slideTo(w)),"prev"===T.swipeDirection&&(x>1-T.params.longSwipesRatio?T.slideTo(w+T.params.slidesPerGroup):T.slideTo(w))}else{if(!T.params.shortSwipes)return void T.slideTo(T.activeIndex);"next"===T.swipeDirection&&T.slideTo(w+T.params.slidesPerGroup),"prev"===T.swipeDirection&&T.slideTo(w)}}},T._slideTo=function(e,a){return T.slideTo(e,a,!0,!0)},T.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),T.snapIndex=Math.floor(e/T.params.slidesPerGroup),T.snapIndex>=T.snapGrid.length&&(T.snapIndex=T.snapGrid.length-1);var i=-T.snapGrid[T.snapIndex];if(T.params.autoplay&&T.autoplaying&&(s||!T.params.autoplayDisableOnInteraction?T.pauseAutoplay(a):T.stopAutoplay()),T.updateProgress(i),T.params.normalizeSlideIndex)for(var r=0;r=Math.floor(100*T.slidesGrid[r])&&(e=r);return!(!T.params.allowSwipeToNext&&iT.translate&&i>T.maxTranslate()&&(T.activeIndex||0)!==e)&&(void 0===a&&(a=T.params.speed),T.previousIndex=T.activeIndex||0,T.activeIndex=e,T.updateRealIndex(),T.rtl&&-i===T.translate||!T.rtl&&i===T.translate?(T.params.autoHeight&&T.updateAutoHeight(),T.updateClasses(),"slide"!==T.params.effect&&T.setWrapperTranslate(i),!1):(T.updateClasses(),T.onTransitionStart(t),0===a||T.browser.lteIE9?(T.setWrapperTranslate(i),T.setWrapperTransition(0),T.onTransitionEnd(t)):(T.setWrapperTranslate(i),T.setWrapperTransition(a),T.animating||(T.animating=!0,T.wrapper.transitionEnd(function(){T&&T.onTransitionEnd(t)}))),!0)))},T.onTransitionStart=function(e){void 0===e&&(e=!0),T.params.autoHeight&&T.updateAutoHeight(),T.lazy&&T.lazy.onTransitionStart(),e&&(T.emit("onTransitionStart",T),T.activeIndex!==T.previousIndex&&(T.emit("onSlideChangeStart",T),T.activeIndex>T.previousIndex?T.emit("onSlideNextStart",T):T.emit("onSlidePrevStart",T)))},T.onTransitionEnd=function(e){T.animating=!1,T.setWrapperTransition(0),void 0===e&&(e=!0),T.lazy&&T.lazy.onTransitionEnd(),e&&(T.emit("onTransitionEnd",T),T.activeIndex!==T.previousIndex&&(T.emit("onSlideChangeEnd",T),T.activeIndex>T.previousIndex?T.emit("onSlideNextEnd",T):T.emit("onSlidePrevEnd",T))),T.params.history&&T.history&&T.history.setHistory(T.params.history,T.activeIndex),T.params.hashnav&&T.hashnav&&T.hashnav.setHash()},T.slideNext=function(e,a,t){if(T.params.loop){if(T.animating)return!1;T.fixLoop();T.container[0].clientLeft;return T.slideTo(T.activeIndex+T.params.slidesPerGroup,a,e,t)}return T.slideTo(T.activeIndex+T.params.slidesPerGroup,a,e,t)},T._slideNext=function(e){return T.slideNext(!0,e,!0)},T.slidePrev=function(e,a,t){if(T.params.loop){if(T.animating)return!1;T.fixLoop();T.container[0].clientLeft;return T.slideTo(T.activeIndex-1,a,e,t)}return T.slideTo(T.activeIndex-1,a,e,t)},T._slidePrev=function(e){return T.slidePrev(!0,e,!0)},T.slideReset=function(e,a,t){return T.slideTo(T.activeIndex,a,e)},T.disableTouchControl=function(){return T.params.onlyExternal=!0,!0},T.enableTouchControl=function(){return T.params.onlyExternal=!1,!0},T.setWrapperTransition=function(e,a){T.wrapper.transition(e),"slide"!==T.params.effect&&T.effects[T.params.effect]&&T.effects[T.params.effect].setTransition(e),T.params.parallax&&T.parallax&&T.parallax.setTransition(e),T.params.scrollbar&&T.scrollbar&&T.scrollbar.setTransition(e),T.params.control&&T.controller&&T.controller.setTransition(e,a),T.emit("onSetTransition",T,e)},T.setWrapperTranslate=function(e,a,t){var s=0,i=0;T.isHorizontal()?s=T.rtl?-e:e:i=e,T.params.roundLengths&&(s=r(s),i=r(i)),T.params.virtualTranslate||(T.support.transforms3d?T.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):T.wrapper.transform("translate("+s+"px, "+i+"px)")),T.translate=T.isHorizontal()?s:i;var n,o=T.maxTranslate()-T.minTranslate();n=0===o?0:(e-T.minTranslate())/o,n!==T.progress&&T.updateProgress(e),a&&T.updateActiveIndex(),"slide"!==T.params.effect&&T.effects[T.params.effect]&&T.effects[T.params.effect].setTranslate(T.translate),T.params.parallax&&T.parallax&&T.parallax.setTranslate(T.translate),T.params.scrollbar&&T.scrollbar&&T.scrollbar.setTranslate(T.translate),T.params.control&&T.controller&&T.controller.setTranslate(T.translate,t),T.emit("onSetTranslate",T,T.translate)},T.getTranslate=function(e,a){var t,s,i,r;return void 0===a&&(a="x"),T.params.virtualTranslate?T.rtl?-T.translate:T.translate:(i=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=i.transform||i.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),r=new window.WebKitCSSMatrix("none"===s?"":s)):(r=i.MozTransform||i.OTransform||i.MsTransform||i.msTransform||i.transform||i.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=r.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?r.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?r.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),T.rtl&&s&&(s=-s),s||0)},T.getWrapperTranslate=function(e){return void 0===e&&(e=T.isHorizontal()?"x":"y"),T.getTranslate(T.wrapper[0],e)},T.observers=[],T.initObservers=function(){if(T.params.observeParents)for(var e=T.container.parents(),a=0;aa.length&&(T.loopedSlides=a.length);var t,s=[],i=[];for(a.each(function(t,r){var n=e(this);t=a.length-T.loopedSlides&&s.push(r),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)T.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(T.params.slideDuplicateClass))},T.destroyLoop=function(){T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass).remove(),T.slides.removeAttr("data-swiper-slide-index")},T.reLoop=function(e){var a=T.activeIndex-T.loopedSlides;T.destroyLoop(),T.createLoop(),T.updateSlidesSize(),e&&T.slideTo(a+T.loopedSlides,0,!1)},T.fixLoop=function(){var e;T.activeIndex=2*T.loopedSlides||T.activeIndex>T.slides.length-2*T.params.slidesPerView)&&(e=-T.slides.length+T.activeIndex+T.loopedSlides,e+=T.loopedSlides,T.slideTo(e,0,!1,!0))},T.appendSlide=function(e){if(T.params.loop&&T.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a'),t.append(d)),0===u.length&&(u=e('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(T.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),T.params.virtualTranslate&&0!==a){var t=!1;T.slides.eq(T.activeIndex).transitionEnd(function(){if(!t&&T&&e(this).hasClass(T.params.slideActiveClass)){t=!0,T.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),T.wrapper.append(a)),a.css({height:T.width+"px"})):(a=T.container.find(".swiper-cube-shadow"),0===a.length&&(a=e('
'),T.container.append(a))));for(var s=0;s-1&&(t=90*s+90*o,T.rtl&&(t=90*-s-90*o)),i.transform(u),T.params.cube.slideShadows){var c=T.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),m=T.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===c.length&&(c=e('
'),i.append(c)),0===m.length&&(m=e('
'),i.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(T.wrapper.css({"-webkit-transform-origin":"50% 50% -"+T.size/2+"px","-moz-transform-origin":"50% 50% -"+T.size/2+"px","-ms-transform-origin":"50% 50% -"+T.size/2+"px","transform-origin":"50% 50% -"+T.size/2+"px"}),T.params.cube.shadow)if(T.isHorizontal())a.transform("translate3d(0px, "+(T.width/2+T.params.cube.shadowOffset)+"px, "+-T.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+T.params.cube.shadowScale+")");else{var h=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*h*Math.PI/360)/2+Math.cos(2*h*Math.PI/360)/2),f=T.params.cube.shadowScale,v=T.params.cube.shadowScale/g,w=T.params.cube.shadowOffset;a.transform("scale3d("+f+", 1, "+v+") translate3d(0px, "+(T.height/2+w)+"px, "+-T.height/2/v+"px) rotateX(-90deg)")}var y=T.isSafari||T.isUiWebView?-T.size/2:0;T.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(T.isHorizontal()?0:t)+"deg) rotateY("+(T.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){T.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),T.params.cube.shadow&&!T.isHorizontal()&&T.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=T.translate,t=T.isHorizontal()?-a+T.width/2:-a+T.height/2,s=T.isHorizontal()?T.params.coverflow.rotate:-T.params.coverflow.rotate,i=T.params.coverflow.depth,r=0,n=T.slides.length;r'),o.append(v)),0===w.length&&(w=e('
'),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(T.browser.ie){T.wrapper[0].style.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){T.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},T.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==T.slides.length)){var s=T.slides.eq(a),i=s.find("."+T.params.lazyLoadingClass+":not(."+T.params.lazyStatusLoadedClass+"):not(."+T.params.lazyStatusLoadingClass+")");!s.hasClass(T.params.lazyLoadingClass)||s.hasClass(T.params.lazyStatusLoadedClass)||s.hasClass(T.params.lazyStatusLoadingClass)||(i=i.add(s[0])),0!==i.length&&i.each(function(){var a=e(this);a.addClass(T.params.lazyStatusLoadingClass);var i=a.attr("data-background"),r=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");T.loadImage(a[0],r||i,n,o,!1,function(){if(void 0!==T&&null!==T&&T){if(i?(a.css("background-image",'url("'+i+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),r&&(a.attr("src",r),a.removeAttr("data-src"))),a.addClass(T.params.lazyStatusLoadedClass).removeClass(T.params.lazyStatusLoadingClass),s.find("."+T.params.lazyPreloaderClass+", ."+T.params.preloaderClass).remove(),T.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(T.params.slideDuplicateClass)){var l=T.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+T.params.slideDuplicateClass+")");T.lazy.loadImageInSlide(l.index(),!1)}else{var p=T.wrapper.children("."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');T.lazy.loadImageInSlide(p.index(),!1)}}T.emit("onLazyImageReady",T,s[0],a[0])}}),T.emit("onLazyImageLoad",T,s[0],a[0])})}},load:function(){var a,t=T.params.slidesPerView;if("auto"===t&&(t=0),T.lazy.initialImageLoaded||(T.lazy.initialImageLoaded=!0),T.params.watchSlidesVisibility)T.wrapper.children("."+T.params.slideVisibleClass).each(function(){T.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=T.activeIndex;a1||T.params.lazyLoadingInPrevNextAmount&&T.params.lazyLoadingInPrevNextAmount>1){var s=T.params.lazyLoadingInPrevNextAmount,i=t,r=Math.min(T.activeIndex+i+Math.max(s,i),T.slides.length),n=Math.max(T.activeIndex-Math.max(i,s),0);for(a=T.activeIndex+t;a0&&T.lazy.loadImageInSlide(o.index());var l=T.wrapper.children("."+T.params.slidePrevClass);l.length>0&&T.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){T.params.lazyLoading&&(T.params.lazyLoadingOnTransitionStart||!T.params.lazyLoadingOnTransitionStart&&!T.lazy.initialImageLoaded)&&T.lazy.load()},onTransitionEnd:function(){T.params.lazyLoading&&!T.params.lazyLoadingOnTransitionStart&&T.lazy.load()}},T.scrollbar={isTouched:!1,setDragPosition:function(e){var a=T.scrollbar,t=T.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[T.isHorizontal()?"left":"top"]-a.dragSize/2,i=-T.minTranslate()*a.moveDivider,r=-T.maxTranslate()*a.moveDivider;sr&&(s=r),s=-s/a.moveDivider,T.updateProgress(s),T.setWrapperTranslate(s,!0)},dragStart:function(e){var a=T.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),T.params.scrollbarHide&&a.track.css("opacity",1),T.wrapper.transition(100),a.drag.transition(100),T.emit("onScrollbarDragStart",T)},dragMove:function(e){var a=T.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),T.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),T.emit("onScrollbarDragMove",T))},dragEnd:function(e){var a=T.scrollbar;a.isTouched&&(a.isTouched=!1,T.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),T.emit("onScrollbarDragEnd",T),T.params.scrollbarSnapOnRelease&&T.slideReset())},draggableEvents:function(){return T.params.simulateTouch!==!1||T.support.touch?T.touchEvents:T.touchEventsDesktop}(),enableDraggable:function(){var a=T.scrollbar,t=T.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=T.scrollbar,t=T.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(T.params.scrollbar){var a=T.scrollbar;a.track=e(T.params.scrollbar),T.params.uniqueNavElements&&"string"==typeof T.params.scrollbar&&a.track.length>1&&1===T.container.find(T.params.scrollbar).length&&(a.track=T.container.find(T.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=T.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=T.size/T.virtualSize,a.moveDivider=a.divider*(a.trackSize/T.size),a.dragSize=a.trackSize*a.divider,T.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",T.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(T.params.scrollbar){var e,a=T.scrollbar,t=(T.translate,a.dragSize);e=(a.trackSize-a.dragSize)*T.progress,T.rtl&&T.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),T.isHorizontal()?(T.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(T.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),T.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){T.params.scrollbar&&T.scrollbar.drag.transition(e)}},T.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,i){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=i?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,i;this.x.length;this.interpolate=function(e){return e?(i=t(this.x,e),s=i-1,(e-this.x[s])*(this.y[i]-this.y[s])/(this.x[i]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){T.controller.spline||(T.controller.spline=T.params.loop?new T.controller.LinearSpline(T.slidesGrid,e.slidesGrid):new T.controller.LinearSpline(T.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-T.translate:T.translate,"slide"===T.params.controlBy&&(T.controller.getInterpolateFunction(a),r=-T.controller.spline.interpolate(-e)),r&&"container"!==T.params.controlBy||(i=(a.maxTranslate()-a.minTranslate())/(T.maxTranslate()-T.minTranslate()),r=(e-T.minTranslate())*i+a.minTranslate()),T.params.controlInverse&&(r=a.maxTranslate()-r),a.updateProgress(r),a.setWrapperTranslate(r,!1,T),a.updateActiveIndex()}var i,r,n=T.params.control;if(Array.isArray(n))for(var o=0;o-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),T.disableMousewheelControl=function(){if(!T.mousewheel.event)return!1;var a=T.container;return"container"!==T.params.mousewheelEventsTarged&&(a=e(T.params.mousewheelEventsTarged)),a.off(T.mousewheel.event,u),T.params.mousewheelControl=!1,!0},T.enableMousewheelControl=function(){if(!T.mousewheel.event)return!1;var a=T.container;return"container"!==T.params.mousewheelEventsTarged&&(a=e(T.params.mousewheelEventsTarged)),a.on(T.mousewheel.event,u),T.params.mousewheelControl=!0,!0},T.parallax={setTranslate:function(){T.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){c(this,T.progress)}),T.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){c(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=T.params.speed),T.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},T.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:T.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(i-t,2))},onGestureStart:function(a){var t=T.zoom;if(!T.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}if(!(t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=T.slides.eq(T.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+T.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||T.params.zoomMax,0!==t.gesture.imageWrap.length)))return void(t.gesture.image=void 0);t.gesture.image.transition(0),t.isScaling=!0},onGestureChange:function(e){var a=T.zoom;if(!T.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(T.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scalea.image.touchesStart.x)return void(a.image.isTouched=!1);if(!T.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.ya.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentXa.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentYa.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,i=300,r=t.velocity.x*s,n=t.image.currentX+r,o=t.velocity.y*i,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(i=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,i);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,u=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-u/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var i,r,n,o,l,p,d,u,c,m,h,g,f,v,w,y,x,T;void 0===s.image.touchesStart.x&&t?(i="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,r="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(i=s.image.touchesStart.x,r=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(x=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+x/2-i,p=o+T/2-r,c=s.gesture.image[0].offsetWidth,m=s.gesture.image[0].offsetHeight,h=c*s.scale,g=m*s.scale,f=Math.min(x/2-h/2,0),v=Math.min(T/2-g/2,0),w=-f,y=-v,d=l*s.scale,u=p*s.scale,dw&&(d=w),uy&&(u=y)):(d=0,u=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+u+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(T.params.zoom){var s=(T.slides,!("touchstart"!==T.touchEvents.start||!T.support.passiveListener||!T.params.passiveListeners)&&{passive:!0,capture:!1});T.support.gestures?(T.slides[t]("gesturestart",T.zoom.onGestureStart,s),T.slides[t]("gesturechange",T.zoom.onGestureChange,s),T.slides[t]("gestureend",T.zoom.onGestureEnd,s)):"touchstart"===T.touchEvents.start&&(T.slides[t](T.touchEvents.start,T.zoom.onGestureStart,s),T.slides[t](T.touchEvents.move,T.zoom.onGestureChange,s),T.slides[t](T.touchEvents.end,T.zoom.onGestureEnd,s)),T[t]("touchStart",T.zoom.onTouchStart),T.slides.each(function(a,s){e(s).find("."+T.params.zoomContainerClass).length>0&&e(s)[t](T.touchEvents.move,T.zoom.onTouchMove)}),T[t]("touchEnd",T.zoom.onTouchEnd),T[t]("transitionEnd",T.zoom.onTransitionEnd),T.params.zoomToggle&&T.on("doubleTap",T.zoom.toggleZoom)}},init:function(){T.zoom.attachEvents()},destroy:function(){T.zoom.attachEvents(!0)}},T._plugins=[];for(var Y in T.plugins){var O=T.plugins[Y](T,T.params[Y]);O&&T._plugins.push(O)}return T.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=T.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){T.params.nextButton&&T.nextButton&&T.nextButton.length>0&&(T.a11y.makeFocusable(T.nextButton),T.a11y.addRole(T.nextButton,"button"),T.a11y.addLabel(T.nextButton,T.params.nextSlideMessage)),T.params.prevButton&&T.prevButton&&T.prevButton.length>0&&(T.a11y.makeFocusable(T.prevButton),T.a11y.addRole(T.prevButton,"button"),T.a11y.addLabel(T.prevButton,T.params.prevSlideMessage)),e(T.container).append(T.a11y.liveRegion)},initPagination:function(){T.params.pagination&&T.params.paginationClickable&&T.bullets&&T.bullets.length&&T.bullets.each(function(){var a=e(this);T.a11y.makeFocusable(a),T.a11y.addRole(a,"button"),T.a11y.addLabel(a,T.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){T.a11y.liveRegion&&T.a11y.liveRegion.length>0&&T.a11y.liveRegion.remove()}},T.init=function(){T.params.loop&&T.createLoop(),T.updateContainerSize(),T.updateSlidesSize(),T.updatePagination(),T.params.scrollbar&&T.scrollbar&&(T.scrollbar.set(),T.params.scrollbarDraggable&&T.scrollbar.enableDraggable()),"slide"!==T.params.effect&&T.effects[T.params.effect]&&(T.params.loop||T.updateProgress(),T.effects[T.params.effect].setTranslate()),T.params.loop?T.slideTo(T.params.initialSlide+T.loopedSlides,0,T.params.runCallbacksOnInit):(T.slideTo(T.params.initialSlide,0,T.params.runCallbacksOnInit),0===T.params.initialSlide&&(T.parallax&&T.params.parallax&&T.parallax.setTranslate(),T.lazy&&T.params.lazyLoading&&(T.lazy.load(),T.lazy.initialImageLoaded=!0))),T.attachEvents(),T.params.observer&&T.support.observer&&T.initObservers(),T.params.preloadImages&&!T.params.lazyLoading&&T.preloadImages(),T.params.zoom&&T.zoom&&T.zoom.init(),T.params.autoplay&&T.startAutoplay(),T.params.keyboardControl&&T.enableKeyboardControl&&T.enableKeyboardControl(),T.params.mousewheelControl&&T.enableMousewheelControl&&T.enableMousewheelControl(),T.params.hashnavReplaceState&&(T.params.replaceState=T.params.hashnavReplaceState),T.params.history&&T.history&&T.history.init(),T.params.hashnav&&T.hashnav&&T.hashnav.init(),T.params.a11y&&T.a11y&&T.a11y.init(),T.emit("onInit",T)},T.cleanupStyles=function(){T.container.removeClass(T.classNames.join(" ")).removeAttr("style"),T.wrapper.removeAttr("style"),T.slides&&T.slides.length&&T.slides.removeClass([T.params.slideVisibleClass,T.params.slideActiveClass,T.params.slideNextClass,T.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),T.paginationContainer&&T.paginationContainer.length&&T.paginationContainer.removeClass(T.params.paginationHiddenClass),T.bullets&&T.bullets.length&&T.bullets.removeClass(T.params.bulletActiveClass),T.params.prevButton&&e(T.params.prevButton).removeClass(T.params.buttonDisabledClass),T.params.nextButton&&e(T.params.nextButton).removeClass(T.params.buttonDisabledClass),T.params.scrollbar&&T.scrollbar&&(T.scrollbar.track&&T.scrollbar.track.length&&T.scrollbar.track.removeAttr("style"),T.scrollbar.drag&&T.scrollbar.drag.length&&T.scrollbar.drag.removeAttr("style"))},T.destroy=function(e,a){T.detachEvents(),T.stopAutoplay(),T.params.scrollbar&&T.scrollbar&&T.params.scrollbarDraggable&&T.scrollbar.disableDraggable(),T.params.loop&&T.destroyLoop(),a&&T.cleanupStyles(),T.disconnectObservers(),T.params.zoom&&T.zoom&&T.zoom.destroy(),T.params.keyboardControl&&T.disableKeyboardControl&&T.disableKeyboardControl(),T.params.mousewheelControl&&T.disableMousewheelControl&&T.disableMousewheelControl(),T.params.a11y&&T.a11y&&T.a11y.destroy(),T.params.history&&!T.params.replaceState&&window.removeEventListener("popstate",T.history.setHistoryPopState),T.params.hashnav&&T.hashnav&&T.hashnav.destroy(),T.emit("onDestroy"),e!==!1&&(T=null)},T.init(),T}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="",1===e.getElementsByTagName("i").length}()},device:function(){var e=window.navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),i=!t&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);return{ios:t||i||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],i=0;i0&&a[0].nodeType)for(i=0;i0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,s=e.clientTop||t.clientTop||0,i=e.clientLeft||t.clientLeft||0,r=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+r-s,left:a.left+n-i}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;ts-1?new e([]):a<0?(t=s+a,new e(t<0?[]:[this[t]])):new e([this[a]])},append:function(a){var t,s;for(t=0;t=0;s--)this[t].insertBefore(i.childNodes[s],this[t].childNodes[0])}else if(a instanceof e)for(s=0;s1)for(var i=0;i1)for(var i=0;i0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var s=[],i=this[0];if(!i)return new e([]);for(;i.nextElementSibling;){var r=i.nextElementSibling;t?a(r).is(t)&&s.push(r):s.push(r),i=r}return new e(s)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var s=[],i=this[0];if(!i)return new e([]);for(;i.previousElementSibling;){var r=i.previousElementSibling;t?a(r).is(t)&&s.push(r):s.push(r),i=r}return new e(s)},parent:function(e){for(var t=[],s=0;s0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),window.Swiper=a}(),"undefined"!=typeof module?module.exports=window.Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return window.Swiper}); -//# sourceMappingURL=maps/swiper.min.js.map diff --git a/gulpfile.js b/gulpfile.js index cba12d286..365c637fd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,423 +1 @@ -(function(){ - 'use strict'; - var gulp = require('gulp'), - connect = require('gulp-connect'), - open = require('gulp-open'), - less = require('gulp-less'), - rename = require('gulp-rename'), - header = require('gulp-header'), - path = require('path'), - uglify = require('gulp-uglify'), - sourcemaps = require('gulp-sourcemaps'), - cleanCSS = require('gulp-clean-css'), - tap = require('gulp-tap'), - concat = require('gulp-concat'), - jshint = require('gulp-jshint'), - stylish = require('jshint-stylish'), - fs = require('fs'), - paths = { - root: './', - build: { - root: 'build/', - styles: 'build/css/', - scripts: 'build/js/' - }, - custom: { - root: 'custom/', - styles: 'custom/css/', - scripts: 'custom/js/' - }, - dist: { - root: 'dist/', - styles: 'dist/css/', - scripts: 'dist/js/' - }, - playground: { - root: 'playground/' - }, - source: { - root: 'src/', - styles: 'src/less/', - scripts: 'src/js/*.js' - }, - }, - swiper = { - filename: 'swiper', - jsFiles: [ - 'src/js/wrap-start.js', - 'src/js/swiper-intro.js', - 'src/js/core.js', - 'src/js/effects.js', - 'src/js/lazy-load.js', - 'src/js/scrollbar.js', - 'src/js/controller.js', - 'src/js/hashnav.js', - 'src/js/history.js', - 'src/js/keyboard.js', - 'src/js/mousewheel.js', - 'src/js/parallax.js', - 'src/js/zoom.js', - 'src/js/plugins.js', - 'src/js/emitter.js', - 'src/js/a11y.js', - 'src/js/init.js', - 'src/js/swiper-outro.js', - 'src/js/swiper-proto.js', - 'src/js/dom.js', - 'src/js/get-dom-lib.js', - 'src/js/dom-plugins.js', - 'src/js/wrap-end.js', - 'src/js/amd.js' - ], - jQueryFiles : [ - 'src/js/wrap-start.js', - 'src/js/swiper-intro.js', - 'src/js/core.js', - 'src/js/effects.js', - 'src/js/lazy-load.js', - 'src/js/scrollbar.js', - 'src/js/controller.js', - 'src/js/hashnav.js', - 'src/js/history.js', - 'src/js/keyboard.js', - 'src/js/mousewheel.js', - 'src/js/parallax.js', - 'src/js/zoom.js', - 'src/js/plugins.js', - 'src/js/emitter.js', - 'src/js/a11y.js', - 'src/js/init.js', - 'src/js/swiper-outro.js', - 'src/js/swiper-proto.js', - 'src/js/get-dom-lib.js', - 'src/js/dom-plugins.js', - 'src/js/wrap-end.js', - 'src/js/amd.js' - ], - jQueryUMDFiles : [ - 'src/js/wrap-start-umd.js', - 'src/js/swiper-intro.js', - 'src/js/core.js', - 'src/js/effects.js', - 'src/js/lazy-load.js', - 'src/js/scrollbar.js', - 'src/js/controller.js', - 'src/js/hashnav.js', - 'src/js/history.js', - 'src/js/keyboard.js', - 'src/js/mousewheel.js', - 'src/js/parallax.js', - 'src/js/zoom.js', - 'src/js/plugins.js', - 'src/js/emitter.js', - 'src/js/a11y.js', - 'src/js/init.js', - 'src/js/swiper-outro.js', - 'src/js/swiper-proto.js', - 'src/js/get-jquery.js', - 'src/js/dom-plugins.js', - 'src/js/wrap-end-umd.js', - ], - Framework7Files : [ - 'src/js/swiper-intro-f7.js', - 'src/js/core.js', - 'src/js/effects.js', - 'src/js/lazy-load.js', - 'src/js/scrollbar.js', - 'src/js/controller.js', - 'src/js/parallax.js', - 'src/js/zoom.js', - 'src/js/plugins.js', - 'src/js/emitter.js', - 'src/js/a11y.js', - 'src/js/init.js', - 'src/js/swiper-outro.js', - 'src/js/swiper-proto.js', - ], - pkg: require('./bower.json'), - modules: require('./modules.json'), - banner: [ - '/**', - ' * Swiper <%= pkg.version %>', - ' * <%= pkg.description %>', - ' * ', - ' * <%= pkg.homepage %>', - ' * ', - ' * Copyright <%= date.year %>, <%= pkg.author %>', - ' * The iDangero.us', - ' * http://www.idangero.us/', - ' * ', - ' * Licensed under <%= pkg.license.join(" & ") %>', - ' * ', - ' * Released on: <%= date.month %> <%= date.day %>, <%= date.year %>', - ' */', - ''].join('\n'), - customBanner: [ - '/**', - ' * Swiper <%= pkg.version %> - Custom Build', - ' * <%= pkg.description %>', - ' * ', - ' * Included modules: <%= modulesList %>', - ' * ', - ' * <%= pkg.homepage %>', - ' * ', - ' * Copyright <%= date.year %>, <%= pkg.author %>', - ' * The iDangero.us', - ' * http://www.idangero.us/', - ' * ', - ' * Licensed under <%= pkg.license.join(" & ") %>', - ' * ', - ' * Released on: <%= date.month %> <%= date.day %>, <%= date.year %>', - ' */', - ''].join('\n'), - date: { - year: new Date().getFullYear(), - month: ('January February March April May June July August September October November December').split(' ')[new Date().getMonth()], - day: new Date().getDate() - } - }; - - function addJSIndent (file, t, minusIndent) { - var addIndent = ' '; - var filename = file.path.split('src/js/')[1]; - if (['wrap-start.js', 'wrap-start-umd.js', 'wrap-end.js', 'wrap-end-umd.js', 'amd.js'].indexOf(filename) !== -1) { - addIndent = ''; - } - if (filename === 'swiper-intro.js' || filename === 'swiper-intro-f7.js' || filename === 'swiper-outro.js' || filename === 'dom.js' || filename === 'get-dom-lib.js' || filename === 'get-jquery.js' || filename === 'dom-plugins.js' || filename === 'swiper-proto.js') addIndent = ' '; - if (minusIndent) { - addIndent = addIndent.substring(4); - } - if (addIndent !== '') { - var fileLines = fs.readFileSync(file.path).toString().split('\n'); - var newFileContents = ''; - for (var i = 0; i < fileLines.length; i++) { - newFileContents += addIndent + fileLines[i] + (i === fileLines.length ? '' : '\n'); - } - file.contents = new Buffer(newFileContents); - } - } - gulp.task('scripts', function (cb) { - gulp.src(swiper.jsFiles) - .pipe(tap(function (file, t){ - addJSIndent (file, t); - })) - .pipe(sourcemaps.init()) - .pipe(concat(swiper.filename + '.js')) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) - .pipe(jshint()) - .pipe(jshint.reporter(stylish)) - .pipe(sourcemaps.write('./maps/')) - .pipe(gulp.dest(paths.build.scripts)); - - - gulp.src(swiper.jQueryFiles) - .pipe(tap(function (file, t){ - addJSIndent (file, t); - })) - .pipe(sourcemaps.init()) - .pipe(concat(swiper.filename + '.jquery.js')) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) - .pipe(sourcemaps.write('./maps/')) - .pipe(gulp.dest(paths.build.scripts)); - gulp.src(swiper.jQueryUMDFiles) - .pipe(tap(function (file, t){ - addJSIndent (file, t); - })) - .pipe(sourcemaps.init()) - .pipe(concat(swiper.filename + '.jquery.umd.js')) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) - .pipe(sourcemaps.write('./maps/')) - .pipe(gulp.dest(paths.build.scripts)); - gulp.src(swiper.Framework7Files) - .pipe(tap(function (file, t){ - addJSIndent (file, t, true); - })) - .pipe(sourcemaps.init()) - .pipe(concat(swiper.filename + '.framework7.js')) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) - .pipe(sourcemaps.write('./maps/')) - .pipe(gulp.dest(paths.build.scripts)) - .pipe(connect.reload()); - cb(); - }); - gulp.task('styles', function (cb) { - - gulp.src(paths.source.styles + 'swiper.less') - .pipe(less({ - paths: [ path.join(__dirname, 'less', 'includes') ] - })) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date })) - .pipe(rename(function(path) { - path.basename = swiper.filename; - })) - .pipe(gulp.dest(paths.build.styles)) - .pipe(connect.reload()); - - gulp.src([ - paths.source.styles + 'core.less', - paths.source.styles + 'navigation-f7.less', - paths.source.styles + 'effects.less', - paths.source.styles + 'zoom.less', - paths.source.styles + 'scrollbar.less', - paths.source.styles + 'preloader-f7.less' - ]) - .pipe(concat(swiper.filename + '.framework7.less')) - .pipe(header('/* === Swiper === */\n')) - .pipe(gulp.dest(paths.build.styles)); - cb(); - }); - gulp.task('build', ['scripts', 'styles'], function (cb) { - cb(); - }); - - gulp.task('dist', function () { - gulp.src([paths.build.scripts + swiper.filename + '.js']) - .pipe(gulp.dest(paths.dist.scripts)) - .pipe(sourcemaps.init()) - .pipe(uglify()) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date })) - .pipe(rename(function(path) { - path.basename = swiper.filename + '.min'; - })) - .pipe(sourcemaps.write('./maps')) - .pipe(gulp.dest(paths.dist.scripts)); - - gulp.src([paths.build.scripts + swiper.filename + '.jquery.js']) - .pipe(gulp.dest(paths.dist.scripts)) - .pipe(sourcemaps.init()) - .pipe(uglify()) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) - .pipe(rename(function(path) { - path.basename = swiper.filename + '.jquery.min'; - })) - .pipe(sourcemaps.write('./maps')) - .pipe(gulp.dest(paths.dist.scripts)); - - gulp.src([paths.build.scripts + swiper.filename + '.jquery.umd.js']) - .pipe(gulp.dest(paths.dist.scripts)) - .pipe(sourcemaps.init()) - .pipe(uglify()) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) - .pipe(rename(function(path) { - path.basename = swiper.filename + '.jquery.umd.min'; - })) - .pipe(sourcemaps.write('./maps')) - .pipe(gulp.dest(paths.dist.scripts)); - - gulp.src(paths.build.styles + '*.css') - .pipe(gulp.dest(paths.dist.styles)) - .pipe(cleanCSS({ - advanced: false, - aggressiveMerging: false, - })) - .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date })) - .pipe(rename(function(path) { - path.basename = swiper.filename + '.min'; - })) - .pipe(gulp.dest(paths.dist.styles)); - }); - - /* ================================= - Custom Build - ================================= */ - gulp.task('custom', function () { - var modules = process.argv.slice(3); - modules = modules.toString(); - if (modules === '') { - modules = []; - } - else { - modules = modules.substring(1).replace(/ /g, '').replace(/,,/g, ','); - modules = modules.split(','); - } - var modulesJs = [], modulesLess = []; - var i, module; - modulesJs.push.apply(modulesJs, swiper.modules.core_intro.js); - modulesLess.push.apply(modulesLess, swiper.modules.core_intro.less); - - for (i = 0; i < modules.length; i++) { - module = swiper.modules[modules[i]]; - if (!(module)) continue; - - if (module.dependencies && module.dependencies.length > 0) { - modules.push.apply(modules, module.dependencies); - } - if (module.js.length > 0) { - modulesJs.push.apply(modulesJs, module.js); - } - if (module.less && module.less.length > 0) { - modulesLess.push.apply(modulesLess, module.less); - } - } - modulesJs.push.apply(modulesJs, swiper.modules.core_outro.js); - modulesLess.push.apply(modulesLess, swiper.modules.core_outro.less); - - // Unique - var customJsList = []; - var customLessList = []; - for (i = 0; i < modulesJs.length; i++) { - if (customJsList.indexOf(modulesJs[i]) < 0) customJsList.push(modulesJs[i]); - } - for (i = 0; i < modulesLess.length; i++) { - if (customLessList.indexOf(modulesLess[i]) < 0) customLessList.push(modulesLess[i]); - } - - // JS - gulp.src(customJsList) - .pipe(tap(function (file, t){ - addJSIndent (file, t); - })) - .pipe(concat(swiper.filename + '.custom.js')) - .pipe(header(swiper.customBanner, { pkg : swiper.pkg, date: swiper.date, modulesList: modules.join(',') } )) - .pipe(jshint()) - .pipe(jshint.reporter(stylish)) - .pipe(gulp.dest(paths.custom.scripts)) - - .pipe(uglify()) - .pipe(header(swiper.customBanner, { pkg : swiper.pkg, date: swiper.date, modulesList: modules.join(',') })) - .pipe(rename(function(path) { - path.basename = path.basename + '.min'; - })) - .pipe(gulp.dest(paths.custom.scripts)); - - // CSSes - gulp.src(customLessList) - .pipe(concat(swiper.filename + '.custom.less')) - .pipe(less({ - paths: [ path.join(__dirname, 'less', 'includes') ] - })) - .pipe(header(swiper.customBanner, { pkg : swiper.pkg, date: swiper.date, modulesList: modules.join(',') } )) - .pipe(gulp.dest(paths.custom.styles)) - - .pipe(cleanCSS({ - advanced: false, - aggressiveMerging: false - })) - .pipe(header(swiper.customBanner, { pkg : swiper.pkg, date: swiper.date, modulesList: modules.join(',') })) - .pipe(rename(function(path) { - path.basename = path.basename + '.min'; - })) - .pipe(gulp.dest(paths.custom.styles)); - }); - - gulp.task('watch', function () { - gulp.watch(paths.source.scripts, [ 'scripts' ]); - gulp.watch(paths.source.styles + '*.less', [ 'styles' ]); - }); - - gulp.task('connect', function () { - return connect.server({ - root: [ paths.root ], - livereload: true, - port:'3000' - }); - }); - - gulp.task('open', function () { - return gulp.src(paths.playground.root + 'index.html').pipe(open({ uri: 'http://localhost:3000/' + paths.playground.root + 'index.html'})); - }); - - gulp.task('server', [ 'watch', 'connect', 'open' ]); - - gulp.task('default', [ 'server' ]); -})(); \ No newline at end of file +require('./scripts/gulpfile'); diff --git a/package.json b/package.json index 6f6da0bc1..b00251425 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,17 @@ { "name": "swiper", - "version": "3.4.2", + "version": "4.0.0-beta.1", "description": "Most modern mobile touch slider and framework with hardware accelerated transitions", "main": "dist/js/swiper.js", - "style": "dist/css/swiper.css", + "jsnext:main": "dist/js/swiper.module.js", + "module": "dist/js/swiper.module.js", + "scripts": { + "build": "NODE_ENV=development gulp build", + "dist": "NODE_ENV=production gulp build", + "dev": "NODE_ENV=development gulp build && NODE_ENV=development gulp ks && gulp server", + "prod": "NODE_ENV=production gulp ks && gulp server", + "test": "npm run build" + }, "files": [ "dist", "src", @@ -38,22 +46,28 @@ "node": ">= 4.7.0" }, "devDependencies": { + "eslint": "^4.5.0", + "eslint-config-airbnb-base": "^11.3.1", + "eslint-plugin-import": "^2.7.0", "gulp": "^3.9.1", - "gulp-clean-css": "^2.4.0", - "gulp-concat": "^2.6.1", + "gulp-autoprefixer": "^4.0.0", + "gulp-clean-css": "^3.7.0", "gulp-connect": "^5.0.0", - "gulp-header": "^1.8.8", - "gulp-jshint": "^2.0.4", - "gulp-less": "^3.3.0", + "gulp-header": "^1.8.9", + "gulp-less": "^3.3.2", + "gulp-modify-file": "^0.1.0", "gulp-open": "^2.0.0", "gulp-rename": "^1.2.2", - "gulp-sourcemaps": "^2.4.1", - "gulp-tap": "^0.1.3", - "gulp-uglify": "^2.1.0", - "jshint": "^2.9.4", - "jshint-stylish": "^2.2.1" + "gulp-sourcemaps": "^2.6.1", + "gulp-uglify": "^3.0.0", + "rollup-plugin-buble": "^0.15.0", + "rollup-plugin-node-resolve": "^3.0.0", + "rollup-plugin-replace": "^1.1.1", + "rollup-stream": "^1.23.1", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0" }, - "scripts": { - "test": "gulp build" + "dependencies": { + "dom7": "^1.6.4" } } diff --git a/scripts/banner.js b/scripts/banner.js new file mode 100644 index 000000000..36edefda5 --- /dev/null +++ b/scripts/banner.js @@ -0,0 +1,21 @@ +const pkg = require('../package.json'); + +const releaseDate = { + day: new Date().getDate(), + month: ('January February March April May June July August September October November December').split(' ')[new Date().getMonth()], + year: new Date().getFullYear(), +}; + +module.exports = `${` +/** + * Swiper ${pkg.version} + * ${pkg.description} + * ${pkg.homepage} + * + * Copyright 2014-${releaseDate.year} ${pkg.author} + * + * Released under the ${pkg.license} License + * + * Released on: ${releaseDate.month} ${releaseDate.day}, ${releaseDate.year} + */ +`.trim()}\n`; diff --git a/scripts/build-js.js b/scripts/build-js.js new file mode 100644 index 000000000..592f0e529 --- /dev/null +++ b/scripts/build-js.js @@ -0,0 +1,112 @@ +/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */ +/* eslint no-console: "off" */ + +const gulp = require('gulp'); +const fs = require('fs'); +const rollup = require('rollup-stream'); +const buble = require('rollup-plugin-buble'); +const source = require('vinyl-source-stream'); +const buffer = require('vinyl-buffer'); +const replace = require('rollup-plugin-replace'); +const resolve = require('rollup-plugin-node-resolve'); +const header = require('gulp-header'); +const uglify = require('gulp-uglify'); +const sourcemaps = require('gulp-sourcemaps'); +const rename = require('gulp-rename'); + +const config = require('./config.js'); +const banner = require('./banner.js'); + +function es(cb) { + const env = process.env.NODE_ENV || 'development'; + rollup({ + entry: './src/swiper.js', + plugins: [ + replace({ + 'process.env.NODE_ENV': JSON.stringify(env), // or 'production' + }), + buble(), + ], + format: 'es', + moduleName: 'Swiper', + useStrict: true, + sourceMap: false, + }) + .on('error', (err) => { + if (cb) cb(); + console.log(err.toString()); + }) + .pipe(source('swiper.js', './src')) + .pipe(buffer()) + .pipe(header(banner)) + .pipe(rename('swiper.module.js')) + .pipe(gulp.dest(`./${env === 'development' ? 'build' : 'dist'}/js/`)) + .on('end', () => { + if (cb) cb(); + }); +} +function umd(cb) { + const env = process.env.NODE_ENV || 'development'; + rollup({ + entry: './src/swiper.js', + plugins: [ + replace({ + 'process.env.NODE_ENV': JSON.stringify(env), // or 'production' + }), + resolve({ jsnext: true }), + buble(), + ], + format: 'umd', + moduleName: 'Swiper', + useStrict: true, + sourceMap: env === 'development', + }) + .on('error', (err) => { + if (cb) cb(); + console.log(err.toString()); + }) + .pipe(source('swiper.js', './src')) + .pipe(buffer()) + .pipe(header(banner)) + .pipe(gulp.dest(`./${env === 'development' ? 'build' : 'dist'}/js/`)) + .on('end', () => { + if (env === 'development') { + if (cb) cb(); + return; + } + // Minified version + gulp.src('./dist/js/swiper.js') + .pipe(sourcemaps.init()) + .pipe(uglify()) + .pipe(header(banner)) + .pipe(rename((filePath) => { + /* eslint no-param-reassign: ["error", { "props": false }] */ + filePath.basename += '.min'; + })) + .pipe(sourcemaps.write('./')) + .pipe(gulp.dest('./dist/js/')) + .on('end', () => { + cb(); + }); + }); +} +function build(cb) { + const env = process.env.NODE_ENV || 'development'; + + const expectCbs = env === 'development' ? 1 : 2; + let cbs = 0; + + umd(() => { + cbs += 1; + if (cbs === expectCbs) cb(); + }); + + if (env === 'production') { + es(() => { + cbs += 1; + if (cbs === expectCbs) cb(); + }); + } +} + +module.exports = build; diff --git a/scripts/build-less.js b/scripts/build-less.js new file mode 100644 index 000000000..0700224fc --- /dev/null +++ b/scripts/build-less.js @@ -0,0 +1,57 @@ +/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */ +/* eslint no-console: "off" */ + +const gulp = require('gulp'); +const fs = require('fs'); +const modifyFile = require('gulp-modify-file'); +const less = require('gulp-less'); +const autoprefixer = require('gulp-autoprefixer'); +const header = require('gulp-header'); +const rename = require('gulp-rename'); +const cleanCSS = require('gulp-clean-css'); + +const config = require('./config.js'); +const banner = require('./banner.js'); + +function build(cb, buildTheme) { + const env = process.env.NODE_ENV || 'development'; + + gulp.src('./src/swiper.less') + .pipe(less()) + .on('error', (err) => { + if (cb) cb(); + console.log(err.toString()); + }) + .pipe(autoprefixer({ + cascade: false, + })) + .on('error', (err) => { + if (cb) cb(); + console.log(err.toString()); + }) + .pipe(header(banner)) + .pipe(gulp.dest(`./${env === 'development' ? 'build' : 'dist'}/css/`)) + .on('end', () => { + if (env === 'development') { + if (cb) cb(); + return; + } + gulp.src('./dist/css/swiper.css') + .pipe(cleanCSS({ + advanced: false, + aggressiveMerging: false, + })) + .pipe(header(banner)) + .pipe(rename((filePath) => { + /* eslint no-param-reassign: ["error", { "props": false }] */ + filePath.basename += '.min'; + })) + .pipe(gulp.dest('./dist/css/')) + .on('end', () => { + if (cb) cb(); + return; + }); + }); +} + +module.exports = build; diff --git a/scripts/config.js b/scripts/config.js new file mode 100644 index 000000000..f053ebf79 --- /dev/null +++ b/scripts/config.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/scripts/gulpfile.js b/scripts/gulpfile.js new file mode 100644 index 000000000..9ea8cfa95 --- /dev/null +++ b/scripts/gulpfile.js @@ -0,0 +1,59 @@ +/* eslint no-console: ["error", { allow: ["log"] }] */ +const gulp = require('gulp'); +const connect = require('gulp-connect'); +const gopen = require('gulp-open'); +const fs = require('fs'); +const modifyFile = require('gulp-modify-file'); + +const buildJs = require('./build-js.js'); +const buildLess = require('./build-less.js'); + +// Tasks +gulp.task('playground', (cb) => { + const env = process.env.NODE_ENV || 'development'; + gulp.src('./playground/index.html') + .pipe(modifyFile((content) => { + if (env === 'development') { + return content + .replace('../dist/css/swiper.min.css', '../build/css/swiper.css') + .replace('../dist/js/swiper.min.js', '../build/js/swiper.js'); + } + return content + .replace('../build/css/swiper.css', '../dist/css/swiper.min.css') + .replace('../build/js/swiper.js', '../dist/js/swiper.min.js'); + })) + .pipe(gulp.dest('./playground/')) + .on('end', () => { + if (cb) cb(); + }); +}); +gulp.task('js', (cb) => { + buildJs(cb); +}); + +gulp.task('less', (cb) => { + buildLess(cb); +}); + +gulp.task('build', ['js', 'less']); + +gulp.task('watch', () => { + gulp.watch('./src/**/**/*.js', ['js']); + gulp.watch('./src/**/**/*.less', ['less']); +}); + +gulp.task('connect', () => { + connect.server({ + root: ['./'], + livereload: true, + port: '3000', + }); +}); + +gulp.task('open', () => { + gulp.src('./playground/index.html').pipe(gopen({ uri: 'http://localhost:3000/playground/' })); +}); + +gulp.task('server', ['watch', 'connect', 'open']); + +gulp.task('default', ['server']); diff --git a/src/modules/browser/browser.js b/src/modules/browser/browser.js new file mode 100644 index 000000000..24754255a --- /dev/null +++ b/src/modules/browser/browser.js @@ -0,0 +1,11 @@ +import Browser from '../../utils/browser'; + +export default { + name: 'browser', + proto: { + browser: Browser, + }, + static: { + Browser, + }, +}; diff --git a/src/modules/core/core-class.js b/src/modules/core/core-class.js new file mode 100644 index 000000000..e1781ee76 --- /dev/null +++ b/src/modules/core/core-class.js @@ -0,0 +1,51 @@ +import Utils from '../../utils/utils'; +import SwiperClass from '../../utils/class'; + +class Swiper extends SwiperClass { + constructor(params) { + super(params); + + // App Instance + const swiper = this; + + // Default + const defaults = { + root: 'body', + theme: 'auto', + init: true, + routes: [], + }; + + // Extend defaults with modules params + swiper.useModulesParams(defaults); + + // Extend defaults with passed params + swiper.params = Utils.extend(defaults, params); + + + // Install Modules + swiper.useModules(); + + // Init + if (swiper.params.init) { + swiper.init(); + } + + // Return app instance + return swiper; + } + init() { + const swiper = this; + if (swiper.initialized) return; + + swiper.initialized = true; + swiper.emit('init'); + } + static Class(...args) { + return new SwiperClass(...args); + } +} + +Swiper.Class = SwiperClass; + +export default Swiper; diff --git a/src/modules/core/core.less b/src/modules/core/core.less new file mode 100644 index 000000000..e69de29bb diff --git a/src/modules/device/device.js b/src/modules/device/device.js new file mode 100644 index 000000000..bb3a29b4c --- /dev/null +++ b/src/modules/device/device.js @@ -0,0 +1,11 @@ +import Device from '../../utils/device'; + +export default { + name: 'device', + proto: { + device: Device, + }, + static: { + Device, + }, +}; diff --git a/src/modules/keyboard/keyboard.js b/src/modules/keyboard/keyboard.js new file mode 100644 index 000000000..a41b35bbf --- /dev/null +++ b/src/modules/keyboard/keyboard.js @@ -0,0 +1,101 @@ +import $ from 'dom7'; +import Utils from '../../utils/utils'; + + +const Keyboard = { + bound: false, + handle(event) { + const swiper = this; + let e = event; + if (e.originalEvent) e = e.originalEvent; // jquery fix + const kc = e.keyCode || e.charCode; + // Directions locks + if (!swiper.params.allowSwipeToNext && (swiper.isHorizontal() && kc === 39 || !swiper.isHorizontal() && kc === 40)) { + return false; + } + if (!swiper.params.allowSwipeToPrev && (swiper.isHorizontal() && kc === 37 || !swiper.isHorizontal() && kc === 38)) { + return false; + } + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return undefined; + } + if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { + return undefined; + } + if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { + let inView = false; + // Check that swiper should be inside of visible area of window + if (swiper.container.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.container.parents(`.${swiper.params.slideActiveClass}`).length === 0) { + return undefined; + } + const windowScroll = { + left: window.pageXOffset, + top: window.pageYOffset, + }; + const windowWidth = window.innerWidth; + const windowHeight = window.innerHeight; + const swiperOffset = swiper.container.offset(); + if (swiper.rtl) swiperOffset.left -= swiper.container[0].scrollLeft; + const 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], + ]; + for (let i = 0; i < swiperCoord.length; i += 1) { + const point = swiperCoord[i]; + if ( + point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && + point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight + ) { + inView = true; + } + } + if (!inView) return undefined; + } + if (swiper.isHorizontal()) { + if (kc === 37 || kc === 39) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if ((kc === 39 && !swiper.rtl) || (kc === 37 && swiper.rtl)) swiper.slideNext(); + if ((kc === 37 && !swiper.rtl) || (kc === 39 && swiper.rtl)) swiper.slidePrev(); + } else { + if (kc === 38 || kc === 40) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if (kc === 40) swiper.slideNext(); + if (kc === 38) swiper.slidePrev(); + } + swiper.emit('keyPress', kc); + return undefined; + }, + enable() { + const swiper = this; + if (!Keyboard.bound) { + Keyboard.bound = true; + Keyboard.handle = Keyboard.handle.bind(swiper); + } + $(document).on('keydown', Keyboard.handle); + }, + disable() { + $(document).off('keydown', Keyboard.handle); + }, +}; + +export default { + name: 'keyboard', + params: { + keyboard: false, + }, + create() { + const swiper = this; + Utils.extend(swiper, { + keyboard: { + enable: Keyboard.enable.bind(swiper), + disable: Keyboard.disable.bind(swiper), + }, + }); + }, +}; diff --git a/src/modules/support/support.js b/src/modules/support/support.js new file mode 100644 index 000000000..d4ee48f4a --- /dev/null +++ b/src/modules/support/support.js @@ -0,0 +1,11 @@ +import Support from '../../utils/support'; + +export default { + name: 'support', + proto: { + support: Support, + }, + static: { + Support, + }, +}; diff --git a/src/swiper.js b/src/swiper.js new file mode 100644 index 000000000..dee031531 --- /dev/null +++ b/src/swiper.js @@ -0,0 +1,19 @@ +// F7 Class +import Swiper from './modules/core/core-class'; + +// Import Modules +import Device from './modules/device/device'; +import Support from './modules/support/support'; +import Browser from './modules/browser/browser'; + +import Keyboard from './modules/keyboard/keyboard'; + +// Install Modules +Swiper + .use(Device) + .use(Support) + .use(Browser) + + .use(Keyboard); + +export default Swiper; diff --git a/src/swiper.less b/src/swiper.less new file mode 100644 index 000000000..0161ae6b4 --- /dev/null +++ b/src/swiper.less @@ -0,0 +1 @@ +@import url('./modules/core/core.less'); diff --git a/src/utils/browser.js b/src/utils/browser.js new file mode 100644 index 000000000..267c33754 --- /dev/null +++ b/src/utils/browser.js @@ -0,0 +1,24 @@ +function Browser() { + function isIE9() { + // create temporary DIV + const div = document.createElement('div'); + // add content to tmp DIV which is wrapped into the IE HTML conditional statement + div.innerHTML = ''; + // return true / false value based on what will browser render + return div.getElementsByTagName('i').length === 1; + } + function isSafari() { + const ua = window.navigator.userAgent.toLowerCase(); + return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); + } + return { + isSafari: isSafari(), + isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent), + ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, + ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || + (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1), + lteIE9: isIE9(), + }; +} + +export default Browser(); diff --git a/src/utils/class.js b/src/utils/class.js new file mode 100644 index 000000000..54349925e --- /dev/null +++ b/src/utils/class.js @@ -0,0 +1,154 @@ +import Utils from './utils'; + +class SwiperClass { + constructor(params = {}, parents = []) { + const self = this; + self.params = params; + + // Events + self.eventsParents = parents; + self.eventsListeners = {}; + + if (self.params && self.params.on) { + Object.keys(self.params.on).forEach((eventName) => { + self.on(eventName, self.params.on[eventName]); + }); + } + } + on(events, handler) { + const self = this; + events.split(' ').forEach((event) => { + if (!self.eventsListeners[event]) self.eventsListeners[event] = []; + self.eventsListeners[event].push(handler); + }); + return self; + } + once(events, handler) { + const self = this; + function onceHandler(...args) { + handler.apply(self, args); + self.off(events, onceHandler); + } + return self.on(events, onceHandler); + } + off(events, handler) { + const self = this; + events.split(' ').forEach((event) => { + if (typeof handler === 'undefined') { + self.eventsListeners[event] = []; + } else { + self.eventsListeners[event].forEach((eventHandler, index) => { + if (eventHandler === handler) { + self.eventsListeners[event].splice(index, 1); + } + }); + } + }); + return self; + } + emit(...args) { + const self = this; + let events; + let data; + let context; + let eventsParents; + if (typeof args[0] === 'string' || Array.isArray(args[0])) { + events = args[0]; + data = args.slice(1, args.length); + context = self; + eventsParents = self.eventsParents; + } else { + events = args[0].events; + data = args[0].data; + context = args[0].context || self; + eventsParents = args[0].local ? [] : args[0].parents || self.eventsParents; + } + const eventsArray = Array.isArray(events) ? events : events.split(' '); + eventsArray.forEach((event) => { + if (self.eventsListeners[event]) { + self.eventsListeners[event].forEach((eventHandler) => { + eventHandler.apply(context, data); + }); + } + }); + if (eventsParents && eventsParents.length > 0) { + eventsParents.forEach((eventsParent) => { + eventsParent.emit(events, ...data); + }); + } + return self; + } + useModulesParams(instanceParams) { + const instance = this; + if (!instance.modules) return; + Object.keys(instance.modules).forEach((moduleName) => { + const module = instance.modules[moduleName]; + // Extend params + if (module.params) { + Utils.extend(instanceParams, module.params); + } + }); + } + useModules(modulesParams = {}) { + const instance = this; + if (!instance.modules) return; + Object.keys(instance.modules).forEach((moduleName) => { + const module = instance.modules[moduleName]; + const moduleParams = modulesParams[moduleName] || {}; + // Extend instance methods and props + if (module.instance) { + Object.keys(module.instance).forEach((modulePropName) => { + const moduleProp = module.instance[modulePropName]; + if (typeof moduleProp === 'function') { + instance[modulePropName] = moduleProp.bind(instance); + } else { + instance[modulePropName] = moduleProp; + } + }); + } + // Add event listeners + if (module.on && instance.on) { + Object.keys(module.on).forEach((moduleEventName) => { + instance.on(moduleEventName, module.on[moduleEventName]); + }); + } + + // Module create callback + if (module.create) { + module.create.bind(instance)(moduleParams); + } + }); + } + static installModule(module, ...params) { + const Class = this; + if (!Class.prototype.modules) Class.prototype.modules = {}; + const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`); + Class.prototype.modules[name] = module; + // Prototype + if (module.proto) { + Object.keys(module.proto).forEach((key) => { + Class.prototype[key] = module.proto[key]; + }); + } + // Class + if (module.static) { + Object.keys(module.static).forEach((key) => { + Class[key] = module.static[key]; + }); + } + // Callback + if (module.install) { + module.install.apply(Class, params); + } + return Class; + } + static use(module, ...params) { + const Class = this; + if (Array.isArray(module)) { + module.forEach(m => Class.installModule(m)); + } + return Class.installModule(module, ...params); + } +} + +export default SwiperClass; diff --git a/src/utils/device.js b/src/utils/device.js new file mode 100644 index 000000000..74e90caec --- /dev/null +++ b/src/utils/device.js @@ -0,0 +1,85 @@ +function Device() { + const ua = window.navigator.userAgent; + + const device = { + ios: false, + android: false, + androidChrome: false, + desktop: false, + windows: false, + iphone: false, + ipod: false, + ipad: false, + cordova: window.cordova || window.phonegap, + phonegap: window.cordova || window.phonegap, + }; + + const windows = ua.match(/(Windows Phone);?[\s\/]+([\d.]+)?/); + const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); + const ipad = ua.match(/(iPad).*OS\s([\d_]+)/); + const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); + const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); + + + // Windows + if (windows) { + device.os = 'windows'; + device.osVersion = windows[2]; + device.windows = true; + } + // Android + if (android && !windows) { + device.os = 'android'; + device.osVersion = android[2]; + device.android = true; + device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0; + } + if (ipad || iphone || ipod) { + device.os = 'ios'; + device.ios = true; + } + // iOS + if (iphone && !ipod) { + device.osVersion = iphone[2].replace(/_/g, '.'); + device.iphone = true; + } + if (ipad) { + device.osVersion = ipad[2].replace(/_/g, '.'); + device.ipad = true; + } + if (ipod) { + device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null; + device.iphone = true; + } + // iOS 8+ changed UA + if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) { + if (device.osVersion.split('.')[0] === '10') { + device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0]; + } + } + + // Desktop + device.desktop = !(device.os || device.android || device.webView); + + // Webview + device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i); + + // Minimal UI + if (device.os && device.os === 'ios') { + const osVersionArr = device.osVersion.split('.'); + const metaViewport = document.querySelector('meta[name="viewport"]'); + device.minimalUi = + !device.webView && + (ipod || iphone) && + (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) && + metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0; + } + + // Pixel Ratio + device.pixelRatio = window.devicePixelRatio || 1; + + // Export object + return device; +} + +export default Device(); diff --git a/src/utils/support.js b/src/utils/support.js new file mode 100644 index 000000000..d3ff678f0 --- /dev/null +++ b/src/utils/support.js @@ -0,0 +1,45 @@ +function Support() { + return { + touch: (window.Modernizr && Modernizr.touch === true) || (function checkTouch() { + return !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)); + }()), + + transforms3d: (window.Modernizr && Modernizr.csstransforms3d === true) || (function checkTransforms3d() { + const div = document.createElement('div').style; + return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); + }()), + + flexbox: (function checkFlexbox() { + const div = document.createElement('div').style; + const styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); + for (let i = 0; i < styles.length; i += 1) { + if (styles[i] in div) return true; + } + return false; + }()), + + observer: (function checkObserver() { + return ('MutationObserver' in window || 'WebkitMutationObserver' in window); + }()), + + passiveListener: (function checkPassiveListener() { + let supportsPassive = false; + try { + const opts = Object.defineProperty({}, 'passive', { + get() { + supportsPassive = true; + }, + }); + window.addEventListener('testPassiveListener', null, opts); + } catch (e) { + // No support + } + return supportsPassive; + }()), + + gestures: (function checkGestures() { + return 'ongesturestart' in window; + }()), + }; +} +export default Support(); diff --git a/src/utils/utils.js b/src/utils/utils.js new file mode 100644 index 000000000..21afdf7cd --- /dev/null +++ b/src/utils/utils.js @@ -0,0 +1,113 @@ +const Utils = { + deleteProps(obj) { + const object = obj; + Object.keys(object).forEach((key) => { + object[key] = null; + delete object[key]; + }); + }, + nextTick(callback, delay = 0) { + return setTimeout(callback, delay); + }, + nextFrame(callback) { + if (window.requestAnimationFrame) return window.requestAnimationFrame(callback); + else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback); + return window.setTimeout(callback, 1000 / 60); + }, + now() { + return Date.now(); + }, + promise(handler) { + let resolved = false; + let rejected = false; + let resolveArgs; + let rejectArgs; + const promiseHandlers = { + then: undefined, + catch: undefined, + }; + const promise = { + then(thenHandler) { + if (resolved) { + thenHandler(...resolveArgs); + } else { + promiseHandlers.then = thenHandler; + } + return promise; + }, + catch(catchHandler) { + if (rejected) { + catchHandler(...rejectArgs); + } else { + promiseHandlers.catch = catchHandler; + } + return promise; + }, + }; + + function resolve(...args) { + resolved = true; + if (promiseHandlers.then) promiseHandlers.then(...args); + else resolveArgs = args; + } + function reject(...args) { + rejected = true; + if (promiseHandlers.catch) promiseHandlers.catch(...args); + else rejectArgs = args; + } + handler(resolve, reject); + + return promise; + }, + requestAnimationFrame(callback) { + if (window.requestAnimationFrame) return window.requestAnimationFrame(callback); + else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback); + return window.setTimeout(callback, 1000 / 60); + }, + cancelAnimationFrame(id) { + if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id); + else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id); + return window.clearTimeout(id); + }, + parseUrlQuery(url) { + const query = {}; + let urlToParse = url || window.location.href; + let i; + let params; + let param; + let length; + if (typeof urlToParse === 'string' && urlToParse.length) { + urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : ''; + params = urlToParse.split('&').filter(paramsPart => paramsPart !== ''); + length = params.length; + + for (i = 0; i < length; i += 1) { + param = params[i].replace(/#\S+/g, '').split('='); + query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || ''; + } + } + return query; + }, + extend(...args) { + const to = Object(args[0]); + for (let i = 1; i < args.length; i += 1) { + const nextSource = args[i]; + if (nextSource !== undefined && nextSource !== null) { + const keysArray = Object.keys(Object(nextSource)); + for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { + const nextKey = keysArray[nextIndex]; + const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); + if (desc !== undefined && desc.enumerable) { + if (typeof to[nextKey] === 'object' && typeof nextSource[nextKey] === 'object') { + Utils.extend(to[nextKey], nextSource[nextKey]); + } else { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + } + return to; + }, +}; +export default Utils;