From 51ae6a3730bfcd22c6cae39203d65e19eb5db9a3 Mon Sep 17 00:00:00 2001 From: liuqimichale <123456lq> Date: Thu, 20 Sep 2018 16:25:41 +0800 Subject: [PATCH] header --- css/swiper.css | 664 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ img/swiper-slide-1.png | Bin 0 -> 1347518 bytes img/swiper-slide-2.png | Bin 0 -> 254908 bytes img/swiper-slide-3.png | Bin 0 -> 848231 bytes img/swiper-slide-main-2.png | Bin 0 -> 150981 bytes img/swiper-slide-main-3.png | Bin 0 -> 101085 bytes index.html | 92 +++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------- js/main.js | 18 ++++++++++++++++++ js/swiper.js | 7975 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ style.css | 12 ++++++++++++ 10 files changed, 8716 insertions(+), 45 deletions(-) create mode 100755 css/swiper.css create mode 100755 img/swiper-slide-1.png create mode 100755 img/swiper-slide-2.png create mode 100755 img/swiper-slide-3.png create mode 100755 img/swiper-slide-main-2.png create mode 100755 img/swiper-slide-main-3.png create mode 100755 js/swiper.js diff --git a/css/swiper.css b/css/swiper.css new file mode 100755 index 0000000..04416a9 --- /dev/null +++ b/css/swiper.css @@ -0,0 +1,664 @@ +/** + * Swiper 4.4.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2018 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: September 14, 2018 + */ +.swiper-container { + margin: 0 auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + /* Fix of Webkit flickering */ + z-index: 1; +} +.swiper-slide-main{ + width: 1200px; + height: 100%; + margin: 0 auto; +} +.swiper-container-no-flexbox .swiper-slide { + float: left; +} +.swiper-slide-1{ + background: url("../img/swiper-slide-1.png") no-repeat; + background-size:100% 100% ; +} + +.swiper-slide-2{ + background: url("../img/swiper-slide-2.png") no-repeat; + background-size:100% 100% ; +} +.swiper-slide-main-2{ + background: url("../img/swiper-slide-main-2.png") no-repeat center right; +} + +.swiper-slide-3{ + background: url("../img/swiper-slide-3.png") no-repeat; + background-size:100% 100% ; +} +.swiper-slide-main-3{ + background: url("../img/swiper-slide-main-3.png") no-repeat center right; +} +.swiper-slide-large{ + padding-top: 208px; + margin: 0 0 25px 0; + font-size: 44px; + color: #fff; +} +.swiper-slide-middle{ + margin-bottom: 37px; + font-size: 24px; + color: #fff; +} +.swiper-slide-more{ + width:92px; + height:32px; + line-height: 32px; + text-align: center; + font-size: 14px; + color: #fff; + border: 1px solid rgba(255,255,255,.5); + border-radius: 2px; +} +.swiper-container-vertical > .swiper-wrapper { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-transition-property: -webkit-transform; + transition-property: -webkit-transform; + -o-transition-property: transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +.swiper-container-android .swiper-slide, +.swiper-wrapper { + -webkit-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); +} +.swiper-container-multirow > .swiper-wrapper { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.swiper-container-free-mode > .swiper-wrapper { + -webkit-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-negative: 0; + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + -webkit-transition-property: -webkit-transform; + transition-property: -webkit-transform; + -o-transition-property: transform; + transition-property: transform; + transition-property: transform, -webkit-transform; +} +.swiper-slide-invisible-blank { + visibility: hidden; +} +/* Auto Height */ +.swiper-container-autoheight, +.swiper-container-autoheight .swiper-slide { + height: auto; +} +.swiper-container-autoheight .swiper-wrapper { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-transition-property: height, -webkit-transform; + transition-property: height, -webkit-transform; + -o-transition-property: transform, height; + transition-property: transform, height; + transition-property: transform, height, -webkit-transform; +} +/* 3D Effects */ +.swiper-container-3d { + -webkit-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; + 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, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +.swiper-container-3d .swiper-slide-shadow-right { + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +.swiper-container-3d .swiper-slide-shadow-top { + background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +.swiper-container-3d .swiper-slide-shadow-bottom { + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +/* IE10 Windows Phone 8 Fixes */ +.swiper-container-wp8-horizontal, +.swiper-container-wp8-horizontal > .swiper-wrapper { + -ms-touch-action: pan-y; + touch-action: pan-y; +} +.swiper-container-wp8-vertical, +.swiper-container-wp8-vertical > .swiper-wrapper { + -ms-touch-action: pan-x; + touch-action: pan-x; +} +.swiper-button-prev, +.swiper-button-next { + position: absolute; + top: 50%; + width: 27px; + height: 44px; + margin-top: -22px; + z-index: 10; + cursor: pointer; + 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-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-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-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-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-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-lock { + display: none; +} +.swiper-pagination { + position: absolute; + text-align: center; + -webkit-transition: 300ms opacity; + -o-transition: 300ms opacity; + transition: 300ms opacity; + -webkit-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-bullets-dynamic { + overflow: hidden; + font-size: 0; +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + -webkit-transform: scale(0.33); + -ms-transform: scale(0.33); + transform: scale(0.33); + position: relative; +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { + -webkit-transform: scale(0.66); + -ms-transform: scale(0.66); + transform: scale(0.66); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { + -webkit-transform: scale(0.33); + -ms-transform: scale(0.33); + transform: scale(0.33); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { + -webkit-transform: scale(0.66); + -ms-transform: scale(0.66); + transform: scale(0.66); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { + -webkit-transform: scale(0.33); + -ms-transform: scale(0.33); + transform: scale(0.33); +} +.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; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} +.swiper-pagination-bullet-active { + opacity: 1; + background: #007aff; +} +.swiper-container-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + -webkit-transform: translate3d(0px, -50%, 0); + transform: translate3d(0px, -50%, 0); +} +.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 6px 0; + display: block; +} +.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 8px; +} +.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + display: inline-block; + -webkit-transition: 200ms top, 200ms -webkit-transform; + transition: 200ms top, 200ms -webkit-transform; + -o-transition: 200ms transform, 200ms top; + transition: 200ms transform, 200ms top; + transition: 200ms transform, 200ms top, 200ms -webkit-transform; +} +.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 4px; +} +.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + left: 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + white-space: nowrap; +} +.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + -webkit-transition: 200ms left, 200ms -webkit-transform; + transition: 200ms left, 200ms -webkit-transform; + -o-transition: 200ms transform, 200ms left; + transition: 200ms transform, 200ms left; + transition: 200ms transform, 200ms left, 200ms -webkit-transform; +} +.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + -webkit-transition: 200ms right, 200ms -webkit-transform; + transition: 200ms right, 200ms -webkit-transform; + -o-transition: 200ms transform, 200ms right; + transition: 200ms transform, 200ms right; + transition: 200ms transform, 200ms right, 200ms -webkit-transform; +} +/* Progress */ +.swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; +} +.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: #007aff; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; +} +.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + -webkit-transform-origin: right top; + -ms-transform-origin: right top; + transform-origin: right top; +} +.swiper-container-horizontal > .swiper-pagination-progressbar, +.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 100%; + height: 4px; + left: 0; + top: 0; +} +.swiper-container-vertical > .swiper-pagination-progressbar, +.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 4px; + height: 100%; + left: 0; + top: 0; +} +.swiper-pagination-white .swiper-pagination-bullet-active { + background: #ffffff; +} +.swiper-pagination-progressbar.swiper-pagination-white { + background: rgba(255, 255, 255, 0.25); +} +.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill { + background: #ffffff; +} +.swiper-pagination-black .swiper-pagination-bullet-active { + background: #000000; +} +.swiper-pagination-progressbar.swiper-pagination-black { + background: rgba(0, 0, 0, 0.25); +} +.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill { + background: #000000; +} +.swiper-pagination-lock { + display: none; +} +/* 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; +} +.swiper-scrollbar-lock { + display: none; +} +.swiper-zoom-container { + width: 100%; + height: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: 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%; + -o-object-fit: contain; + object-fit: contain; +} +.swiper-slide-zoomed { + 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%; + -ms-transform-origin: 50%; + transform-origin: 50%; + -webkit-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%; + 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); + transform: rotate(360deg); + } +} +@keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +/* a11y */ +.swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} +.swiper-container-fade.swiper-container-free-mode .swiper-slide { + -webkit-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; + -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-container-cube { + overflow: visible; +} +.swiper-container-cube .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; + visibility: hidden; + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + width: 100%; + height: 100%; +} +.swiper-container-cube .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-cube.swiper-container-rtl .swiper-slide { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + transform-origin: 100% 0; +} +.swiper-container-cube .swiper-slide-active, +.swiper-container-cube .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.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-slide-shadow-top, +.swiper-container-cube .swiper-slide-shadow-bottom, +.swiper-container-cube .swiper-slide-shadow-left, +.swiper-container-cube .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.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; +} +.swiper-container-flip { + overflow: visible; +} +.swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} +.swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-flip .swiper-slide-active, +.swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-container-flip .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 { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.swiper-container-coverflow .swiper-wrapper { + /* Windows 8 IE 10 fix */ + -ms-perspective: 1200px; +} diff --git a/img/swiper-slide-1.png b/img/swiper-slide-1.png new file mode 100755 index 0000000..5562c7c Binary files /dev/null and b/img/swiper-slide-1.png differ diff --git a/img/swiper-slide-2.png b/img/swiper-slide-2.png new file mode 100755 index 0000000..b0de653 Binary files /dev/null and b/img/swiper-slide-2.png differ diff --git a/img/swiper-slide-3.png b/img/swiper-slide-3.png new file mode 100755 index 0000000..479563f Binary files /dev/null and b/img/swiper-slide-3.png differ diff --git a/img/swiper-slide-main-2.png b/img/swiper-slide-main-2.png new file mode 100755 index 0000000..5b447a0 Binary files /dev/null and b/img/swiper-slide-main-2.png differ diff --git a/img/swiper-slide-main-3.png b/img/swiper-slide-main-3.png new file mode 100755 index 0000000..6c11d25 Binary files /dev/null and b/img/swiper-slide-main-3.png differ diff --git a/index.html b/index.html index e49059c..58567db 100755 --- a/index.html +++ b/index.html @@ -23,6 +23,7 @@ + @@ -44,21 +45,21 @@ -
- -

Ruby Color

-
- - - - - - - - - -
-
+ + + + + + + + + + + + + + + - -
-
-
-
-
-
-
-

- awesome creative - - design - Theme - codes - -

-

Lorem Ipsum is simply dummy text of the printing and printing and typesetting industry.
Lorem Ipsum has been the industry's

-
-
- - Load More -
-
-
-
+ + +
+
+ + + + + + + + + + + + + + +
+
+
云端saas服务,大并发高可用架构
+
为您的数字资产保驾护航 数据全方位呵护
+
了解更多
-
- + +
+ + +
@@ -924,10 +926,10 @@ - - + + - + diff --git a/js/main.js b/js/main.js index d9fc439..0981e59 100755 --- a/js/main.js +++ b/js/main.js @@ -179,3 +179,21 @@ }); }); + // var mySwiper = new Swiper ('.swiper-container', { + // direction: 'horizontal', + // loop: true, + // speed: 500, //设置轮播时长 可以不设置 会有个默认值 + // autoplay: true,//可选选项,自动滑动 + // // // 如果需要分页器 + // // pagination: { + // // el: '.swiper-pagination', + // // }, + // autoplay: { + // disableOnInteraction: false, //点击后继续轮播(这个很重要) + // delay: 1000, //自动轮播的每次的时间 可以不设置 会有个默认值 + // }, + // // 如果需要前进后退按钮 + // + // + // }) + diff --git a/js/swiper.js b/js/swiper.js new file mode 100755 index 0000000..9b05275 --- /dev/null +++ b/js/swiper.js @@ -0,0 +1,7975 @@ +/** + * Swiper 4.4.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2018 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: September 14, 2018 + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Swiper = factory()); +}(this, (function () { 'use strict'; + + /** + * SSR Window 1.0.1 + * Better handling for window object in SSR environment + * https://github.com/nolimits4web/ssr-window + * + * Copyright 2018, Vladimir Kharlampidi + * + * Licensed under MIT + * + * Released on: July 18, 2018 + */ + var doc = (typeof document === 'undefined') ? { + body: {}, + addEventListener: function addEventListener() {}, + removeEventListener: function removeEventListener() {}, + activeElement: { + blur: function blur() {}, + nodeName: '', + }, + querySelector: function querySelector() { + return null; + }, + querySelectorAll: function querySelectorAll() { + return []; + }, + getElementById: function getElementById() { + return null; + }, + createEvent: function createEvent() { + return { + initEvent: function initEvent() {}, + }; + }, + createElement: function createElement() { + return { + children: [], + childNodes: [], + style: {}, + setAttribute: function setAttribute() {}, + getElementsByTagName: function getElementsByTagName() { + return []; + }, + }; + }, + location: { hash: '' }, + } : document; // eslint-disable-line + + var win = (typeof window === 'undefined') ? { + document: doc, + navigator: { + userAgent: '', + }, + location: {}, + history: {}, + CustomEvent: function CustomEvent() { + return this; + }, + addEventListener: function addEventListener() {}, + removeEventListener: function removeEventListener() {}, + getComputedStyle: function getComputedStyle() { + return { + getPropertyValue: function getPropertyValue() { + return ''; + }, + }; + }, + Image: function Image() {}, + Date: function Date() {}, + screen: {}, + setTimeout: function setTimeout() {}, + clearTimeout: function clearTimeout() {}, + } : window; // eslint-disable-line + + /** + * Dom7 2.1.2 + * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API + * http://framework7.io/docs/dom.html + * + * Copyright 2018, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: September 13, 2018 + */ + + var Dom7 = function Dom7(arr) { + var self = this; + // Create array-like object + for (var i = 0; i < arr.length; i += 1) { + self[i] = arr[i]; + } + self.length = arr.length; + // Return collection with methods + return this; + }; + + function $(selector, context) { + var arr = []; + var i = 0; + if (selector && !context) { + if (selector instanceof Dom7) { + return selector; + } + } + if (selector) { + // String + if (typeof selector === 'string') { + var els; + var tempParent; + var html = selector.trim(); + if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { + var toCreate = 'div'; + if (html.indexOf(':~]/)) { + // Pure ID selector + els = [doc.getElementById(selector.trim().split('#')[1])]; + } else { + // Other selectors + els = (context || doc).querySelectorAll(selector.trim()); + } + for (i = 0; i < els.length; i += 1) { + if (els[i]) { arr.push(els[i]); } + } + } + } else if (selector.nodeType || selector === win || selector === doc) { + // Node/element + arr.push(selector); + } else if (selector.length > 0 && selector[0].nodeType) { + // Array of elements or instance of Dom + for (i = 0; i < selector.length; i += 1) { + arr.push(selector[i]); + } + } + } + return new Dom7(arr); + } + + $.fn = Dom7.prototype; + $.Class = Dom7; + $.Dom7 = Dom7; + + function unique(arr) { + var uniqueArray = []; + for (var i = 0; i < arr.length; i += 1) { + if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); } + } + return uniqueArray; + } + + // Classes and attributes + function addClass(className) { + var this$1 = this; + + if (typeof className === 'undefined') { + return this; + } + var classes = className.split(' '); + for (var i = 0; i < classes.length; i += 1) { + for (var j = 0; j < this.length; j += 1) { + if (typeof this$1[j] !== 'undefined' && typeof this$1[j].classList !== 'undefined') { this$1[j].classList.add(classes[i]); } + } + } + return this; + } + function removeClass(className) { + var this$1 = this; + + var classes = className.split(' '); + for (var i = 0; i < classes.length; i += 1) { + for (var j = 0; j < this.length; j += 1) { + if (typeof this$1[j] !== 'undefined' && typeof this$1[j].classList !== 'undefined') { this$1[j].classList.remove(classes[i]); } + } + } + return this; + } + function hasClass(className) { + if (!this[0]) { return false; } + return this[0].classList.contains(className); + } + function toggleClass(className) { + var this$1 = this; + + var classes = className.split(' '); + for (var i = 0; i < classes.length; i += 1) { + for (var j = 0; j < this.length; j += 1) { + if (typeof this$1[j] !== 'undefined' && typeof this$1[j].classList !== 'undefined') { this$1[j].classList.toggle(classes[i]); } + } + } + return this; + } + function attr(attrs, value) { + var arguments$1 = arguments; + var this$1 = this; + + if (arguments.length === 1 && typeof attrs === 'string') { + // Get attr + if (this[0]) { return this[0].getAttribute(attrs); } + return undefined; + } + + // Set attrs + for (var i = 0; i < this.length; i += 1) { + if (arguments$1.length === 2) { + // String + this$1[i].setAttribute(attrs, value); + } else { + // Object + // eslint-disable-next-line + for (var attrName in attrs) { + this$1[i][attrName] = attrs[attrName]; + this$1[i].setAttribute(attrName, attrs[attrName]); + } + } + } + return this; + } + // eslint-disable-next-line + function removeAttr(attr) { + var this$1 = this; + + for (var i = 0; i < this.length; i += 1) { + this$1[i].removeAttribute(attr); + } + return this; + } + function data(key, value) { + var this$1 = this; + + var el; + if (typeof value === 'undefined') { + el = this[0]; + // Get value + if (el) { + if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) { + return el.dom7ElementDataStorage[key]; + } + + var dataKey = el.getAttribute(("data-" + key)); + if (dataKey) { + return dataKey; + } + return undefined; + } + return undefined; + } + + // Set value + for (var i = 0; i < this.length; i += 1) { + el = this$1[i]; + if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; } + el.dom7ElementDataStorage[key] = value; + } + return this; + } + // Transforms + // eslint-disable-next-line + function transform(transform) { + var this$1 = this; + + for (var i = 0; i < this.length; i += 1) { + var elStyle = this$1[i].style; + elStyle.webkitTransform = transform; + elStyle.transform = transform; + } + return this; + } + function transition(duration) { + var this$1 = this; + + if (typeof duration !== 'string') { + duration = duration + "ms"; // eslint-disable-line + } + for (var i = 0; i < this.length; i += 1) { + var elStyle = this$1[i].style; + elStyle.webkitTransitionDuration = duration; + elStyle.transitionDuration = duration; + } + return this; + } + // Events + function on() { + var this$1 = this; + var assign; + + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + var eventType = args[0]; + var targetSelector = args[1]; + var listener = args[2]; + var capture = args[3]; + if (typeof args[1] === 'function') { + (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]); + targetSelector = undefined; + } + if (!capture) { capture = false; } + + function handleLiveEvent(e) { + var target = e.target; + if (!target) { return; } + var eventData = e.target.dom7EventData || []; + if (eventData.indexOf(e) < 0) { + eventData.unshift(e); + } + if ($(target).is(targetSelector)) { listener.apply(target, eventData); } + else { + var parents = $(target).parents(); // eslint-disable-line + for (var k = 0; k < parents.length; k += 1) { + if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); } + } + } + } + function handleEvent(e) { + var eventData = e && e.target ? e.target.dom7EventData || [] : []; + if (eventData.indexOf(e) < 0) { + eventData.unshift(e); + } + listener.apply(this, eventData); + } + var events = eventType.split(' '); + var j; + for (var i = 0; i < this.length; i += 1) { + var el = this$1[i]; + if (!targetSelector) { + for (j = 0; j < events.length; j += 1) { + var event = events[j]; + if (!el.dom7Listeners) { el.dom7Listeners = {}; } + if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; } + el.dom7Listeners[event].push({ + listener: listener, + proxyListener: handleEvent, + }); + el.addEventListener(event, handleEvent, capture); + } + } else { + // Live events + for (j = 0; j < events.length; j += 1) { + var event$1 = events[j]; + if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; } + if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; } + el.dom7LiveListeners[event$1].push({ + listener: listener, + proxyListener: handleLiveEvent, + }); + el.addEventListener(event$1, handleLiveEvent, capture); + } + } + } + return this; + } + function off() { + var this$1 = this; + var assign; + + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + var eventType = args[0]; + var targetSelector = args[1]; + var listener = args[2]; + var capture = args[3]; + if (typeof args[1] === 'function') { + (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]); + targetSelector = undefined; + } + if (!capture) { capture = false; } + + var events = eventType.split(' '); + for (var i = 0; i < events.length; i += 1) { + var event = events[i]; + for (var j = 0; j < this.length; j += 1) { + var el = this$1[j]; + var handlers = (void 0); + if (!targetSelector && el.dom7Listeners) { + handlers = el.dom7Listeners[event]; + } else if (targetSelector && el.dom7LiveListeners) { + handlers = el.dom7LiveListeners[event]; + } + if (handlers && handlers.length) { + for (var k = handlers.length - 1; k >= 0; k -= 1) { + var handler = handlers[k]; + if (listener && handler.listener === listener) { + el.removeEventListener(event, handler.proxyListener, capture); + handlers.splice(k, 1); + } else if (!listener) { + el.removeEventListener(event, handler.proxyListener, capture); + handlers.splice(k, 1); + } + } + } + } + } + return this; + } + function trigger() { + var this$1 = this; + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var events = args[0].split(' '); + var eventData = args[1]; + for (var i = 0; i < events.length; i += 1) { + var event = events[i]; + for (var j = 0; j < this.length; j += 1) { + var el = this$1[j]; + var evt = (void 0); + try { + evt = new win.CustomEvent(event, { + detail: eventData, + bubbles: true, + cancelable: true, + }); + } catch (e) { + evt = doc.createEvent('Event'); + evt.initEvent(event, true, true); + evt.detail = eventData; + } + // eslint-disable-next-line + el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; }); + el.dispatchEvent(evt); + el.dom7EventData = []; + delete el.dom7EventData; + } + } + return this; + } + function transitionEnd(callback) { + var events = ['webkitTransitionEnd', 'transitionend']; + var dom = this; + var i; + function fireCallBack(e) { + /* jshint validthis:true */ + if (e.target !== this) { return; } + callback.call(this, e); + for (i = 0; i < events.length; i += 1) { + dom.off(events[i], fireCallBack); + } + } + if (callback) { + for (i = 0; i < events.length; i += 1) { + dom.on(events[i], fireCallBack); + } + } + return this; + } + function outerWidth(includeMargins) { + if (this.length > 0) { + if (includeMargins) { + // eslint-disable-next-line + var styles = this.styles(); + return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left')); + } + return this[0].offsetWidth; + } + return null; + } + function outerHeight(includeMargins) { + if (this.length > 0) { + if (includeMargins) { + // eslint-disable-next-line + var styles = this.styles(); + return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom')); + } + return this[0].offsetHeight; + } + return null; + } + function offset() { + if (this.length > 0) { + var el = this[0]; + var box = el.getBoundingClientRect(); + var body = doc.body; + var clientTop = el.clientTop || body.clientTop || 0; + var clientLeft = el.clientLeft || body.clientLeft || 0; + var scrollTop = el === win ? win.scrollY : el.scrollTop; + var scrollLeft = el === win ? win.scrollX : el.scrollLeft; + return { + top: (box.top + scrollTop) - clientTop, + left: (box.left + scrollLeft) - clientLeft, + }; + } + + return null; + } + function styles() { + if (this[0]) { return win.getComputedStyle(this[0], null); } + return {}; + } + function css(props, value) { + var this$1 = this; + + var i; + if (arguments.length === 1) { + if (typeof props === 'string') { + if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); } + } else { + for (i = 0; i < this.length; i += 1) { + // eslint-disable-next-line + for (var prop in props) { + this$1[i].style[prop] = props[prop]; + } + } + return this; + } + } + if (arguments.length === 2 && typeof props === 'string') { + for (i = 0; i < this.length; i += 1) { + this$1[i].style[props] = value; + } + return this; + } + return this; + } + // Iterate over the collection passing elements to `callback` + function each(callback) { + var this$1 = this; + + // Don't bother continuing without a callback + if (!callback) { return this; } + // Iterate over the current collection + for (var i = 0; i < this.length; i += 1) { + // If the callback returns false + if (callback.call(this$1[i], i, this$1[i]) === false) { + // End the loop early + return this$1; + } + } + // Return `this` to allow chained DOM operations + return this; + } + // eslint-disable-next-line + function html(html) { + var this$1 = this; + + if (typeof html === 'undefined') { + return this[0] ? this[0].innerHTML : undefined; + } + + for (var i = 0; i < this.length; i += 1) { + this$1[i].innerHTML = html; + } + return this; + } + // eslint-disable-next-line + function text(text) { + var this$1 = this; + + if (typeof text === 'undefined') { + if (this[0]) { + return this[0].textContent.trim(); + } + return null; + } + + for (var i = 0; i < this.length; i += 1) { + this$1[i].textContent = text; + } + return this; + } + function is(selector) { + var el = this[0]; + var compareWith; + var i; + if (!el || typeof selector === 'undefined') { return false; } + if (typeof selector === 'string') { + if (el.matches) { return el.matches(selector); } + else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); } + else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); } + + compareWith = $(selector); + for (i = 0; i < compareWith.length; i += 1) { + if (compareWith[i] === el) { return true; } + } + return false; + } else if (selector === doc) { return el === doc; } + else if (selector === win) { return el === win; } + + if (selector.nodeType || selector instanceof Dom7) { + compareWith = selector.nodeType ? [selector] : selector; + for (i = 0; i < compareWith.length; i += 1) { + if (compareWith[i] === el) { return true; } + } + return false; + } + return false; + } + function index() { + var child = this[0]; + var i; + if (child) { + i = 0; + // eslint-disable-next-line + while ((child = child.previousSibling) !== null) { + if (child.nodeType === 1) { i += 1; } + } + return i; + } + return undefined; + } + // eslint-disable-next-line + function eq(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([]); } + return new Dom7([this[returnIndex]]); + } + return new Dom7([this[index]]); + } + function append() { + var this$1 = this; + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var newChild; + + for (var k = 0; k < args.length; k += 1) { + newChild = args[k]; + for (var i = 0; i < this.length; i += 1) { + if (typeof newChild === 'string') { + var tempDiv = doc.createElement('div'); + tempDiv.innerHTML = newChild; + while (tempDiv.firstChild) { + this$1[i].appendChild(tempDiv.firstChild); + } + } else if (newChild instanceof Dom7) { + for (var j = 0; j < newChild.length; j += 1) { + this$1[i].appendChild(newChild[j]); + } + } else { + this$1[i].appendChild(newChild); + } + } + } + + return this; + } + function prepend(newChild) { + var this$1 = this; + + var i; + var j; + for (i = 0; i < this.length; i += 1) { + if (typeof newChild === 'string') { + var tempDiv = doc.createElement('div'); + tempDiv.innerHTML = newChild; + for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { + this$1[i].insertBefore(tempDiv.childNodes[j], this$1[i].childNodes[0]); + } + } else if (newChild instanceof Dom7) { + for (j = 0; j < newChild.length; j += 1) { + this$1[i].insertBefore(newChild[j], this$1[i].childNodes[0]); + } + } else { + this$1[i].insertBefore(newChild, this$1[i].childNodes[0]); + } + } + return this; + } + function next(selector) { + if (this.length > 0) { + if (selector) { + if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { + return new Dom7([this[0].nextElementSibling]); + } + return new Dom7([]); + } + + if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); } + return new Dom7([]); + } + return new Dom7([]); + } + function nextAll(selector) { + var nextEls = []; + var el = this[0]; + if (!el) { return new Dom7([]); } + while (el.nextElementSibling) { + var next = el.nextElementSibling; // eslint-disable-line + if (selector) { + if ($(next).is(selector)) { nextEls.push(next); } + } else { nextEls.push(next); } + el = next; + } + return new Dom7(nextEls); + } + function prev(selector) { + if (this.length > 0) { + var el = this[0]; + if (selector) { + if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { + return new Dom7([el.previousElementSibling]); + } + return new Dom7([]); + } + + if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); } + return new Dom7([]); + } + return new Dom7([]); + } + function prevAll(selector) { + var prevEls = []; + var el = this[0]; + if (!el) { return new Dom7([]); } + while (el.previousElementSibling) { + var prev = el.previousElementSibling; // eslint-disable-line + if (selector) { + if ($(prev).is(selector)) { prevEls.push(prev); } + } else { prevEls.push(prev); } + el = prev; + } + return new Dom7(prevEls); + } + function parent(selector) { + var this$1 = this; + + var parents = []; // eslint-disable-line + for (var i = 0; i < this.length; i += 1) { + if (this$1[i].parentNode !== null) { + if (selector) { + if ($(this$1[i].parentNode).is(selector)) { parents.push(this$1[i].parentNode); } + } else { + parents.push(this$1[i].parentNode); + } + } + } + return $(unique(parents)); + } + function parents(selector) { + var this$1 = this; + + var parents = []; // eslint-disable-line + for (var i = 0; i < this.length; i += 1) { + var parent = this$1[i].parentNode; // eslint-disable-line + while (parent) { + if (selector) { + if ($(parent).is(selector)) { parents.push(parent); } + } else { + parents.push(parent); + } + parent = parent.parentNode; + } + } + return $(unique(parents)); + } + function closest(selector) { + var closest = this; // eslint-disable-line + if (typeof selector === 'undefined') { + return new Dom7([]); + } + if (!closest.is(selector)) { + closest = closest.parents(selector).eq(0); + } + return closest; + } + function find(selector) { + var this$1 = this; + + var foundElements = []; + for (var i = 0; i < this.length; i += 1) { + var found = this$1[i].querySelectorAll(selector); + for (var j = 0; j < found.length; j += 1) { + foundElements.push(found[j]); + } + } + return new Dom7(foundElements); + } + function children(selector) { + var this$1 = this; + + var children = []; // eslint-disable-line + for (var i = 0; i < this.length; i += 1) { + var childNodes = this$1[i].childNodes; + + for (var j = 0; j < childNodes.length; j += 1) { + 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)); + } + function remove() { + var this$1 = this; + + for (var i = 0; i < this.length; i += 1) { + if (this$1[i].parentNode) { this$1[i].parentNode.removeChild(this$1[i]); } + } + return this; + } + function add() { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var dom = this; + var i; + var j; + for (i = 0; i < args.length; i += 1) { + var toAdd = $(args[i]); + for (j = 0; j < toAdd.length; j += 1) { + dom[dom.length] = toAdd[j]; + dom.length += 1; + } + } + return dom; + } + + var Methods = { + addClass: addClass, + removeClass: removeClass, + hasClass: hasClass, + toggleClass: toggleClass, + attr: attr, + removeAttr: removeAttr, + data: data, + transform: transform, + transition: transition, + on: on, + off: off, + trigger: trigger, + transitionEnd: transitionEnd, + outerWidth: outerWidth, + outerHeight: outerHeight, + offset: offset, + css: css, + each: each, + html: html, + text: text, + is: is, + index: index, + eq: eq, + append: append, + prepend: prepend, + next: next, + nextAll: nextAll, + prev: prev, + prevAll: prevAll, + parent: parent, + parents: parents, + closest: closest, + find: find, + children: children, + remove: remove, + add: add, + styles: styles, + }; + + Object.keys(Methods).forEach(function (methodName) { + $.fn[methodName] = Methods[methodName]; + }); + + var Utils = { + deleteProps: function deleteProps(obj) { + var object = obj; + Object.keys(object).forEach(function (key) { + try { + object[key] = null; + } catch (e) { + // no getter for object + } + try { + delete object[key]; + } catch (e) { + // something got wrong + } + }); + }, + nextTick: function nextTick(callback, delay) { + if ( delay === void 0 ) delay = 0; + + return setTimeout(callback, delay); + }, + now: function now() { + return Date.now(); + }, + getTranslate: function getTranslate(el, axis) { + if ( axis === void 0 ) axis = 'x'; + + var matrix; + var curTransform; + var transformMatrix; + + var curStyle = win.getComputedStyle(el, null); + + if (win.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 win.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 (win.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 (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; } + // Crazy IE10 Matrix + else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); } + // Normal Browsers + else { curTransform = parseFloat(matrix[5]); } + } + return curTransform || 0; + }, + parseUrlQuery: function parseUrlQuery(url) { + var query = {}; + var urlToParse = url || win.location.href; + var i; + var params; + var param; + var length; + if (typeof urlToParse === 'string' && urlToParse.length) { + urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : ''; + params = urlToParse.split('&').filter(function (paramsPart) { return 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; + }, + isObject: function isObject(o) { + return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object; + }, + extend: function extend() { + var args = [], len$1 = arguments.length; + while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ]; + + var to = Object(args[0]); + for (var i = 1; i < args.length; i += 1) { + var nextSource = args[i]; + if (nextSource !== undefined && nextSource !== null) { + var keysArray = Object.keys(Object(nextSource)); + for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { + var nextKey = keysArray[nextIndex]; + var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); + if (desc !== undefined && desc.enumerable) { + if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) { + Utils.extend(to[nextKey], nextSource[nextKey]); + } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) { + to[nextKey] = {}; + Utils.extend(to[nextKey], nextSource[nextKey]); + } else { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + } + return to; + }, + }; + + var Support = (function Support() { + var testDiv = doc.createElement('div'); + return { + touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() { + return !!(('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch)); + }()), + + pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent), + prefixedPointerEvents: !!win.navigator.msPointerEnabled, + + transition: (function checkTransition() { + var style = testDiv.style; + return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style); + }()), + transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() { + var style = testDiv.style; + return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style); + }()), + + flexbox: (function checkFlexbox() { + var style = testDiv.style; + var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); + for (var i = 0; i < styles.length; i += 1) { + if (styles[i] in style) { return true; } + } + return false; + }()), + + observer: (function checkObserver() { + return ('MutationObserver' in win || 'WebkitMutationObserver' in win); + }()), + + passiveListener: (function checkPassiveListener() { + var supportsPassive = false; + try { + var opts = Object.defineProperty({}, 'passive', { + // eslint-disable-next-line + get: function get() { + supportsPassive = true; + }, + }); + win.addEventListener('testPassiveListener', null, opts); + } catch (e) { + // No support + } + return supportsPassive; + }()), + + gestures: (function checkGestures() { + return 'ongesturestart' in win; + }()), + }; + }()); + + var SwiperClass = function SwiperClass(params) { + if ( params === void 0 ) params = {}; + + var self = this; + self.params = params; + + // Events + self.eventsListeners = {}; + + if (self.params && self.params.on) { + Object.keys(self.params.on).forEach(function (eventName) { + self.on(eventName, self.params.on[eventName]); + }); + } + }; + + var staticAccessors = { components: { configurable: true } }; + + SwiperClass.prototype.on = function on (events, handler, priority) { + var self = this; + if (typeof handler !== 'function') { return self; } + var method = priority ? 'unshift' : 'push'; + events.split(' ').forEach(function (event) { + if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; } + self.eventsListeners[event][method](handler); + }); + return self; + }; + + SwiperClass.prototype.once = function once (events, handler, priority) { + var self = this; + if (typeof handler !== 'function') { return self; } + function onceHandler() { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + handler.apply(self, args); + self.off(events, onceHandler); + } + return self.on(events, onceHandler, priority); + }; + + SwiperClass.prototype.off = function off (events, handler) { + var self = this; + if (!self.eventsListeners) { return self; } + events.split(' ').forEach(function (event) { + if (typeof handler === 'undefined') { + self.eventsListeners[event] = []; + } else if (self.eventsListeners[event] && self.eventsListeners[event].length) { + self.eventsListeners[event].forEach(function (eventHandler, index) { + if (eventHandler === handler) { + self.eventsListeners[event].splice(index, 1); + } + }); + } + }); + return self; + }; + + SwiperClass.prototype.emit = function emit () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var self = this; + if (!self.eventsListeners) { return self; } + var events; + var data; + var context; + if (typeof args[0] === 'string' || Array.isArray(args[0])) { + events = args[0]; + data = args.slice(1, args.length); + context = self; + } else { + events = args[0].events; + data = args[0].data; + context = args[0].context || self; + } + var eventsArray = Array.isArray(events) ? events : events.split(' '); + eventsArray.forEach(function (event) { + if (self.eventsListeners && self.eventsListeners[event]) { + var handlers = []; + self.eventsListeners[event].forEach(function (eventHandler) { + handlers.push(eventHandler); + }); + handlers.forEach(function (eventHandler) { + eventHandler.apply(context, data); + }); + } + }); + return self; + }; + + SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) { + var instance = this; + if (!instance.modules) { return; } + Object.keys(instance.modules).forEach(function (moduleName) { + var module = instance.modules[moduleName]; + // Extend params + if (module.params) { + Utils.extend(instanceParams, module.params); + } + }); + }; + + SwiperClass.prototype.useModules = function useModules (modulesParams) { + if ( modulesParams === void 0 ) modulesParams = {}; + + var instance = this; + if (!instance.modules) { return; } + Object.keys(instance.modules).forEach(function (moduleName) { + var module = instance.modules[moduleName]; + var moduleParams = modulesParams[moduleName] || {}; + // Extend instance methods and props + if (module.instance) { + Object.keys(module.instance).forEach(function (modulePropName) { + var 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(function (moduleEventName) { + instance.on(moduleEventName, module.on[moduleEventName]); + }); + } + + // Module create callback + if (module.create) { + module.create.bind(instance)(moduleParams); + } + }); + }; + + staticAccessors.components.set = function (components) { + var Class = this; + if (!Class.use) { return; } + Class.use(components); + }; + + SwiperClass.installModule = function installModule (module) { + var params = [], len = arguments.length - 1; + while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ]; + + var Class = this; + if (!Class.prototype.modules) { Class.prototype.modules = {}; } + var 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(function (key) { + Class.prototype[key] = module.proto[key]; + }); + } + // Class + if (module.static) { + Object.keys(module.static).forEach(function (key) { + Class[key] = module.static[key]; + }); + } + // Callback + if (module.install) { + module.install.apply(Class, params); + } + return Class; + }; + + SwiperClass.use = function use (module) { + var params = [], len = arguments.length - 1; + while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ]; + + var Class = this; + if (Array.isArray(module)) { + module.forEach(function (m) { return Class.installModule(m); }); + return Class; + } + return Class.installModule.apply(Class, [ module ].concat( params )); + }; + + Object.defineProperties( SwiperClass, staticAccessors ); + + function updateSize () { + var swiper = this; + var width; + var height; + var $el = swiper.$el; + if (typeof swiper.params.width !== 'undefined') { + width = swiper.params.width; + } else { + width = $el[0].clientWidth; + } + if (typeof swiper.params.height !== 'undefined') { + height = swiper.params.height; + } else { + height = $el[0].clientHeight; + } + if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) { + return; + } + + // Subtract paddings + width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10); + height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10); + + Utils.extend(swiper, { + width: width, + height: height, + size: swiper.isHorizontal() ? width : height, + }); + } + + function updateSlides () { + var swiper = this; + var params = swiper.params; + + var $wrapperEl = swiper.$wrapperEl; + var swiperSize = swiper.size; + var rtl = swiper.rtlTranslate; + var wrongRTL = swiper.wrongRTL; + var isVirtual = swiper.virtual && params.virtual.enabled; + var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; + var slides = $wrapperEl.children(("." + (swiper.params.slideClass))); + var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; + var snapGrid = []; + var slidesGrid = []; + var slidesSizesGrid = []; + + var offsetBefore = params.slidesOffsetBefore; + if (typeof offsetBefore === 'function') { + offsetBefore = params.slidesOffsetBefore.call(swiper); + } + + var offsetAfter = params.slidesOffsetAfter; + if (typeof offsetAfter === 'function') { + offsetAfter = params.slidesOffsetAfter.call(swiper); + } + + var previousSnapGridLength = swiper.snapGrid.length; + var previousSlidesGridLength = swiper.snapGrid.length; + + var spaceBetween = params.spaceBetween; + var slidePosition = -offsetBefore; + var prevSlideSize = 0; + var index = 0; + if (typeof swiperSize === 'undefined') { + return; + } + if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { + spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize; + } + + swiper.virtualSize = -spaceBetween; + + // reset margins + if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); } + else { slides.css({ marginRight: '', marginBottom: '' }); } + + var slidesNumberEvenToRows; + if (params.slidesPerColumn > 1) { + if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) { + slidesNumberEvenToRows = slidesLength; + } else { + slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn; + } + if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') { + slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn); + } + } + + // Calc slides + var slideSize; + var slidesPerColumn = params.slidesPerColumn; + var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; + var numFullColumns = slidesPerRow - ((params.slidesPerColumn * slidesPerRow) - slidesLength); + for (var i = 0; i < slidesLength; i += 1) { + slideSize = 0; + var slide = slides.eq(i); + if (params.slidesPerColumn > 1) { + // Set slides order + var newSlideOrderIndex = (void 0); + var column = (void 0); + var row = (void 0); + if (params.slidesPerColumnFill === 'column') { + column = Math.floor(i / slidesPerColumn); + row = i - (column * slidesPerColumn); + if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) { + row += 1; + if (row >= slidesPerColumn) { + row = 0; + column += 1; + } + } + 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-" + (swiper.isHorizontal() ? 'top' : 'left')), + (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + "px")) + ) + .attr('data-swiper-column', column) + .attr('data-swiper-row', row); + } + if (slide.css('display') === 'none') { continue; } // eslint-disable-line + + if (params.slidesPerView === 'auto') { + var slideStyles = win.getComputedStyle(slide[0], null); + var currentTransform = slide[0].style.transform; + var currentWebKitTransform = slide[0].style.webkitTransform; + if (currentTransform) { + slide[0].style.transform = 'none'; + } + if (currentWebKitTransform) { + slide[0].style.webkitTransform = 'none'; + } + if (params.roundLengths) { + slideSize = swiper.isHorizontal() + ? slide.outerWidth(true) + : slide.outerHeight(true); + } else { + // eslint-disable-next-line + if (swiper.isHorizontal()) { + slideSize = slide[0].getBoundingClientRect().width + + parseFloat(slideStyles.getPropertyValue('margin-left')) + + parseFloat(slideStyles.getPropertyValue('margin-right')); + } else { + slideSize = slide[0].getBoundingClientRect().height + + parseFloat(slideStyles.getPropertyValue('margin-top')) + + parseFloat(slideStyles.getPropertyValue('margin-bottom')); + } + } + if (currentTransform) { + slide[0].style.transform = currentTransform; + } + if (currentWebKitTransform) { + slide[0].style.webkitTransform = currentWebKitTransform; + } + if (params.roundLengths) { slideSize = Math.floor(slideSize); } + } else { + slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView; + if (params.roundLengths) { slideSize = Math.floor(slideSize); } + + if (slides[i]) { + if (swiper.isHorizontal()) { + slides[i].style.width = slideSize + "px"; + } else { + slides[i].style.height = slideSize + "px"; + } + } + } + if (slides[i]) { + slides[i].swiperSlideSize = slideSize; + } + slidesSizesGrid.push(slideSize); + + + if (params.centeredSlides) { + slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween; + if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; } + if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; } + if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; } + if (params.roundLengths) { slidePosition = Math.floor(slidePosition); } + if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); } + slidesGrid.push(slidePosition); + } else { + if (params.roundLengths) { slidePosition = Math.floor(slidePosition); } + if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); } + slidesGrid.push(slidePosition); + slidePosition = slidePosition + slideSize + spaceBetween; + } + + swiper.virtualSize += slideSize + spaceBetween; + + prevSlideSize = slideSize; + + index += 1; + } + swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; + var newSlidesGrid; + + if ( + rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { + $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); + } + if (!Support.flexbox || params.setWrapperSize) { + if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); } + else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); } + } + + if (params.slidesPerColumn > 1) { + swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows; + swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween; + if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); } + else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); } + if (params.centeredSlides) { + newSlidesGrid = []; + for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) { + var slidesGridItem = snapGrid[i$1]; + if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); } + if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); } + } + snapGrid = newSlidesGrid; + } + } + + // Remove last grid elements depending on width + if (!params.centeredSlides) { + newSlidesGrid = []; + for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) { + var slidesGridItem$1 = snapGrid[i$2]; + if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); } + if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) { + newSlidesGrid.push(slidesGridItem$1); + } + } + snapGrid = newSlidesGrid; + if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { + snapGrid.push(swiper.virtualSize - swiperSize); + } + } + if (snapGrid.length === 0) { snapGrid = [0]; } + + if (params.spaceBetween !== 0) { + if (swiper.isHorizontal()) { + if (rtl) { slides.css({ marginLeft: (spaceBetween + "px") }); } + else { slides.css({ marginRight: (spaceBetween + "px") }); } + } else { slides.css({ marginBottom: (spaceBetween + "px") }); } + } + + if (params.centerInsufficientSlides) { + var allSlidesSize = 0; + slidesSizesGrid.forEach(function (slideSizeValue) { + allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); + }); + allSlidesSize -= params.spaceBetween; + if (allSlidesSize < swiperSize) { + var allSlidesOffset = (swiperSize - allSlidesSize) / 2; + snapGrid.forEach(function (snap, snapIndex) { + snapGrid[snapIndex] = snap - allSlidesOffset; + }); + slidesGrid.forEach(function (snap, snapIndex) { + slidesGrid[snapIndex] = snap + allSlidesOffset; + }); + } + } + + Utils.extend(swiper, { + slides: slides, + snapGrid: snapGrid, + slidesGrid: slidesGrid, + slidesSizesGrid: slidesSizesGrid, + }); + + if (slidesLength !== previousSlidesLength) { + swiper.emit('slidesLengthChange'); + } + if (snapGrid.length !== previousSnapGridLength) { + if (swiper.params.watchOverflow) { swiper.checkOverflow(); } + swiper.emit('snapGridLengthChange'); + } + if (slidesGrid.length !== previousSlidesGridLength) { + swiper.emit('slidesGridLengthChange'); + } + + if (params.watchSlidesProgress || params.watchSlidesVisibility) { + swiper.updateSlidesOffset(); + } + } + + function updateAutoHeight (speed) { + var swiper = this; + var activeSlides = []; + var newHeight = 0; + var i; + if (typeof speed === 'number') { + swiper.setTransition(speed); + } else if (speed === true) { + swiper.setTransition(swiper.params.speed); + } + // Find slides currently in view + if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { + for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { + var index = swiper.activeIndex + i; + if (index > swiper.slides.length) { break; } + activeSlides.push(swiper.slides.eq(index)[0]); + } + } else { + activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]); + } + + // Find new height from highest slide in view + for (i = 0; i < activeSlides.length; i += 1) { + if (typeof activeSlides[i] !== 'undefined') { + var height = activeSlides[i].offsetHeight; + newHeight = height > newHeight ? height : newHeight; + } + } + + // Update Height + if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + "px")); } + } + + function updateSlidesOffset () { + var swiper = this; + var slides = swiper.slides; + for (var i = 0; i < slides.length; i += 1) { + slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; + } + } + + function updateSlidesProgress (translate) { + if ( translate === void 0 ) translate = (this && this.translate) || 0; + + var swiper = this; + var params = swiper.params; + + var slides = swiper.slides; + var rtl = swiper.rtlTranslate; + + if (slides.length === 0) { return; } + if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); } + + var offsetCenter = -translate; + if (rtl) { offsetCenter = translate; } + + // Visible Slides + slides.removeClass(params.slideVisibleClass); + + swiper.visibleSlidesIndexes = []; + swiper.visibleSlides = []; + + for (var i = 0; i < slides.length; i += 1) { + var slide = slides[i]; + var slideProgress = ( + (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset + ) / (slide.swiperSlideSize + params.spaceBetween); + if (params.watchSlidesVisibility) { + var slideBefore = -(offsetCenter - slide.swiperSlideOffset); + var slideAfter = slideBefore + swiper.slidesSizesGrid[i]; + var isVisible = (slideBefore >= 0 && slideBefore < swiper.size) + || (slideAfter > 0 && slideAfter <= swiper.size) + || (slideBefore <= 0 && slideAfter >= swiper.size); + if (isVisible) { + swiper.visibleSlides.push(slide); + swiper.visibleSlidesIndexes.push(i); + slides.eq(i).addClass(params.slideVisibleClass); + } + } + slide.progress = rtl ? -slideProgress : slideProgress; + } + swiper.visibleSlides = $(swiper.visibleSlides); + } + + function updateProgress (translate) { + if ( translate === void 0 ) translate = (this && this.translate) || 0; + + var swiper = this; + var params = swiper.params; + + var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); + var progress = swiper.progress; + var isBeginning = swiper.isBeginning; + var isEnd = swiper.isEnd; + var wasBeginning = isBeginning; + var wasEnd = isEnd; + if (translatesDiff === 0) { + progress = 0; + isBeginning = true; + isEnd = true; + } else { + progress = (translate - swiper.minTranslate()) / (translatesDiff); + isBeginning = progress <= 0; + isEnd = progress >= 1; + } + Utils.extend(swiper, { + progress: progress, + isBeginning: isBeginning, + isEnd: isEnd, + }); + + if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); } + + if (isBeginning && !wasBeginning) { + swiper.emit('reachBeginning toEdge'); + } + if (isEnd && !wasEnd) { + swiper.emit('reachEnd toEdge'); + } + if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) { + swiper.emit('fromEdge'); + } + + swiper.emit('progress', progress); + } + + function updateSlidesClasses () { + var swiper = this; + + var slides = swiper.slides; + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl; + var activeIndex = swiper.activeIndex; + var realIndex = swiper.realIndex; + var isVirtual = swiper.virtual && params.virtual.enabled; + + slides.removeClass(((params.slideActiveClass) + " " + (params.slideNextClass) + " " + (params.slidePrevClass) + " " + (params.slideDuplicateActiveClass) + " " + (params.slideDuplicateNextClass) + " " + (params.slideDuplicatePrevClass))); + + var activeSlide; + if (isVirtual) { + activeSlide = swiper.$wrapperEl.find(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + activeIndex + "\"]")); + } else { + activeSlide = slides.eq(activeIndex); + } + + // Active classes + activeSlide.addClass(params.slideActiveClass); + + if (params.loop) { + // Duplicate to all looped slides + if (activeSlide.hasClass(params.slideDuplicateClass)) { + $wrapperEl + .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + realIndex + "\"]")) + .addClass(params.slideDuplicateActiveClass); + } else { + $wrapperEl + .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]")) + .addClass(params.slideDuplicateActiveClass); + } + } + // Next Slide + var nextSlide = activeSlide.nextAll(("." + (params.slideClass))).eq(0).addClass(params.slideNextClass); + if (params.loop && nextSlide.length === 0) { + nextSlide = slides.eq(0); + nextSlide.addClass(params.slideNextClass); + } + // Prev Slide + var prevSlide = activeSlide.prevAll(("." + (params.slideClass))).eq(0).addClass(params.slidePrevClass); + if (params.loop && prevSlide.length === 0) { + prevSlide = slides.eq(-1); + prevSlide.addClass(params.slidePrevClass); + } + if (params.loop) { + // Duplicate to all looped slides + if (nextSlide.hasClass(params.slideDuplicateClass)) { + $wrapperEl + .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]")) + .addClass(params.slideDuplicateNextClass); + } else { + $wrapperEl + .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]")) + .addClass(params.slideDuplicateNextClass); + } + if (prevSlide.hasClass(params.slideDuplicateClass)) { + $wrapperEl + .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]")) + .addClass(params.slideDuplicatePrevClass); + } else { + $wrapperEl + .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]")) + .addClass(params.slideDuplicatePrevClass); + } + } + } + + function updateActiveIndex (newActiveIndex) { + var swiper = this; + var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; + var slidesGrid = swiper.slidesGrid; + var snapGrid = swiper.snapGrid; + var params = swiper.params; + var previousIndex = swiper.activeIndex; + var previousRealIndex = swiper.realIndex; + var previousSnapIndex = swiper.snapIndex; + var activeIndex = newActiveIndex; + var snapIndex; + if (typeof activeIndex === 'undefined') { + for (var i = 0; i < slidesGrid.length; i += 1) { + if (typeof slidesGrid[i + 1] !== 'undefined') { + if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) { + activeIndex = i; + } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { + activeIndex = i + 1; + } + } else if (translate >= slidesGrid[i]) { + activeIndex = i; + } + } + // Normalize slideIndex + if (params.normalizeSlideIndex) { + if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; } + } + } + if (snapGrid.indexOf(translate) >= 0) { + snapIndex = snapGrid.indexOf(translate); + } else { + snapIndex = Math.floor(activeIndex / params.slidesPerGroup); + } + if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; } + if (activeIndex === previousIndex) { + if (snapIndex !== previousSnapIndex) { + swiper.snapIndex = snapIndex; + swiper.emit('snapIndexChange'); + } + return; + } + + // Get real index + var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); + + Utils.extend(swiper, { + snapIndex: snapIndex, + realIndex: realIndex, + previousIndex: previousIndex, + activeIndex: activeIndex, + }); + swiper.emit('activeIndexChange'); + swiper.emit('snapIndexChange'); + if (previousRealIndex !== realIndex) { + swiper.emit('realIndexChange'); + } + swiper.emit('slideChange'); + } + + function updateClickedSlide (e) { + var swiper = this; + var params = swiper.params; + var slide = $(e.target).closest(("." + (params.slideClass)))[0]; + var slideFound = false; + if (slide) { + for (var i = 0; i < swiper.slides.length; i += 1) { + if (swiper.slides[i] === slide) { slideFound = true; } + } + } + + if (slide && slideFound) { + swiper.clickedSlide = slide; + if (swiper.virtual && swiper.params.virtual.enabled) { + swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10); + } else { + swiper.clickedIndex = $(slide).index(); + } + } else { + swiper.clickedSlide = undefined; + swiper.clickedIndex = undefined; + return; + } + if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { + swiper.slideToClickedSlide(); + } + } + + var update = { + updateSize: updateSize, + updateSlides: updateSlides, + updateAutoHeight: updateAutoHeight, + updateSlidesOffset: updateSlidesOffset, + updateSlidesProgress: updateSlidesProgress, + updateProgress: updateProgress, + updateSlidesClasses: updateSlidesClasses, + updateActiveIndex: updateActiveIndex, + updateClickedSlide: updateClickedSlide, + }; + + function getTranslate (axis) { + if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y'; + + var swiper = this; + + var params = swiper.params; + var rtl = swiper.rtlTranslate; + var translate = swiper.translate; + var $wrapperEl = swiper.$wrapperEl; + + if (params.virtualTranslate) { + return rtl ? -translate : translate; + } + + var currentTranslate = Utils.getTranslate($wrapperEl[0], axis); + if (rtl) { currentTranslate = -currentTranslate; } + + return currentTranslate || 0; + } + + function setTranslate (translate, byController) { + var swiper = this; + var rtl = swiper.rtlTranslate; + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl; + var progress = swiper.progress; + var x = 0; + var y = 0; + var z = 0; + + if (swiper.isHorizontal()) { + x = rtl ? -translate : translate; + } else { + y = translate; + } + + if (params.roundLengths) { + x = Math.floor(x); + y = Math.floor(y); + } + + if (!params.virtualTranslate) { + if (Support.transforms3d) { $wrapperEl.transform(("translate3d(" + x + "px, " + y + "px, " + z + "px)")); } + else { $wrapperEl.transform(("translate(" + x + "px, " + y + "px)")); } + } + swiper.previousTranslate = swiper.translate; + swiper.translate = swiper.isHorizontal() ? x : y; + + // Check if we need to update progress + var newProgress; + var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); + if (translatesDiff === 0) { + newProgress = 0; + } else { + newProgress = (translate - swiper.minTranslate()) / (translatesDiff); + } + if (newProgress !== progress) { + swiper.updateProgress(translate); + } + + swiper.emit('setTranslate', swiper.translate, byController); + } + + function minTranslate () { + return (-this.snapGrid[0]); + } + + function maxTranslate () { + return (-this.snapGrid[this.snapGrid.length - 1]); + } + + var translate = { + getTranslate: getTranslate, + setTranslate: setTranslate, + minTranslate: minTranslate, + maxTranslate: maxTranslate, + }; + + function setTransition (duration, byController) { + var swiper = this; + + swiper.$wrapperEl.transition(duration); + + swiper.emit('setTransition', duration, byController); + } + + function transitionStart (runCallbacks, direction) { + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var activeIndex = swiper.activeIndex; + var params = swiper.params; + var previousIndex = swiper.previousIndex; + if (params.autoHeight) { + swiper.updateAutoHeight(); + } + + var dir = direction; + if (!dir) { + if (activeIndex > previousIndex) { dir = 'next'; } + else if (activeIndex < previousIndex) { dir = 'prev'; } + else { dir = 'reset'; } + } + + swiper.emit('transitionStart'); + + if (runCallbacks && activeIndex !== previousIndex) { + if (dir === 'reset') { + swiper.emit('slideResetTransitionStart'); + return; + } + swiper.emit('slideChangeTransitionStart'); + if (dir === 'next') { + swiper.emit('slideNextTransitionStart'); + } else { + swiper.emit('slidePrevTransitionStart'); + } + } + } + + function transitionEnd$1 (runCallbacks, direction) { + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var activeIndex = swiper.activeIndex; + var previousIndex = swiper.previousIndex; + swiper.animating = false; + swiper.setTransition(0); + + var dir = direction; + if (!dir) { + if (activeIndex > previousIndex) { dir = 'next'; } + else if (activeIndex < previousIndex) { dir = 'prev'; } + else { dir = 'reset'; } + } + + swiper.emit('transitionEnd'); + + if (runCallbacks && activeIndex !== previousIndex) { + if (dir === 'reset') { + swiper.emit('slideResetTransitionEnd'); + return; + } + swiper.emit('slideChangeTransitionEnd'); + if (dir === 'next') { + swiper.emit('slideNextTransitionEnd'); + } else { + swiper.emit('slidePrevTransitionEnd'); + } + } + } + + var transition$1 = { + setTransition: setTransition, + transitionStart: transitionStart, + transitionEnd: transitionEnd$1, + }; + + function slideTo (index, speed, runCallbacks, internal) { + if ( index === void 0 ) index = 0; + if ( speed === void 0 ) speed = this.params.speed; + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var slideIndex = index; + if (slideIndex < 0) { slideIndex = 0; } + + var params = swiper.params; + var snapGrid = swiper.snapGrid; + var slidesGrid = swiper.slidesGrid; + var previousIndex = swiper.previousIndex; + var activeIndex = swiper.activeIndex; + var rtl = swiper.rtlTranslate; + if (swiper.animating && params.preventInteractionOnTransition) { + return false; + } + + var snapIndex = Math.floor(slideIndex / params.slidesPerGroup); + if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; } + + if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { + swiper.emit('beforeSlideChangeStart'); + } + + var translate = -snapGrid[snapIndex]; + + // Update progress + swiper.updateProgress(translate); + + // Normalize slideIndex + if (params.normalizeSlideIndex) { + for (var i = 0; i < slidesGrid.length; i += 1) { + if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) { + slideIndex = i; + } + } + } + // Directions locks + if (swiper.initialized && slideIndex !== activeIndex) { + if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { + return false; + } + if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { + if ((activeIndex || 0) !== slideIndex) { return false; } + } + } + + var direction; + if (slideIndex > activeIndex) { direction = 'next'; } + else if (slideIndex < activeIndex) { direction = 'prev'; } + else { direction = 'reset'; } + + + // Update Index + if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) { + swiper.updateActiveIndex(slideIndex); + // Update Height + if (params.autoHeight) { + swiper.updateAutoHeight(); + } + swiper.updateSlidesClasses(); + if (params.effect !== 'slide') { + swiper.setTranslate(translate); + } + if (direction !== 'reset') { + swiper.transitionStart(runCallbacks, direction); + swiper.transitionEnd(runCallbacks, direction); + } + return false; + } + + if (speed === 0 || !Support.transition) { + swiper.setTransition(0); + swiper.setTranslate(translate); + swiper.updateActiveIndex(slideIndex); + swiper.updateSlidesClasses(); + swiper.emit('beforeTransitionStart', speed, internal); + swiper.transitionStart(runCallbacks, direction); + swiper.transitionEnd(runCallbacks, direction); + } else { + swiper.setTransition(speed); + swiper.setTranslate(translate); + swiper.updateActiveIndex(slideIndex); + swiper.updateSlidesClasses(); + swiper.emit('beforeTransitionStart', speed, internal); + swiper.transitionStart(runCallbacks, direction); + if (!swiper.animating) { + swiper.animating = true; + if (!swiper.onSlideToWrapperTransitionEnd) { + swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { + if (!swiper || swiper.destroyed) { return; } + if (e.target !== this) { return; } + swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); + swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); + swiper.onSlideToWrapperTransitionEnd = null; + delete swiper.onSlideToWrapperTransitionEnd; + swiper.transitionEnd(runCallbacks, direction); + }; + } + swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); + swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); + } + } + + return true; + } + + function slideToLoop (index, speed, runCallbacks, internal) { + if ( index === void 0 ) index = 0; + if ( speed === void 0 ) speed = this.params.speed; + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var newIndex = index; + if (swiper.params.loop) { + newIndex += swiper.loopedSlides; + } + + return swiper.slideTo(newIndex, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slideNext (speed, runCallbacks, internal) { + if ( speed === void 0 ) speed = this.params.speed; + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var params = swiper.params; + var animating = swiper.animating; + if (params.loop) { + if (animating) { return false; } + swiper.loopFix(); + // eslint-disable-next-line + swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; + return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal); + } + return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slidePrev (speed, runCallbacks, internal) { + if ( speed === void 0 ) speed = this.params.speed; + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var params = swiper.params; + var animating = swiper.animating; + var snapGrid = swiper.snapGrid; + var slidesGrid = swiper.slidesGrid; + var rtlTranslate = swiper.rtlTranslate; + + if (params.loop) { + if (animating) { return false; } + swiper.loopFix(); + // eslint-disable-next-line + swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; + } + var translate = rtlTranslate ? swiper.translate : -swiper.translate; + function normalize(val) { + if (val < 0) { return -Math.floor(Math.abs(val)); } + return Math.floor(val); + } + var normalizedTranslate = normalize(translate); + var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); }); + var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); }); + + var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)]; + var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; + var prevIndex; + if (typeof prevSnap !== 'undefined') { + prevIndex = slidesGrid.indexOf(prevSnap); + if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; } + } + return swiper.slideTo(prevIndex, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slideReset (speed, runCallbacks, internal) { + if ( speed === void 0 ) speed = this.params.speed; + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slideToClosest (speed, runCallbacks, internal) { + if ( speed === void 0 ) speed = this.params.speed; + if ( runCallbacks === void 0 ) runCallbacks = true; + + var swiper = this; + var index = swiper.activeIndex; + var snapIndex = Math.floor(index / swiper.params.slidesPerGroup); + + if (snapIndex < swiper.snapGrid.length - 1) { + var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; + + var currentSnap = swiper.snapGrid[snapIndex]; + var nextSnap = swiper.snapGrid[snapIndex + 1]; + + if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) { + index = swiper.params.slidesPerGroup; + } + } + + return swiper.slideTo(index, speed, runCallbacks, internal); + } + + function slideToClickedSlide () { + var swiper = this; + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl; + + var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; + var slideToIndex = swiper.clickedIndex; + var realIndex; + if (params.loop) { + if (swiper.animating) { return; } + realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); + if (params.centeredSlides) { + if ( + (slideToIndex < swiper.loopedSlides - (slidesPerView / 2)) + || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2)) + ) { + swiper.loopFix(); + slideToIndex = $wrapperEl + .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")")) + .eq(0) + .index(); + + Utils.nextTick(function () { + swiper.slideTo(slideToIndex); + }); + } else { + swiper.slideTo(slideToIndex); + } + } else if (slideToIndex > swiper.slides.length - slidesPerView) { + swiper.loopFix(); + slideToIndex = $wrapperEl + .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")")) + .eq(0) + .index(); + + Utils.nextTick(function () { + swiper.slideTo(slideToIndex); + }); + } else { + swiper.slideTo(slideToIndex); + } + } else { + swiper.slideTo(slideToIndex); + } + } + + var slide = { + slideTo: slideTo, + slideToLoop: slideToLoop, + slideNext: slideNext, + slidePrev: slidePrev, + slideReset: slideReset, + slideToClosest: slideToClosest, + slideToClickedSlide: slideToClickedSlide, + }; + + function loopCreate () { + var swiper = this; + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl; + // Remove duplicated slides + $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove(); + + var slides = $wrapperEl.children(("." + (params.slideClass))); + + if (params.loopFillGroupWithBlank) { + var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup); + if (blankSlidesNum !== params.slidesPerGroup) { + for (var i = 0; i < blankSlidesNum; i += 1) { + var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + " " + (params.slideBlankClass))); + $wrapperEl.append(blankNode); + } + slides = $wrapperEl.children(("." + (params.slideClass))); + } + } + + if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; } + + swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10); + swiper.loopedSlides += params.loopAdditionalSlides; + if (swiper.loopedSlides > slides.length) { + swiper.loopedSlides = slides.length; + } + + var prependSlides = []; + var appendSlides = []; + slides.each(function (index, el) { + var slide = $(el); + if (index < swiper.loopedSlides) { appendSlides.push(el); } + if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); } + slide.attr('data-swiper-slide-index', index); + }); + for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) { + $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass)); + } + for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) { + $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass)); + } + } + + function loopFix () { + var swiper = this; + var params = swiper.params; + var activeIndex = swiper.activeIndex; + var slides = swiper.slides; + var loopedSlides = swiper.loopedSlides; + var allowSlidePrev = swiper.allowSlidePrev; + var allowSlideNext = swiper.allowSlideNext; + var snapGrid = swiper.snapGrid; + var rtl = swiper.rtlTranslate; + var newIndex; + swiper.allowSlidePrev = true; + swiper.allowSlideNext = true; + + var snapTranslate = -snapGrid[activeIndex]; + var diff = snapTranslate - swiper.getTranslate(); + + + // Fix For Negative Oversliding + if (activeIndex < loopedSlides) { + newIndex = (slides.length - (loopedSlides * 3)) + activeIndex; + newIndex += loopedSlides; + var slideChanged = swiper.slideTo(newIndex, 0, false, true); + if (slideChanged && diff !== 0) { + swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); + } + } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) { + // Fix For Positive Oversliding + newIndex = -slides.length + activeIndex + loopedSlides; + newIndex += loopedSlides; + var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true); + if (slideChanged$1 && diff !== 0) { + swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); + } + } + swiper.allowSlidePrev = allowSlidePrev; + swiper.allowSlideNext = allowSlideNext; + } + + function loopDestroy () { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl; + var params = swiper.params; + var slides = swiper.slides; + $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove(); + slides.removeAttr('data-swiper-slide-index'); + } + + var loop = { + loopCreate: loopCreate, + loopFix: loopFix, + loopDestroy: loopDestroy, + }; + + function setGrabCursor (moving) { + var swiper = this; + if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; } + var el = swiper.el; + el.style.cursor = 'move'; + el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; + el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; + el.style.cursor = moving ? 'grabbing' : 'grab'; + } + + function unsetGrabCursor () { + var swiper = this; + if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; } + swiper.el.style.cursor = ''; + } + + var grabCursor = { + setGrabCursor: setGrabCursor, + unsetGrabCursor: unsetGrabCursor, + }; + + function appendSlide (slides) { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl; + var params = swiper.params; + if (params.loop) { + swiper.loopDestroy(); + } + if (typeof slides === 'object' && 'length' in slides) { + for (var i = 0; i < slides.length; i += 1) { + if (slides[i]) { $wrapperEl.append(slides[i]); } + } + } else { + $wrapperEl.append(slides); + } + if (params.loop) { + swiper.loopCreate(); + } + if (!(params.observer && Support.observer)) { + swiper.update(); + } + } + + function prependSlide (slides) { + var swiper = this; + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl; + var activeIndex = swiper.activeIndex; + + if (params.loop) { + swiper.loopDestroy(); + } + var newActiveIndex = activeIndex + 1; + if (typeof slides === 'object' && 'length' in slides) { + for (var i = 0; i < slides.length; i += 1) { + if (slides[i]) { $wrapperEl.prepend(slides[i]); } + } + newActiveIndex = activeIndex + slides.length; + } else { + $wrapperEl.prepend(slides); + } + if (params.loop) { + swiper.loopCreate(); + } + if (!(params.observer && Support.observer)) { + swiper.update(); + } + swiper.slideTo(newActiveIndex, 0, false); + } + + function addSlide (index, slides) { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl; + var params = swiper.params; + var activeIndex = swiper.activeIndex; + var activeIndexBuffer = activeIndex; + if (params.loop) { + activeIndexBuffer -= swiper.loopedSlides; + swiper.loopDestroy(); + swiper.slides = $wrapperEl.children(("." + (params.slideClass))); + } + var baseLength = swiper.slides.length; + if (index <= 0) { + swiper.prependSlide(slides); + return; + } + if (index >= baseLength) { + swiper.appendSlide(slides); + return; + } + var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; + + var slidesBuffer = []; + for (var i = baseLength - 1; i >= index; i -= 1) { + var currentSlide = swiper.slides.eq(i); + currentSlide.remove(); + slidesBuffer.unshift(currentSlide); + } + + if (typeof slides === 'object' && 'length' in slides) { + for (var i$1 = 0; i$1 < slides.length; i$1 += 1) { + if (slides[i$1]) { $wrapperEl.append(slides[i$1]); } + } + newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; + } else { + $wrapperEl.append(slides); + } + + for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) { + $wrapperEl.append(slidesBuffer[i$2]); + } + + if (params.loop) { + swiper.loopCreate(); + } + if (!(params.observer && Support.observer)) { + swiper.update(); + } + if (params.loop) { + swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); + } else { + swiper.slideTo(newActiveIndex, 0, false); + } + } + + function removeSlide (slidesIndexes) { + var swiper = this; + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl; + var activeIndex = swiper.activeIndex; + + var activeIndexBuffer = activeIndex; + if (params.loop) { + activeIndexBuffer -= swiper.loopedSlides; + swiper.loopDestroy(); + swiper.slides = $wrapperEl.children(("." + (params.slideClass))); + } + var newActiveIndex = activeIndexBuffer; + var indexToRemove; + + if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { + for (var i = 0; i < slidesIndexes.length; i += 1) { + indexToRemove = slidesIndexes[i]; + if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); } + if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; } + } + newActiveIndex = Math.max(newActiveIndex, 0); + } else { + indexToRemove = slidesIndexes; + if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); } + if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; } + newActiveIndex = Math.max(newActiveIndex, 0); + } + + if (params.loop) { + swiper.loopCreate(); + } + + if (!(params.observer && Support.observer)) { + swiper.update(); + } + if (params.loop) { + swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); + } else { + swiper.slideTo(newActiveIndex, 0, false); + } + } + + function removeAllSlides () { + var swiper = this; + + var slidesIndexes = []; + for (var i = 0; i < swiper.slides.length; i += 1) { + slidesIndexes.push(i); + } + swiper.removeSlide(slidesIndexes); + } + + var manipulation = { + appendSlide: appendSlide, + prependSlide: prependSlide, + addSlide: addSlide, + removeSlide: removeSlide, + removeAllSlides: removeAllSlides, + }; + + var Device = (function Device() { + var ua = win.navigator.userAgent; + + var device = { + ios: false, + android: false, + androidChrome: false, + desktop: false, + windows: false, + iphone: false, + ipod: false, + ipad: false, + cordova: win.cordova || win.phonegap, + phonegap: win.cordova || win.phonegap, + }; + + var windows = ua.match(/(Windows Phone);?[\s\/]+([\d.]+)?/); // eslint-disable-line + var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line + var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); + var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); + var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); + + + // 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') { + var osVersionArr = device.osVersion.split('.'); + var metaViewport = doc.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 = win.devicePixelRatio || 1; + + // Export object + return device; + }()); + + function onTouchStart (event) { + var swiper = this; + var data = swiper.touchEventsData; + var params = swiper.params; + var touches = swiper.touches; + if (swiper.animating && params.preventInteractionOnTransition) { + return; + } + var e = event; + if (e.originalEvent) { e = e.originalEvent; } + data.isTouchEvent = e.type === 'touchstart'; + if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; } + if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; } + if (data.isTouched && data.isMoved) { return; } + if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : ("." + (params.noSwipingClass)))[0]) { + swiper.allowClick = true; + return; + } + if (params.swipeHandler) { + if (!$(e).closest(params.swipeHandler)[0]) { return; } + } + + touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + var startX = touches.currentX; + var startY = touches.currentY; + + // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore + + var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; + var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; + if ( + edgeSwipeDetection + && ((startX <= edgeSwipeThreshold) + || (startX >= win.screen.width - edgeSwipeThreshold)) + ) { + return; + } + + Utils.extend(data, { + isTouched: true, + isMoved: false, + allowTouchCallbacks: true, + isScrolling: undefined, + startMoving: undefined, + }); + + touches.startX = startX; + touches.startY = startY; + data.touchStartTime = Utils.now(); + swiper.allowClick = true; + swiper.updateSize(); + swiper.swipeDirection = undefined; + if (params.threshold > 0) { data.allowThresholdMove = false; } + if (e.type !== 'touchstart') { + var preventDefault = true; + if ($(e.target).is(data.formElements)) { preventDefault = false; } + if ( + doc.activeElement + && $(doc.activeElement).is(data.formElements) + && doc.activeElement !== e.target + ) { + doc.activeElement.blur(); + } + if (preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault) { + e.preventDefault(); + } + } + swiper.emit('touchStart', e); + } + + function onTouchMove (event) { + var swiper = this; + var data = swiper.touchEventsData; + var params = swiper.params; + var touches = swiper.touches; + var rtl = swiper.rtlTranslate; + var e = event; + if (e.originalEvent) { e = e.originalEvent; } + if (!data.isTouched) { + if (data.startMoving && data.isScrolling) { + swiper.emit('touchMoveOpposite', e); + } + return; + } + if (data.isTouchEvent && e.type === 'mousemove') { return; } + var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + if (e.preventedByNestedSwiper) { + touches.startX = pageX; + touches.startY = pageY; + return; + } + if (!swiper.allowTouchMove) { + // isMoved = true; + swiper.allowClick = false; + if (data.isTouched) { + Utils.extend(touches, { + startX: pageX, + startY: pageY, + currentX: pageX, + currentY: pageY, + }); + data.touchStartTime = Utils.now(); + } + return; + } + if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { + if (swiper.isVertical()) { + // Vertical + if ( + (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) + || (pageY > touches.startY && swiper.translate >= swiper.minTranslate()) + ) { + data.isTouched = false; + data.isMoved = false; + return; + } + } else if ( + (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) + || (pageX > touches.startX && swiper.translate >= swiper.minTranslate()) + ) { + return; + } + } + if (data.isTouchEvent && doc.activeElement) { + if (e.target === doc.activeElement && $(e.target).is(data.formElements)) { + data.isMoved = true; + swiper.allowClick = false; + return; + } + } + if (data.allowTouchCallbacks) { + swiper.emit('touchMove', e); + } + if (e.targetTouches && e.targetTouches.length > 1) { return; } + + touches.currentX = pageX; + touches.currentY = pageY; + + var diffX = touches.currentX - touches.startX; + var diffY = touches.currentY - touches.startY; + if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; } + + if (typeof data.isScrolling === 'undefined') { + var touchAngle; + if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) { + data.isScrolling = false; + } else { + // eslint-disable-next-line + if ((diffX * diffX) + (diffY * diffY) >= 25) { + touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI; + data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle); + } + } + } + if (data.isScrolling) { + swiper.emit('touchMoveOpposite', e); + } + if (typeof data.startMoving === 'undefined') { + if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { + data.startMoving = true; + } + } + if (data.isScrolling) { + data.isTouched = false; + return; + } + if (!data.startMoving) { + return; + } + swiper.allowClick = false; + e.preventDefault(); + if (params.touchMoveStopPropagation && !params.nested) { + e.stopPropagation(); + } + + if (!data.isMoved) { + if (params.loop) { + swiper.loopFix(); + } + data.startTranslate = swiper.getTranslate(); + swiper.setTransition(0); + if (swiper.animating) { + swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); + } + data.allowMomentumBounce = false; + // Grab Cursor + if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { + swiper.setGrabCursor(true); + } + swiper.emit('sliderFirstMove', e); + } + swiper.emit('sliderMove', e); + data.isMoved = true; + + var diff = swiper.isHorizontal() ? diffX : diffY; + touches.diff = diff; + + diff *= params.touchRatio; + if (rtl) { diff = -diff; } + + swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; + data.currentTranslate = diff + data.startTranslate; + + var disableParentSwiper = true; + var resistanceRatio = params.resistanceRatio; + if (params.touchReleaseOnEdges) { + resistanceRatio = 0; + } + if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) { + disableParentSwiper = false; + if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); } + } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { + disableParentSwiper = false; + if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); } + } + + if (disableParentSwiper) { + e.preventedByNestedSwiper = true; + } + + // Directions locks + if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { + data.currentTranslate = data.startTranslate; + } + if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { + data.currentTranslate = data.startTranslate; + } + + + // Threshold + if (params.threshold > 0) { + if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { + if (!data.allowThresholdMove) { + data.allowThresholdMove = true; + touches.startX = touches.currentX; + touches.startY = touches.currentY; + data.currentTranslate = data.startTranslate; + touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; + return; + } + } else { + data.currentTranslate = data.startTranslate; + return; + } + } + + if (!params.followFinger) { return; } + + // Update active index in free mode + if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) { + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } + if (params.freeMode) { + // Velocity + if (data.velocities.length === 0) { + data.velocities.push({ + position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], + time: data.touchStartTime, + }); + } + data.velocities.push({ + position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], + time: Utils.now(), + }); + } + // Update progress + swiper.updateProgress(data.currentTranslate); + // Update translate + swiper.setTranslate(data.currentTranslate); + } + + function onTouchEnd (event) { + var swiper = this; + var data = swiper.touchEventsData; + + var params = swiper.params; + var touches = swiper.touches; + var rtl = swiper.rtlTranslate; + var $wrapperEl = swiper.$wrapperEl; + var slidesGrid = swiper.slidesGrid; + var snapGrid = swiper.snapGrid; + var e = event; + if (e.originalEvent) { e = e.originalEvent; } + if (data.allowTouchCallbacks) { + swiper.emit('touchEnd', e); + } + data.allowTouchCallbacks = false; + if (!data.isTouched) { + if (data.isMoved && params.grabCursor) { + swiper.setGrabCursor(false); + } + data.isMoved = false; + data.startMoving = false; + return; + } + // Return Grab Cursor + if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { + swiper.setGrabCursor(false); + } + + // Time diff + var touchEndTime = Utils.now(); + var timeDiff = touchEndTime - data.touchStartTime; + + // Tap, doubleTap, Click + if (swiper.allowClick) { + swiper.updateClickedSlide(e); + swiper.emit('tap', e); + if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) { + if (data.clickTimeout) { clearTimeout(data.clickTimeout); } + data.clickTimeout = Utils.nextTick(function () { + if (!swiper || swiper.destroyed) { return; } + swiper.emit('click', e); + }, 300); + } + if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) { + if (data.clickTimeout) { clearTimeout(data.clickTimeout); } + swiper.emit('doubleTap', e); + } + } + + data.lastClickTime = Utils.now(); + Utils.nextTick(function () { + if (!swiper.destroyed) { swiper.allowClick = true; } + }); + + if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { + data.isTouched = false; + data.isMoved = false; + data.startMoving = false; + return; + } + data.isTouched = false; + data.isMoved = false; + data.startMoving = false; + + var currentPos; + if (params.followFinger) { + currentPos = rtl ? swiper.translate : -swiper.translate; + } else { + currentPos = -data.currentTranslate; + } + + if (params.freeMode) { + if (currentPos < -swiper.minTranslate()) { + swiper.slideTo(swiper.activeIndex); + return; + } + if (currentPos > -swiper.maxTranslate()) { + if (swiper.slides.length < snapGrid.length) { + swiper.slideTo(snapGrid.length - 1); + } else { + swiper.slideTo(swiper.slides.length - 1); + } + return; + } + + if (params.freeModeMomentum) { + if (data.velocities.length > 1) { + var lastMoveEvent = data.velocities.pop(); + var velocityEvent = data.velocities.pop(); + + var distance = lastMoveEvent.position - velocityEvent.position; + var time = lastMoveEvent.time - velocityEvent.time; + swiper.velocity = distance / time; + swiper.velocity /= 2; + if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) { + swiper.velocity = 0; + } + // this implies that the user stopped moving a finger then released. + // There would be no events with distance zero, so the last event is stale. + if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) { + swiper.velocity = 0; + } + } else { + swiper.velocity = 0; + } + swiper.velocity *= params.freeModeMomentumVelocityRatio; + + data.velocities.length = 0; + var momentumDuration = 1000 * params.freeModeMomentumRatio; + var momentumDistance = swiper.velocity * momentumDuration; + + var newPosition = swiper.translate + momentumDistance; + if (rtl) { newPosition = -newPosition; } + + var doBounce = false; + var afterBouncePosition; + var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio; + var needsLoopFix; + if (newPosition < swiper.maxTranslate()) { + if (params.freeModeMomentumBounce) { + if (newPosition + swiper.maxTranslate() < -bounceAmount) { + newPosition = swiper.maxTranslate() - bounceAmount; + } + afterBouncePosition = swiper.maxTranslate(); + doBounce = true; + data.allowMomentumBounce = true; + } else { + newPosition = swiper.maxTranslate(); + } + if (params.loop && params.centeredSlides) { needsLoopFix = true; } + } else if (newPosition > swiper.minTranslate()) { + if (params.freeModeMomentumBounce) { + if (newPosition - swiper.minTranslate() > bounceAmount) { + newPosition = swiper.minTranslate() + bounceAmount; + } + afterBouncePosition = swiper.minTranslate(); + doBounce = true; + data.allowMomentumBounce = true; + } else { + newPosition = swiper.minTranslate(); + } + if (params.loop && params.centeredSlides) { needsLoopFix = true; } + } else if (params.freeModeSticky) { + var nextSlide; + for (var j = 0; j < snapGrid.length; j += 1) { + if (snapGrid[j] > -newPosition) { + nextSlide = j; + break; + } + } + + if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { + newPosition = snapGrid[nextSlide]; + } else { + newPosition = snapGrid[nextSlide - 1]; + } + newPosition = -newPosition; + } + if (needsLoopFix) { + swiper.once('transitionEnd', function () { + swiper.loopFix(); + }); + } + // Fix duration + if (swiper.velocity !== 0) { + if (rtl) { + momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); + } else { + momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); + } + } else if (params.freeModeSticky) { + swiper.slideToClosest(); + return; + } + + if (params.freeModeMomentumBounce && doBounce) { + swiper.updateProgress(afterBouncePosition); + swiper.setTransition(momentumDuration); + swiper.setTranslate(newPosition); + swiper.transitionStart(true, swiper.swipeDirection); + swiper.animating = true; + $wrapperEl.transitionEnd(function () { + if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; } + swiper.emit('momentumBounce'); + + swiper.setTransition(params.speed); + swiper.setTranslate(afterBouncePosition); + $wrapperEl.transitionEnd(function () { + if (!swiper || swiper.destroyed) { return; } + swiper.transitionEnd(); + }); + }); + } else if (swiper.velocity) { + swiper.updateProgress(newPosition); + swiper.setTransition(momentumDuration); + swiper.setTranslate(newPosition); + swiper.transitionStart(true, swiper.swipeDirection); + if (!swiper.animating) { + swiper.animating = true; + $wrapperEl.transitionEnd(function () { + if (!swiper || swiper.destroyed) { return; } + swiper.transitionEnd(); + }); + } + } else { + swiper.updateProgress(newPosition); + } + + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } else if (params.freeModeSticky) { + swiper.slideToClosest(); + return; + } + + if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) { + swiper.updateProgress(); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } + return; + } + + // Find current slide + var stopIndex = 0; + var groupSize = swiper.slidesSizesGrid[0]; + for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) { + if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') { + if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) { + stopIndex = i; + groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i]; + } + } else if (currentPos >= slidesGrid[i]) { + stopIndex = i; + groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; + } + } + + // Find current slide size + var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; + + if (timeDiff > params.longSwipesMs) { + // Long touches + if (!params.longSwipes) { + swiper.slideTo(swiper.activeIndex); + return; + } + if (swiper.swipeDirection === 'next') { + if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); } + else { swiper.slideTo(stopIndex); } + } + if (swiper.swipeDirection === 'prev') { + if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); } + else { swiper.slideTo(stopIndex); } + } + } else { + // Short swipes + if (!params.shortSwipes) { + swiper.slideTo(swiper.activeIndex); + return; + } + if (swiper.swipeDirection === 'next') { + swiper.slideTo(stopIndex + params.slidesPerGroup); + } + if (swiper.swipeDirection === 'prev') { + swiper.slideTo(stopIndex); + } + } + } + + function onResize () { + var swiper = this; + + var params = swiper.params; + var el = swiper.el; + + if (el && el.offsetWidth === 0) { return; } + + // Breakpoints + if (params.breakpoints) { + swiper.setBreakpoint(); + } + + // Save locks + var allowSlideNext = swiper.allowSlideNext; + var allowSlidePrev = swiper.allowSlidePrev; + var snapGrid = swiper.snapGrid; + + // Disable locks on resize + swiper.allowSlideNext = true; + swiper.allowSlidePrev = true; + + swiper.updateSize(); + swiper.updateSlides(); + + if (params.freeMode) { + var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate()); + swiper.setTranslate(newTranslate); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + + if (params.autoHeight) { + swiper.updateAutoHeight(); + } + } else { + swiper.updateSlidesClasses(); + if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { + swiper.slideTo(swiper.slides.length - 1, 0, false, true); + } else { + swiper.slideTo(swiper.activeIndex, 0, false, true); + } + } + // Return locks after resize + swiper.allowSlidePrev = allowSlidePrev; + swiper.allowSlideNext = allowSlideNext; + + if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { + swiper.checkOverflow(); + } + } + + function onClick (e) { + var swiper = this; + if (!swiper.allowClick) { + if (swiper.params.preventClicks) { e.preventDefault(); } + if (swiper.params.preventClicksPropagation && swiper.animating) { + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + } + + function attachEvents() { + var swiper = this; + var params = swiper.params; + var touchEvents = swiper.touchEvents; + var el = swiper.el; + var wrapperEl = swiper.wrapperEl; + + { + swiper.onTouchStart = onTouchStart.bind(swiper); + swiper.onTouchMove = onTouchMove.bind(swiper); + swiper.onTouchEnd = onTouchEnd.bind(swiper); + } + + swiper.onClick = onClick.bind(swiper); + + var target = params.touchEventsTarget === 'container' ? el : wrapperEl; + var capture = !!params.nested; + + // Touch Events + { + if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) { + target.addEventListener(touchEvents.start, swiper.onTouchStart, false); + doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture); + doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false); + } else { + if (Support.touch) { + var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; + target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); + target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture); + target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); + } + if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) { + target.addEventListener('mousedown', swiper.onTouchStart, false); + doc.addEventListener('mousemove', swiper.onTouchMove, capture); + doc.addEventListener('mouseup', swiper.onTouchEnd, false); + } + } + // Prevent Links Clicks + if (params.preventClicks || params.preventClicksPropagation) { + target.addEventListener('click', swiper.onClick, true); + } + } + + // Resize handler + swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true); + } + + function detachEvents() { + var swiper = this; + + var params = swiper.params; + var touchEvents = swiper.touchEvents; + var el = swiper.el; + var wrapperEl = swiper.wrapperEl; + + var target = params.touchEventsTarget === 'container' ? el : wrapperEl; + var capture = !!params.nested; + + // Touch Events + { + if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) { + target.removeEventListener(touchEvents.start, swiper.onTouchStart, false); + doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); + doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false); + } else { + if (Support.touch) { + var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; + target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); + target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); + target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); + } + if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) { + target.removeEventListener('mousedown', swiper.onTouchStart, false); + doc.removeEventListener('mousemove', swiper.onTouchMove, capture); + doc.removeEventListener('mouseup', swiper.onTouchEnd, false); + } + } + // Prevent Links Clicks + if (params.preventClicks || params.preventClicksPropagation) { + target.removeEventListener('click', swiper.onClick, true); + } + } + + // Resize handler + swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize); + } + + var events = { + attachEvents: attachEvents, + detachEvents: detachEvents, + }; + + function setBreakpoint () { + var swiper = this; + var activeIndex = swiper.activeIndex; + var initialized = swiper.initialized; + var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0; + var params = swiper.params; + var breakpoints = params.breakpoints; + if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; } + // Set breakpoint for window width and update parameters + var breakpoint = swiper.getBreakpoint(breakpoints); + if (breakpoint && swiper.currentBreakpoint !== breakpoint) { + var breakPointsParams = breakpoint in breakpoints ? breakpoints[breakpoint] : swiper.originalParams; + var needsReLoop = params.loop && (breakPointsParams.slidesPerView !== params.slidesPerView); + + Utils.extend(swiper.params, breakPointsParams); + + Utils.extend(swiper, { + allowTouchMove: swiper.params.allowTouchMove, + allowSlideNext: swiper.params.allowSlideNext, + allowSlidePrev: swiper.params.allowSlidePrev, + }); + + swiper.currentBreakpoint = breakpoint; + + if (needsReLoop && initialized) { + swiper.loopDestroy(); + swiper.loopCreate(); + swiper.updateSlides(); + swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false); + } + swiper.emit('breakpoint', breakPointsParams); + } + } + + function getBreakpoint (breakpoints) { + var swiper = this; + // Get breakpoint for window width + if (!breakpoints) { return undefined; } + var breakpoint = false; + var points = []; + Object.keys(breakpoints).forEach(function (point) { + points.push(point); + }); + points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); }); + for (var i = 0; i < points.length; i += 1) { + var point = points[i]; + if (swiper.params.breakpointsInverse) { + if (point <= win.innerWidth) { + breakpoint = point; + } + } else if (point >= win.innerWidth && !breakpoint) { + breakpoint = point; + } + } + return breakpoint || 'max'; + } + + var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint }; + + var Browser = (function Browser() { + function isSafari() { + var ua = win.navigator.userAgent.toLowerCase(); + return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); + } + return { + isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g), + isEdge: !!win.navigator.userAgent.match(/Edge/g), + isSafari: isSafari(), + isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent), + }; + }()); + + function addClasses () { + var swiper = this; + var classNames = swiper.classNames; + var params = swiper.params; + var rtl = swiper.rtl; + var $el = swiper.$el; + var suffixes = []; + + suffixes.push(params.direction); + + if (params.freeMode) { + suffixes.push('free-mode'); + } + if (!Support.flexbox) { + suffixes.push('no-flexbox'); + } + if (params.autoHeight) { + suffixes.push('autoheight'); + } + if (rtl) { + suffixes.push('rtl'); + } + if (params.slidesPerColumn > 1) { + suffixes.push('multirow'); + } + if (Device.android) { + suffixes.push('android'); + } + if (Device.ios) { + suffixes.push('ios'); + } + // WP8 Touch Events Fix + if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) { + suffixes.push(("wp8-" + (params.direction))); + } + + suffixes.forEach(function (suffix) { + classNames.push(params.containerModifierClass + suffix); + }); + + $el.addClass(classNames.join(' ')); + } + + function removeClasses () { + var swiper = this; + var $el = swiper.$el; + var classNames = swiper.classNames; + + $el.removeClass(classNames.join(' ')); + } + + var classes = { addClasses: addClasses, removeClasses: removeClasses }; + + function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) { + var image; + function onReady() { + if (callback) { callback(); } + } + if (!imageEl.complete || !checkForComplete) { + if (src) { + image = new win.Image(); + image.onload = onReady; + image.onerror = onReady; + if (sizes) { + image.sizes = sizes; + } + if (srcset) { + image.srcset = srcset; + } + if (src) { + image.src = src; + } + } else { + onReady(); + } + } else { + // image already loaded... + onReady(); + } + } + + function preloadImages () { + var swiper = this; + swiper.imagesToLoad = swiper.$el.find('img'); + function onReady() { + if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; } + if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; } + if (swiper.imagesLoaded === swiper.imagesToLoad.length) { + if (swiper.params.updateOnImagesReady) { swiper.update(); } + swiper.emit('imagesReady'); + } + } + for (var i = 0; i < swiper.imagesToLoad.length; i += 1) { + var imageEl = swiper.imagesToLoad[i]; + swiper.loadImage( + imageEl, + imageEl.currentSrc || imageEl.getAttribute('src'), + imageEl.srcset || imageEl.getAttribute('srcset'), + imageEl.sizes || imageEl.getAttribute('sizes'), + true, + onReady + ); + } + } + + var images = { + loadImage: loadImage, + preloadImages: preloadImages, + }; + + function checkOverflow() { + var swiper = this; + var wasLocked = swiper.isLocked; + + swiper.isLocked = swiper.snapGrid.length === 1; + swiper.allowSlideNext = !swiper.isLocked; + swiper.allowSlidePrev = !swiper.isLocked; + + // events + if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); } + + if (wasLocked && wasLocked !== swiper.isLocked) { + swiper.isEnd = false; + swiper.navigation.update(); + } + } + + var checkOverflow$1 = { checkOverflow: checkOverflow }; + + var defaults = { + init: true, + direction: 'horizontal', + touchEventsTarget: 'container', + initialSlide: 0, + speed: 300, + // + preventInteractionOnTransition: false, + + // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView). + edgeSwipeDetection: false, + edgeSwipeThreshold: 20, + + // Free mode + freeMode: false, + freeModeMomentum: true, + freeModeMomentumRatio: 1, + freeModeMomentumBounce: true, + freeModeMomentumBounceRatio: 1, + freeModeMomentumVelocityRatio: 1, + freeModeSticky: false, + freeModeMinimumVelocity: 0.02, + + // Autoheight + autoHeight: false, + + // Set wrapper width + setWrapperSize: false, + + // Virtual Translate + virtualTranslate: false, + + // Effects + effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' + + // Breakpoints + breakpoints: undefined, + breakpointsInverse: false, + + // Slides grid + spaceBetween: 0, + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerColumnFill: 'column', + slidesPerGroup: 1, + centeredSlides: false, + slidesOffsetBefore: 0, // in px + slidesOffsetAfter: 0, // in px + normalizeSlideIndex: true, + centerInsufficientSlides: false, + + // Disable swiper and hide navigation when container not overflow + watchOverflow: false, + + // Round length + roundLengths: false, + + // Touches + touchRatio: 1, + touchAngle: 45, + simulateTouch: true, + shortSwipes: true, + longSwipes: true, + longSwipesRatio: 0.5, + longSwipesMs: 300, + followFinger: true, + allowTouchMove: true, + threshold: 0, + touchMoveStopPropagation: true, + touchStartPreventDefault: true, + touchReleaseOnEdges: false, + + // Unique Navigation Elements + uniqueNavElements: true, + + // Resistance + resistance: true, + resistanceRatio: 0.85, + + // Progress + watchSlidesProgress: false, + watchSlidesVisibility: false, + + // Cursor + grabCursor: false, + + // Clicks + preventClicks: true, + preventClicksPropagation: true, + slideToClickedSlide: false, + + // Images + preloadImages: true, + updateOnImagesReady: true, + + // loop + loop: false, + loopAdditionalSlides: 0, + loopedSlides: null, + loopFillGroupWithBlank: false, + + // Swiping/no swiping + allowSlidePrev: true, + allowSlideNext: true, + swipeHandler: null, // '.swipe-handler', + noSwiping: true, + noSwipingClass: 'swiper-no-swiping', + noSwipingSelector: null, + + // Passive Listeners + passiveListeners: true, + + // NS + containerModifierClass: 'swiper-container-', // NEW + slideClass: 'swiper-slide', + slideBlankClass: 'swiper-slide-invisible-blank', + slideActiveClass: 'swiper-slide-active', + slideDuplicateActiveClass: 'swiper-slide-duplicate-active', + slideVisibleClass: 'swiper-slide-visible', + slideDuplicateClass: 'swiper-slide-duplicate', + slideNextClass: 'swiper-slide-next', + slideDuplicateNextClass: 'swiper-slide-duplicate-next', + slidePrevClass: 'swiper-slide-prev', + slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', + wrapperClass: 'swiper-wrapper', + + // Callbacks + runCallbacksOnInit: true, + }; + + var prototypes = { + update: update, + translate: translate, + transition: transition$1, + slide: slide, + loop: loop, + grabCursor: grabCursor, + manipulation: manipulation, + events: events, + breakpoints: breakpoints, + checkOverflow: checkOverflow$1, + classes: classes, + images: images, + }; + + var extendedDefaults = {}; + + var Swiper = (function (SwiperClass$$1) { + function Swiper() { + var assign; + + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + var el; + var params; + if (args.length === 1 && args[0].constructor && args[0].constructor === Object) { + params = args[0]; + } else { + (assign = args, el = assign[0], params = assign[1]); + } + if (!params) { params = {}; } + + params = Utils.extend({}, params); + if (el && !params.el) { params.el = el; } + + SwiperClass$$1.call(this, params); + + Object.keys(prototypes).forEach(function (prototypeGroup) { + Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) { + if (!Swiper.prototype[protoMethod]) { + Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; + } + }); + }); + + // Swiper Instance + var swiper = this; + if (typeof swiper.modules === 'undefined') { + swiper.modules = {}; + } + Object.keys(swiper.modules).forEach(function (moduleName) { + var module = swiper.modules[moduleName]; + if (module.params) { + var moduleParamName = Object.keys(module.params)[0]; + var moduleParams = module.params[moduleParamName]; + if (typeof moduleParams !== 'object' || moduleParams === null) { return; } + if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; } + if (params[moduleParamName] === true) { + params[moduleParamName] = { enabled: true }; + } + if ( + typeof params[moduleParamName] === 'object' + && !('enabled' in params[moduleParamName]) + ) { + params[moduleParamName].enabled = true; + } + if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; } + } + }); + + // Extend defaults with modules params + var swiperParams = Utils.extend({}, defaults); + swiper.useModulesParams(swiperParams); + + // Extend defaults with passed params + swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params); + swiper.originalParams = Utils.extend({}, swiper.params); + swiper.passedParams = Utils.extend({}, params); + + // Save Dom lib + swiper.$ = $; + + // Find el + var $el = $(swiper.params.el); + el = $el[0]; + + if (!el) { + return undefined; + } + + if ($el.length > 1) { + var swipers = []; + $el.each(function (index, containerEl) { + var newParams = Utils.extend({}, params, { el: containerEl }); + swipers.push(new Swiper(newParams)); + }); + return swipers; + } + + el.swiper = swiper; + $el.data('swiper', swiper); + + // Find Wrapper + var $wrapperEl = $el.children(("." + (swiper.params.wrapperClass))); + + // Extend Swiper + Utils.extend(swiper, { + $el: $el, + el: el, + $wrapperEl: $wrapperEl, + wrapperEl: $wrapperEl[0], + + // Classes + classNames: [], + + // Slides + slides: $(), + slidesGrid: [], + snapGrid: [], + slidesSizesGrid: [], + + // isDirection + isHorizontal: function isHorizontal() { + return swiper.params.direction === 'horizontal'; + }, + isVertical: function isVertical() { + return swiper.params.direction === 'vertical'; + }, + // RTL + rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), + rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), + wrongRTL: $wrapperEl.css('display') === '-webkit-box', + + // Indexes + activeIndex: 0, + realIndex: 0, + + // + isBeginning: true, + isEnd: false, + + // Props + translate: 0, + previousTranslate: 0, + progress: 0, + velocity: 0, + animating: false, + + // Locks + allowSlideNext: swiper.params.allowSlideNext, + allowSlidePrev: swiper.params.allowSlidePrev, + + // Touch Events + touchEvents: (function touchEvents() { + var touch = ['touchstart', 'touchmove', 'touchend']; + var desktop = ['mousedown', 'mousemove', 'mouseup']; + if (Support.pointerEvents) { + desktop = ['pointerdown', 'pointermove', 'pointerup']; + } else if (Support.prefixedPointerEvents) { + desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp']; + } + swiper.touchEventsTouch = { + start: touch[0], + move: touch[1], + end: touch[2], + }; + swiper.touchEventsDesktop = { + start: desktop[0], + move: desktop[1], + end: desktop[2], + }; + return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; + }()), + touchEventsData: { + isTouched: undefined, + isMoved: undefined, + allowTouchCallbacks: undefined, + touchStartTime: undefined, + isScrolling: undefined, + currentTranslate: undefined, + startTranslate: undefined, + allowThresholdMove: undefined, + // Form elements to match + formElements: 'input, select, option, textarea, button, video', + // Last click time + lastClickTime: Utils.now(), + clickTimeout: undefined, + // Velocities + velocities: [], + allowMomentumBounce: undefined, + isTouchEvent: undefined, + startMoving: undefined, + }, + + // Clicks + allowClick: true, + + // Touches + allowTouchMove: swiper.params.allowTouchMove, + + touches: { + startX: 0, + startY: 0, + currentX: 0, + currentY: 0, + diff: 0, + }, + + // Images + imagesToLoad: [], + imagesLoaded: 0, + + }); + + // Install Modules + swiper.useModules(); + + // Init + if (swiper.params.init) { + swiper.init(); + } + + // Return app instance + return swiper; + } + + if ( SwiperClass$$1 ) Swiper.__proto__ = SwiperClass$$1; + Swiper.prototype = Object.create( SwiperClass$$1 && SwiperClass$$1.prototype ); + Swiper.prototype.constructor = Swiper; + + var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } }; + + Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () { + var swiper = this; + var params = swiper.params; + var slides = swiper.slides; + var slidesGrid = swiper.slidesGrid; + var swiperSize = swiper.size; + var activeIndex = swiper.activeIndex; + var spv = 1; + if (params.centeredSlides) { + var slideSize = slides[activeIndex].swiperSlideSize; + var breakLoop; + for (var i = activeIndex + 1; i < slides.length; i += 1) { + if (slides[i] && !breakLoop) { + slideSize += slides[i].swiperSlideSize; + spv += 1; + if (slideSize > swiperSize) { breakLoop = true; } + } + } + for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) { + if (slides[i$1] && !breakLoop) { + slideSize += slides[i$1].swiperSlideSize; + spv += 1; + if (slideSize > swiperSize) { breakLoop = true; } + } + } + } else { + for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) { + if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) { + spv += 1; + } + } + } + return spv; + }; + + Swiper.prototype.update = function update$$1 () { + var swiper = this; + if (!swiper || swiper.destroyed) { return; } + var snapGrid = swiper.snapGrid; + var params = swiper.params; + // Breakpoints + if (params.breakpoints) { + swiper.setBreakpoint(); + } + swiper.updateSize(); + swiper.updateSlides(); + swiper.updateProgress(); + swiper.updateSlidesClasses(); + + function setTranslate() { + var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; + var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); + swiper.setTranslate(newTranslate); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } + var translated; + if (swiper.params.freeMode) { + setTranslate(); + if (swiper.params.autoHeight) { + swiper.updateAutoHeight(); + } + } else { + if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { + translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); + } else { + translated = swiper.slideTo(swiper.activeIndex, 0, false, true); + } + if (!translated) { + setTranslate(); + } + } + if (params.watchOverflow && snapGrid !== swiper.snapGrid) { + swiper.checkOverflow(); + } + swiper.emit('update'); + }; + + Swiper.prototype.init = function init () { + var swiper = this; + if (swiper.initialized) { return; } + + swiper.emit('beforeInit'); + + // Set breakpoint + if (swiper.params.breakpoints) { + swiper.setBreakpoint(); + } + + // Add Classes + swiper.addClasses(); + + // Create loop + if (swiper.params.loop) { + swiper.loopCreate(); + } + + // Update size + swiper.updateSize(); + + // Update slides + swiper.updateSlides(); + + if (swiper.params.watchOverflow) { + swiper.checkOverflow(); + } + + // Set Grab Cursor + if (swiper.params.grabCursor) { + swiper.setGrabCursor(); + } + + if (swiper.params.preloadImages) { + swiper.preloadImages(); + } + + // Slide To Initial Slide + if (swiper.params.loop) { + swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit); + } else { + swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit); + } + + // Attach events + swiper.attachEvents(); + + // Init Flag + swiper.initialized = true; + + // Emit + swiper.emit('init'); + }; + + Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) { + if ( deleteInstance === void 0 ) deleteInstance = true; + if ( cleanStyles === void 0 ) cleanStyles = true; + + var swiper = this; + var params = swiper.params; + var $el = swiper.$el; + var $wrapperEl = swiper.$wrapperEl; + var slides = swiper.slides; + + if (typeof swiper.params === 'undefined' || swiper.destroyed) { + return null; + } + + swiper.emit('beforeDestroy'); + + // Init Flag + swiper.initialized = false; + + // Detach events + swiper.detachEvents(); + + // Destroy loop + if (params.loop) { + swiper.loopDestroy(); + } + + // Cleanup styles + if (cleanStyles) { + swiper.removeClasses(); + $el.removeAttr('style'); + $wrapperEl.removeAttr('style'); + if (slides && slides.length) { + slides + .removeClass([ + params.slideVisibleClass, + params.slideActiveClass, + params.slideNextClass, + params.slidePrevClass ].join(' ')) + .removeAttr('style') + .removeAttr('data-swiper-slide-index') + .removeAttr('data-swiper-column') + .removeAttr('data-swiper-row'); + } + } + + swiper.emit('destroy'); + + // Detach emitter events + Object.keys(swiper.eventsListeners).forEach(function (eventName) { + swiper.off(eventName); + }); + + if (deleteInstance !== false) { + swiper.$el[0].swiper = null; + swiper.$el.data('swiper', null); + Utils.deleteProps(swiper); + } + swiper.destroyed = true; + + return null; + }; + + Swiper.extendDefaults = function extendDefaults (newDefaults) { + Utils.extend(extendedDefaults, newDefaults); + }; + + staticAccessors.extendedDefaults.get = function () { + return extendedDefaults; + }; + + staticAccessors.defaults.get = function () { + return defaults; + }; + + staticAccessors.Class.get = function () { + return SwiperClass$$1; + }; + + staticAccessors.$.get = function () { + return $; + }; + + Object.defineProperties( Swiper, staticAccessors ); + + return Swiper; + }(SwiperClass)); + + var Device$1 = { + name: 'device', + proto: { + device: Device, + }, + static: { + device: Device, + }, + }; + + var Support$1 = { + name: 'support', + proto: { + support: Support, + }, + static: { + support: Support, + }, + }; + + var Browser$1 = { + name: 'browser', + proto: { + browser: Browser, + }, + static: { + browser: Browser, + }, + }; + + var Resize = { + name: 'resize', + create: function create() { + var swiper = this; + Utils.extend(swiper, { + resize: { + resizeHandler: function resizeHandler() { + if (!swiper || swiper.destroyed || !swiper.initialized) { return; } + swiper.emit('beforeResize'); + swiper.emit('resize'); + }, + orientationChangeHandler: function orientationChangeHandler() { + if (!swiper || swiper.destroyed || !swiper.initialized) { return; } + swiper.emit('orientationchange'); + }, + }, + }); + }, + on: { + init: function init() { + var swiper = this; + // Emit resize + win.addEventListener('resize', swiper.resize.resizeHandler); + + // Emit orientationchange + win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler); + }, + destroy: function destroy() { + var swiper = this; + win.removeEventListener('resize', swiper.resize.resizeHandler); + win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler); + }, + }, + }; + + var Observer = { + func: win.MutationObserver || win.WebkitMutationObserver, + attach: function attach(target, options) { + if ( options === void 0 ) options = {}; + + var swiper = this; + + var ObserverFunc = Observer.func; + var observer = new ObserverFunc(function (mutations) { + // The observerUpdate event should only be triggered + // once despite the number of mutations. Additional + // triggers are redundant and are very costly + if (mutations.length === 1) { + swiper.emit('observerUpdate', mutations[0]); + return; + } + var observerUpdate = function observerUpdate() { + swiper.emit('observerUpdate', mutations[0]); + }; + + if (win.requestAnimationFrame) { + win.requestAnimationFrame(observerUpdate); + } else { + win.setTimeout(observerUpdate, 0); + } + }); + + observer.observe(target, { + attributes: typeof options.attributes === 'undefined' ? true : options.attributes, + childList: typeof options.childList === 'undefined' ? true : options.childList, + characterData: typeof options.characterData === 'undefined' ? true : options.characterData, + }); + + swiper.observer.observers.push(observer); + }, + init: function init() { + var swiper = this; + if (!Support.observer || !swiper.params.observer) { return; } + if (swiper.params.observeParents) { + var containerParents = swiper.$el.parents(); + for (var i = 0; i < containerParents.length; i += 1) { + swiper.observer.attach(containerParents[i]); + } + } + // Observe container + swiper.observer.attach(swiper.$el[0], { childList: false }); + + // Observe wrapper + swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false }); + }, + destroy: function destroy() { + var swiper = this; + swiper.observer.observers.forEach(function (observer) { + observer.disconnect(); + }); + swiper.observer.observers = []; + }, + }; + + var Observer$1 = { + name: 'observer', + params: { + observer: false, + observeParents: false, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + observer: { + init: Observer.init.bind(swiper), + attach: Observer.attach.bind(swiper), + destroy: Observer.destroy.bind(swiper), + observers: [], + }, + }); + }, + on: { + init: function init() { + var swiper = this; + swiper.observer.init(); + }, + destroy: function destroy() { + var swiper = this; + swiper.observer.destroy(); + }, + }, + }; + + var Virtual = { + update: function update(force) { + var swiper = this; + var ref = swiper.params; + var slidesPerView = ref.slidesPerView; + var slidesPerGroup = ref.slidesPerGroup; + var centeredSlides = ref.centeredSlides; + var ref$1 = swiper.params.virtual; + var addSlidesBefore = ref$1.addSlidesBefore; + var addSlidesAfter = ref$1.addSlidesAfter; + var ref$2 = swiper.virtual; + var previousFrom = ref$2.from; + var previousTo = ref$2.to; + var slides = ref$2.slides; + var previousSlidesGrid = ref$2.slidesGrid; + var renderSlide = ref$2.renderSlide; + var previousOffset = ref$2.offset; + swiper.updateActiveIndex(); + var activeIndex = swiper.activeIndex || 0; + + var offsetProp; + if (swiper.rtlTranslate) { offsetProp = 'right'; } + else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; } + + var slidesAfter; + var slidesBefore; + if (centeredSlides) { + slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; + slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; + } else { + slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore; + slidesBefore = slidesPerGroup + addSlidesAfter; + } + var from = Math.max((activeIndex || 0) - slidesBefore, 0); + var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); + var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); + + Utils.extend(swiper.virtual, { + from: from, + to: to, + offset: offset, + slidesGrid: swiper.slidesGrid, + }); + + function onRendered() { + swiper.updateSlides(); + swiper.updateProgress(); + swiper.updateSlidesClasses(); + if (swiper.lazy && swiper.params.lazy.enabled) { + swiper.lazy.load(); + } + } + + if (previousFrom === from && previousTo === to && !force) { + if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { + swiper.slides.css(offsetProp, (offset + "px")); + } + swiper.updateProgress(); + return; + } + if (swiper.params.virtual.renderExternal) { + swiper.params.virtual.renderExternal.call(swiper, { + offset: offset, + from: from, + to: to, + slides: (function getSlides() { + var slidesToRender = []; + for (var i = from; i <= to; i += 1) { + slidesToRender.push(slides[i]); + } + return slidesToRender; + }()), + }); + onRendered(); + return; + } + var prependIndexes = []; + var appendIndexes = []; + if (force) { + swiper.$wrapperEl.find(("." + (swiper.params.slideClass))).remove(); + } else { + for (var i = previousFrom; i <= previousTo; i += 1) { + if (i < from || i > to) { + swiper.$wrapperEl.find(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + i + "\"]")).remove(); + } + } + } + for (var i$1 = 0; i$1 < slides.length; i$1 += 1) { + if (i$1 >= from && i$1 <= to) { + if (typeof previousTo === 'undefined' || force) { + appendIndexes.push(i$1); + } else { + if (i$1 > previousTo) { appendIndexes.push(i$1); } + if (i$1 < previousFrom) { prependIndexes.push(i$1); } + } + } + } + appendIndexes.forEach(function (index) { + swiper.$wrapperEl.append(renderSlide(slides[index], index)); + }); + prependIndexes.sort(function (a, b) { return a < b; }).forEach(function (index) { + swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); + }); + swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + "px")); + onRendered(); + }, + renderSlide: function renderSlide(slide, index) { + var swiper = this; + var params = swiper.params.virtual; + if (params.cache && swiper.virtual.cache[index]) { + return swiper.virtual.cache[index]; + } + var $slideEl = params.renderSlide + ? $(params.renderSlide.call(swiper, slide, index)) + : $(("
" + slide + "
")); + if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); } + if (params.cache) { swiper.virtual.cache[index] = $slideEl; } + return $slideEl; + }, + appendSlide: function appendSlide(slide) { + var swiper = this; + swiper.virtual.slides.push(slide); + swiper.virtual.update(true); + }, + prependSlide: function prependSlide(slide) { + var swiper = this; + swiper.virtual.slides.unshift(slide); + if (swiper.params.virtual.cache) { + var cache = swiper.virtual.cache; + var newCache = {}; + Object.keys(cache).forEach(function (cachedIndex) { + newCache[cachedIndex + 1] = cache[cachedIndex]; + }); + swiper.virtual.cache = newCache; + } + swiper.virtual.update(true); + swiper.slideNext(0); + }, + }; + + var Virtual$1 = { + name: 'virtual', + params: { + virtual: { + enabled: false, + slides: [], + cache: true, + renderSlide: null, + renderExternal: null, + addSlidesBefore: 0, + addSlidesAfter: 0, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + virtual: { + update: Virtual.update.bind(swiper), + appendSlide: Virtual.appendSlide.bind(swiper), + prependSlide: Virtual.prependSlide.bind(swiper), + renderSlide: Virtual.renderSlide.bind(swiper), + slides: swiper.params.virtual.slides, + cache: {}, + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (!swiper.params.virtual.enabled) { return; } + swiper.classNames.push(((swiper.params.containerModifierClass) + "virtual")); + var overwriteParams = { + watchSlidesProgress: true, + }; + Utils.extend(swiper.params, overwriteParams); + Utils.extend(swiper.originalParams, overwriteParams); + + swiper.virtual.update(); + }, + setTranslate: function setTranslate() { + var swiper = this; + if (!swiper.params.virtual.enabled) { return; } + swiper.virtual.update(); + }, + }, + }; + + var Keyboard = { + handle: function handle(event) { + var swiper = this; + var rtl = swiper.rtlTranslate; + var e = event; + if (e.originalEvent) { e = e.originalEvent; } // jquery fix + var kc = e.keyCode || e.charCode; + // Directions locks + if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40))) { + return false; + } + if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38))) { + return false; + } + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return undefined; + } + if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) { + return undefined; + } + if (swiper.params.keyboard.onlyInViewport && (kc === 37 || kc === 39 || kc === 38 || kc === 40)) { + var inView = false; + // Check that swiper should be inside of visible area of window + if (swiper.$el.parents(("." + (swiper.params.slideClass))).length > 0 && swiper.$el.parents(("." + (swiper.params.slideActiveClass))).length === 0) { + return undefined; + } + var windowWidth = win.innerWidth; + var windowHeight = win.innerHeight; + var swiperOffset = swiper.$el.offset(); + if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; } + var swiperCoord = [ + [swiperOffset.left, swiperOffset.top], + [swiperOffset.left + swiper.width, swiperOffset.top], + [swiperOffset.left, swiperOffset.top + swiper.height], + [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ]; + for (var i = 0; i < swiperCoord.length; i += 1) { + var point = swiperCoord[i]; + if ( + point[0] >= 0 && point[0] <= windowWidth + && point[1] >= 0 && point[1] <= 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 && !rtl) || (kc === 37 && rtl)) { swiper.slideNext(); } + if ((kc === 37 && !rtl) || (kc === 39 && 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: function enable() { + var swiper = this; + if (swiper.keyboard.enabled) { return; } + $(doc).on('keydown', swiper.keyboard.handle); + swiper.keyboard.enabled = true; + }, + disable: function disable() { + var swiper = this; + if (!swiper.keyboard.enabled) { return; } + $(doc).off('keydown', swiper.keyboard.handle); + swiper.keyboard.enabled = false; + }, + }; + + var Keyboard$1 = { + name: 'keyboard', + params: { + keyboard: { + enabled: false, + onlyInViewport: true, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + keyboard: { + enabled: false, + enable: Keyboard.enable.bind(swiper), + disable: Keyboard.disable.bind(swiper), + handle: Keyboard.handle.bind(swiper), + }, + }); + }, + on: { + init: function init() { + var swiper = this; + if (swiper.params.keyboard.enabled) { + swiper.keyboard.enable(); + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.keyboard.enabled) { + swiper.keyboard.disable(); + } + }, + }, + }; + + function isEventSupported() { + var eventName = 'onwheel'; + var isSupported = eventName in doc; + + if (!isSupported) { + var element = doc.createElement('div'); + element.setAttribute(eventName, 'return;'); + isSupported = typeof element[eventName] === 'function'; + } + + if (!isSupported + && doc.implementation + && doc.implementation.hasFeature + // always returns true in newer browsers as per the standard. + // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature + && doc.implementation.hasFeature('', '') !== true + ) { + // This is the only way to test support for the `wheel` event in IE9+. + isSupported = doc.implementation.hasFeature('Events.wheel', '3.0'); + } + + return isSupported; + } + var Mousewheel = { + lastScrollTime: Utils.now(), + event: (function getEvent() { + if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; } + return isEventSupported() ? 'wheel' : 'mousewheel'; + }()), + normalize: function normalize(e) { + // Reasonable defaults + var PIXEL_STEP = 10; + var LINE_HEIGHT = 40; + var PAGE_HEIGHT = 800; + + var sX = 0; + var sY = 0; // spinX, spinY + var pX = 0; + var pY = 0; // pixelX, pixelY + + // Legacy + if ('detail' in e) { + sY = e.detail; + } + if ('wheelDelta' in e) { + sY = -e.wheelDelta / 120; + } + if ('wheelDeltaY' in e) { + sY = -e.wheelDeltaY / 120; + } + if ('wheelDeltaX' in e) { + sX = -e.wheelDeltaX / 120; + } + + // side scrolling on FF with DOMMouseScroll + if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { + sX = sY; + sY = 0; + } + + pX = sX * PIXEL_STEP; + pY = sY * PIXEL_STEP; + + if ('deltaY' in e) { + pY = e.deltaY; + } + if ('deltaX' in e) { + pX = e.deltaX; + } + + if ((pX || pY) && e.deltaMode) { + if (e.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, + }; + }, + handleMouseEnter: function handleMouseEnter() { + var swiper = this; + swiper.mouseEntered = true; + }, + handleMouseLeave: function handleMouseLeave() { + var swiper = this; + swiper.mouseEntered = false; + }, + handle: function handle(event) { + var e = event; + var swiper = this; + var params = swiper.params.mousewheel; + + if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; } + + if (e.originalEvent) { e = e.originalEvent; } // jquery fix + var delta = 0; + var rtlFactor = swiper.rtlTranslate ? -1 : 1; + + var data = Mousewheel.normalize(e); + + if (params.forceToAxis) { + if (swiper.isHorizontal()) { + if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; } + else { return true; } + } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; } + else { return true; } + } else { + delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; + } + + if (delta === 0) { return true; } + + if (params.invert) { delta = -delta; } + + if (!swiper.params.freeMode) { + if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) { + if (delta < 0) { + if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { + swiper.slideNext(); + swiper.emit('scroll', e); + } else if (params.releaseOnEdges) { return true; } + } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { + swiper.slidePrev(); + swiper.emit('scroll', e); + } else if (params.releaseOnEdges) { return true; } + } + swiper.mousewheel.lastScrollTime = (new win.Date()).getTime(); + } else { + // Freemode or scrollContainer: + if (swiper.params.loop) { + swiper.loopFix(); + } + var position = swiper.getTranslate() + (delta * params.sensitivity); + var wasBeginning = swiper.isBeginning; + var wasEnd = swiper.isEnd; + + if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); } + if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); } + + swiper.setTransition(0); + swiper.setTranslate(position); + swiper.updateProgress(); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + + if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) { + swiper.updateSlidesClasses(); + } + + if (swiper.params.freeModeSticky) { + clearTimeout(swiper.mousewheel.timeout); + swiper.mousewheel.timeout = Utils.nextTick(function () { + swiper.slideToClosest(); + }, 300); + } + // Emit event + swiper.emit('scroll', e); + + // Stop autoplay + if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); } + // Return page scroll on edge positions + if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; } + } + + if (e.preventDefault) { e.preventDefault(); } + else { e.returnValue = false; } + return false; + }, + enable: function enable() { + var swiper = this; + if (!Mousewheel.event) { return false; } + if (swiper.mousewheel.enabled) { return false; } + var target = swiper.$el; + if (swiper.params.mousewheel.eventsTarged !== 'container') { + target = $(swiper.params.mousewheel.eventsTarged); + } + target.on('mouseenter', swiper.mousewheel.handleMouseEnter); + target.on('mouseleave', swiper.mousewheel.handleMouseLeave); + target.on(Mousewheel.event, swiper.mousewheel.handle); + swiper.mousewheel.enabled = true; + return true; + }, + disable: function disable() { + var swiper = this; + if (!Mousewheel.event) { return false; } + if (!swiper.mousewheel.enabled) { return false; } + var target = swiper.$el; + if (swiper.params.mousewheel.eventsTarged !== 'container') { + target = $(swiper.params.mousewheel.eventsTarged); + } + target.off(Mousewheel.event, swiper.mousewheel.handle); + swiper.mousewheel.enabled = false; + return true; + }, + }; + + var Mousewheel$1 = { + name: 'mousewheel', + params: { + mousewheel: { + enabled: false, + releaseOnEdges: false, + invert: false, + forceToAxis: false, + sensitivity: 1, + eventsTarged: 'container', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + mousewheel: { + enabled: false, + enable: Mousewheel.enable.bind(swiper), + disable: Mousewheel.disable.bind(swiper), + handle: Mousewheel.handle.bind(swiper), + handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper), + handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper), + lastScrollTime: Utils.now(), + }, + }); + }, + on: { + init: function init() { + var swiper = this; + if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); } + }, + }, + }; + + var Navigation = { + update: function update() { + // Update Navigation Buttons + var swiper = this; + var params = swiper.params.navigation; + + if (swiper.params.loop) { return; } + var ref = swiper.navigation; + var $nextEl = ref.$nextEl; + var $prevEl = ref.$prevEl; + + if ($prevEl && $prevEl.length > 0) { + if (swiper.isBeginning) { + $prevEl.addClass(params.disabledClass); + } else { + $prevEl.removeClass(params.disabledClass); + } + $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); + } + if ($nextEl && $nextEl.length > 0) { + if (swiper.isEnd) { + $nextEl.addClass(params.disabledClass); + } else { + $nextEl.removeClass(params.disabledClass); + } + $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); + } + }, + init: function init() { + var swiper = this; + var params = swiper.params.navigation; + if (!(params.nextEl || params.prevEl)) { return; } + + var $nextEl; + var $prevEl; + if (params.nextEl) { + $nextEl = $(params.nextEl); + if ( + swiper.params.uniqueNavElements + && typeof params.nextEl === 'string' + && $nextEl.length > 1 + && swiper.$el.find(params.nextEl).length === 1 + ) { + $nextEl = swiper.$el.find(params.nextEl); + } + } + if (params.prevEl) { + $prevEl = $(params.prevEl); + if ( + swiper.params.uniqueNavElements + && typeof params.prevEl === 'string' + && $prevEl.length > 1 + && swiper.$el.find(params.prevEl).length === 1 + ) { + $prevEl = swiper.$el.find(params.prevEl); + } + } + + if ($nextEl && $nextEl.length > 0) { + $nextEl.on('click', function (e) { + e.preventDefault(); + if (swiper.isEnd && !swiper.params.loop) { return; } + swiper.slideNext(); + }); + } + if ($prevEl && $prevEl.length > 0) { + $prevEl.on('click', function (e) { + e.preventDefault(); + if (swiper.isBeginning && !swiper.params.loop) { return; } + swiper.slidePrev(); + }); + } + + Utils.extend(swiper.navigation, { + $nextEl: $nextEl, + nextEl: $nextEl && $nextEl[0], + $prevEl: $prevEl, + prevEl: $prevEl && $prevEl[0], + }); + }, + destroy: function destroy() { + var swiper = this; + var ref = swiper.navigation; + var $nextEl = ref.$nextEl; + var $prevEl = ref.$prevEl; + if ($nextEl && $nextEl.length) { + $nextEl.off('click'); + $nextEl.removeClass(swiper.params.navigation.disabledClass); + } + if ($prevEl && $prevEl.length) { + $prevEl.off('click'); + $prevEl.removeClass(swiper.params.navigation.disabledClass); + } + }, + }; + + var Navigation$1 = { + name: 'navigation', + params: { + navigation: { + nextEl: null, + prevEl: null, + + hideOnClick: false, + disabledClass: 'swiper-button-disabled', + hiddenClass: 'swiper-button-hidden', + lockClass: 'swiper-button-lock', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + navigation: { + init: Navigation.init.bind(swiper), + update: Navigation.update.bind(swiper), + destroy: Navigation.destroy.bind(swiper), + }, + }); + }, + on: { + init: function init() { + var swiper = this; + swiper.navigation.init(); + swiper.navigation.update(); + }, + toEdge: function toEdge() { + var swiper = this; + swiper.navigation.update(); + }, + fromEdge: function fromEdge() { + var swiper = this; + swiper.navigation.update(); + }, + destroy: function destroy() { + var swiper = this; + swiper.navigation.destroy(); + }, + click: function click(e) { + var swiper = this; + var ref = swiper.navigation; + var $nextEl = ref.$nextEl; + var $prevEl = ref.$prevEl; + if ( + swiper.params.navigation.hideOnClick + && !$(e.target).is($prevEl) + && !$(e.target).is($nextEl) + ) { + if ($nextEl) { $nextEl.toggleClass(swiper.params.navigation.hiddenClass); } + if ($prevEl) { $prevEl.toggleClass(swiper.params.navigation.hiddenClass); } + } + }, + }, + }; + + var Pagination = { + update: function update() { + // Render || Update Pagination bullets/items + var swiper = this; + var rtl = swiper.rtl; + var params = swiper.params.pagination; + if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; } + var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; + var $el = swiper.pagination.$el; + // Current/Total + var current; + var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; + if (swiper.params.loop) { + current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); + if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) { + current -= (slidesLength - (swiper.loopedSlides * 2)); + } + if (current > total - 1) { current -= total; } + if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; } + } else if (typeof swiper.snapIndex !== 'undefined') { + current = swiper.snapIndex; + } else { + current = swiper.activeIndex || 0; + } + // Types + if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { + var bullets = swiper.pagination.bullets; + var firstIndex; + var lastIndex; + var midIndex; + if (params.dynamicBullets) { + swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); + $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + "px")); + if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { + swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex); + if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) { + swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1; + } else if (swiper.pagination.dynamicBulletIndex < 0) { + swiper.pagination.dynamicBulletIndex = 0; + } + } + firstIndex = current - swiper.pagination.dynamicBulletIndex; + lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); + midIndex = (lastIndex + firstIndex) / 2; + } + bullets.removeClass(((params.bulletActiveClass) + " " + (params.bulletActiveClass) + "-next " + (params.bulletActiveClass) + "-next-next " + (params.bulletActiveClass) + "-prev " + (params.bulletActiveClass) + "-prev-prev " + (params.bulletActiveClass) + "-main")); + if ($el.length > 1) { + bullets.each(function (index, bullet) { + var $bullet = $(bullet); + var bulletIndex = $bullet.index(); + if (bulletIndex === current) { + $bullet.addClass(params.bulletActiveClass); + } + if (params.dynamicBullets) { + if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { + $bullet.addClass(((params.bulletActiveClass) + "-main")); + } + if (bulletIndex === firstIndex) { + $bullet + .prev() + .addClass(((params.bulletActiveClass) + "-prev")) + .prev() + .addClass(((params.bulletActiveClass) + "-prev-prev")); + } + if (bulletIndex === lastIndex) { + $bullet + .next() + .addClass(((params.bulletActiveClass) + "-next")) + .next() + .addClass(((params.bulletActiveClass) + "-next-next")); + } + } + }); + } else { + var $bullet = bullets.eq(current); + $bullet.addClass(params.bulletActiveClass); + if (params.dynamicBullets) { + var $firstDisplayedBullet = bullets.eq(firstIndex); + var $lastDisplayedBullet = bullets.eq(lastIndex); + for (var i = firstIndex; i <= lastIndex; i += 1) { + bullets.eq(i).addClass(((params.bulletActiveClass) + "-main")); + } + $firstDisplayedBullet + .prev() + .addClass(((params.bulletActiveClass) + "-prev")) + .prev() + .addClass(((params.bulletActiveClass) + "-prev-prev")); + $lastDisplayedBullet + .next() + .addClass(((params.bulletActiveClass) + "-next")) + .next() + .addClass(((params.bulletActiveClass) + "-next-next")); + } + } + if (params.dynamicBullets) { + var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); + var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize); + var offsetProp = rtl ? 'right' : 'left'; + bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + "px")); + } + } + if (params.type === 'fraction') { + $el.find(("." + (params.currentClass))).text(params.formatFractionCurrent(current + 1)); + $el.find(("." + (params.totalClass))).text(params.formatFractionTotal(total)); + } + if (params.type === 'progressbar') { + var progressbarDirection; + if (params.progressbarOpposite) { + progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; + } else { + progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; + } + var scale = (current + 1) / total; + var scaleX = 1; + var scaleY = 1; + if (progressbarDirection === 'horizontal') { + scaleX = scale; + } else { + scaleY = scale; + } + $el.find(("." + (params.progressbarFillClass))).transform(("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")")).transition(swiper.params.speed); + } + if (params.type === 'custom' && params.renderCustom) { + $el.html(params.renderCustom(swiper, current + 1, total)); + swiper.emit('paginationRender', swiper, $el[0]); + } else { + swiper.emit('paginationUpdate', swiper, $el[0]); + } + $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); + }, + render: function render() { + // Render Container + var swiper = this; + var params = swiper.params.pagination; + if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; } + var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; + + var $el = swiper.pagination.$el; + var paginationHTML = ''; + if (params.type === 'bullets') { + var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; + for (var i = 0; i < numberOfBullets; i += 1) { + if (params.renderBullet) { + paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); + } else { + paginationHTML += "<" + (params.bulletElement) + " class=\"" + (params.bulletClass) + "\">"; + } + } + $el.html(paginationHTML); + swiper.pagination.bullets = $el.find(("." + (params.bulletClass))); + } + if (params.type === 'fraction') { + if (params.renderFraction) { + paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); + } else { + paginationHTML = "" + + ' / ' + + ""; + } + $el.html(paginationHTML); + } + if (params.type === 'progressbar') { + if (params.renderProgressbar) { + paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); + } else { + paginationHTML = ""; + } + $el.html(paginationHTML); + } + if (params.type !== 'custom') { + swiper.emit('paginationRender', swiper.pagination.$el[0]); + } + }, + init: function init() { + var swiper = this; + var params = swiper.params.pagination; + if (!params.el) { return; } + + var $el = $(params.el); + if ($el.length === 0) { return; } + + if ( + swiper.params.uniqueNavElements + && typeof params.el === 'string' + && $el.length > 1 + && swiper.$el.find(params.el).length === 1 + ) { + $el = swiper.$el.find(params.el); + } + + if (params.type === 'bullets' && params.clickable) { + $el.addClass(params.clickableClass); + } + + $el.addClass(params.modifierClass + params.type); + + if (params.type === 'bullets' && params.dynamicBullets) { + $el.addClass(("" + (params.modifierClass) + (params.type) + "-dynamic")); + swiper.pagination.dynamicBulletIndex = 0; + if (params.dynamicMainBullets < 1) { + params.dynamicMainBullets = 1; + } + } + if (params.type === 'progressbar' && params.progressbarOpposite) { + $el.addClass(params.progressbarOppositeClass); + } + + if (params.clickable) { + $el.on('click', ("." + (params.bulletClass)), function onClick(e) { + e.preventDefault(); + var index = $(this).index() * swiper.params.slidesPerGroup; + if (swiper.params.loop) { index += swiper.loopedSlides; } + swiper.slideTo(index); + }); + } + + Utils.extend(swiper.pagination, { + $el: $el, + el: $el[0], + }); + }, + destroy: function destroy() { + var swiper = this; + var params = swiper.params.pagination; + if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; } + var $el = swiper.pagination.$el; + + $el.removeClass(params.hiddenClass); + $el.removeClass(params.modifierClass + params.type); + if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); } + if (params.clickable) { + $el.off('click', ("." + (params.bulletClass))); + } + }, + }; + + var Pagination$1 = { + name: 'pagination', + params: { + pagination: { + el: null, + bulletElement: 'span', + clickable: false, + hideOnClick: false, + renderBullet: null, + renderProgressbar: null, + renderFraction: null, + renderCustom: null, + progressbarOpposite: false, + type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom' + dynamicBullets: false, + dynamicMainBullets: 1, + formatFractionCurrent: function (number) { return number; }, + formatFractionTotal: function (number) { return number; }, + bulletClass: 'swiper-pagination-bullet', + bulletActiveClass: 'swiper-pagination-bullet-active', + modifierClass: 'swiper-pagination-', // NEW + currentClass: 'swiper-pagination-current', + totalClass: 'swiper-pagination-total', + hiddenClass: 'swiper-pagination-hidden', + progressbarFillClass: 'swiper-pagination-progressbar-fill', + progressbarOppositeClass: 'swiper-pagination-progressbar-opposite', + clickableClass: 'swiper-pagination-clickable', // NEW + lockClass: 'swiper-pagination-lock', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + pagination: { + init: Pagination.init.bind(swiper), + render: Pagination.render.bind(swiper), + update: Pagination.update.bind(swiper), + destroy: Pagination.destroy.bind(swiper), + dynamicBulletIndex: 0, + }, + }); + }, + on: { + init: function init() { + var swiper = this; + swiper.pagination.init(); + swiper.pagination.render(); + swiper.pagination.update(); + }, + activeIndexChange: function activeIndexChange() { + var swiper = this; + if (swiper.params.loop) { + swiper.pagination.update(); + } else if (typeof swiper.snapIndex === 'undefined') { + swiper.pagination.update(); + } + }, + snapIndexChange: function snapIndexChange() { + var swiper = this; + if (!swiper.params.loop) { + swiper.pagination.update(); + } + }, + slidesLengthChange: function slidesLengthChange() { + var swiper = this; + if (swiper.params.loop) { + swiper.pagination.render(); + swiper.pagination.update(); + } + }, + snapGridLengthChange: function snapGridLengthChange() { + var swiper = this; + if (!swiper.params.loop) { + swiper.pagination.render(); + swiper.pagination.update(); + } + }, + destroy: function destroy() { + var swiper = this; + swiper.pagination.destroy(); + }, + click: function click(e) { + var swiper = this; + if ( + swiper.params.pagination.el + && swiper.params.pagination.hideOnClick + && swiper.pagination.$el.length > 0 + && !$(e.target).hasClass(swiper.params.pagination.bulletClass) + ) { + swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass); + } + }, + }, + }; + + var Scrollbar = { + setTranslate: function setTranslate() { + var swiper = this; + if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; } + var scrollbar = swiper.scrollbar; + var rtl = swiper.rtlTranslate; + var progress = swiper.progress; + var dragSize = scrollbar.dragSize; + var trackSize = scrollbar.trackSize; + var $dragEl = scrollbar.$dragEl; + var $el = scrollbar.$el; + var params = swiper.params.scrollbar; + + var newSize = dragSize; + var newPos = (trackSize - dragSize) * progress; + if (rtl) { + newPos = -newPos; + if (newPos > 0) { + newSize = dragSize - newPos; + newPos = 0; + } else if (-newPos + dragSize > trackSize) { + newSize = trackSize + newPos; + } + } else if (newPos < 0) { + newSize = dragSize + newPos; + newPos = 0; + } else if (newPos + dragSize > trackSize) { + newSize = trackSize - newPos; + } + if (swiper.isHorizontal()) { + if (Support.transforms3d) { + $dragEl.transform(("translate3d(" + newPos + "px, 0, 0)")); + } else { + $dragEl.transform(("translateX(" + newPos + "px)")); + } + $dragEl[0].style.width = newSize + "px"; + } else { + if (Support.transforms3d) { + $dragEl.transform(("translate3d(0px, " + newPos + "px, 0)")); + } else { + $dragEl.transform(("translateY(" + newPos + "px)")); + } + $dragEl[0].style.height = newSize + "px"; + } + if (params.hide) { + clearTimeout(swiper.scrollbar.timeout); + $el[0].style.opacity = 1; + swiper.scrollbar.timeout = setTimeout(function () { + $el[0].style.opacity = 0; + $el.transition(400); + }, 1000); + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; } + swiper.scrollbar.$dragEl.transition(duration); + }, + updateSize: function updateSize() { + var swiper = this; + if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; } + + var scrollbar = swiper.scrollbar; + var $dragEl = scrollbar.$dragEl; + var $el = scrollbar.$el; + + $dragEl[0].style.width = ''; + $dragEl[0].style.height = ''; + var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; + + var divider = swiper.size / swiper.virtualSize; + var moveDivider = divider * (trackSize / swiper.size); + var dragSize; + if (swiper.params.scrollbar.dragSize === 'auto') { + dragSize = trackSize * divider; + } else { + dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); + } + + if (swiper.isHorizontal()) { + $dragEl[0].style.width = dragSize + "px"; + } else { + $dragEl[0].style.height = dragSize + "px"; + } + + if (divider >= 1) { + $el[0].style.display = 'none'; + } else { + $el[0].style.display = ''; + } + if (swiper.params.scrollbarHide) { + $el[0].style.opacity = 0; + } + Utils.extend(scrollbar, { + trackSize: trackSize, + divider: divider, + moveDivider: moveDivider, + dragSize: dragSize, + }); + scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); + }, + setDragPosition: function setDragPosition(e) { + var swiper = this; + var scrollbar = swiper.scrollbar; + var rtl = swiper.rtlTranslate; + var $el = scrollbar.$el; + var dragSize = scrollbar.dragSize; + var trackSize = scrollbar.trackSize; + + var pointerPosition; + if (swiper.isHorizontal()) { + pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX); + } else { + pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY); + } + var positionRatio; + positionRatio = ((pointerPosition) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragSize / 2)) / (trackSize - dragSize); + positionRatio = Math.max(Math.min(positionRatio, 1), 0); + if (rtl) { + positionRatio = 1 - positionRatio; + } + + var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio); + + swiper.updateProgress(position); + swiper.setTranslate(position); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + }, + onDragStart: function onDragStart(e) { + var swiper = this; + var params = swiper.params.scrollbar; + var scrollbar = swiper.scrollbar; + var $wrapperEl = swiper.$wrapperEl; + var $el = scrollbar.$el; + var $dragEl = scrollbar.$dragEl; + swiper.scrollbar.isTouched = true; + e.preventDefault(); + e.stopPropagation(); + + $wrapperEl.transition(100); + $dragEl.transition(100); + scrollbar.setDragPosition(e); + + clearTimeout(swiper.scrollbar.dragTimeout); + + $el.transition(0); + if (params.hide) { + $el.css('opacity', 1); + } + swiper.emit('scrollbarDragStart', e); + }, + onDragMove: function onDragMove(e) { + var swiper = this; + var scrollbar = swiper.scrollbar; + var $wrapperEl = swiper.$wrapperEl; + var $el = scrollbar.$el; + var $dragEl = scrollbar.$dragEl; + + if (!swiper.scrollbar.isTouched) { return; } + if (e.preventDefault) { e.preventDefault(); } + else { e.returnValue = false; } + scrollbar.setDragPosition(e); + $wrapperEl.transition(0); + $el.transition(0); + $dragEl.transition(0); + swiper.emit('scrollbarDragMove', e); + }, + onDragEnd: function onDragEnd(e) { + var swiper = this; + + var params = swiper.params.scrollbar; + var scrollbar = swiper.scrollbar; + var $el = scrollbar.$el; + + if (!swiper.scrollbar.isTouched) { return; } + swiper.scrollbar.isTouched = false; + if (params.hide) { + clearTimeout(swiper.scrollbar.dragTimeout); + swiper.scrollbar.dragTimeout = Utils.nextTick(function () { + $el.css('opacity', 0); + $el.transition(400); + }, 1000); + } + swiper.emit('scrollbarDragEnd', e); + if (params.snapOnRelease) { + swiper.slideToClosest(); + } + }, + enableDraggable: function enableDraggable() { + var swiper = this; + if (!swiper.params.scrollbar.el) { return; } + var scrollbar = swiper.scrollbar; + var touchEvents = swiper.touchEvents; + var touchEventsDesktop = swiper.touchEventsDesktop; + var params = swiper.params; + var $el = scrollbar.$el; + var target = $el[0]; + var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false; + var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; + if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) { + target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); + doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); + doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); + } else { + if (Support.touch) { + target.addEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener); + target.addEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener); + target.addEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener); + } + if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) { + target.addEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener); + doc.addEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener); + doc.addEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener); + } + } + }, + disableDraggable: function disableDraggable() { + var swiper = this; + if (!swiper.params.scrollbar.el) { return; } + var scrollbar = swiper.scrollbar; + var touchEvents = swiper.touchEvents; + var touchEventsDesktop = swiper.touchEventsDesktop; + var params = swiper.params; + var $el = scrollbar.$el; + var target = $el[0]; + var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false; + var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; + if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) { + target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); + doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); + doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); + } else { + if (Support.touch) { + target.removeEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener); + target.removeEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener); + target.removeEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener); + } + if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) { + target.removeEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener); + doc.removeEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener); + doc.removeEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener); + } + } + }, + init: function init() { + var swiper = this; + if (!swiper.params.scrollbar.el) { return; } + var scrollbar = swiper.scrollbar; + var $swiperEl = swiper.$el; + var params = swiper.params.scrollbar; + + var $el = $(params.el); + if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { + $el = $swiperEl.find(params.el); + } + + var $dragEl = $el.find(("." + (swiper.params.scrollbar.dragClass))); + if ($dragEl.length === 0) { + $dragEl = $(("
")); + $el.append($dragEl); + } + + Utils.extend(scrollbar, { + $el: $el, + el: $el[0], + $dragEl: $dragEl, + dragEl: $dragEl[0], + }); + + if (params.draggable) { + scrollbar.enableDraggable(); + } + }, + destroy: function destroy() { + var swiper = this; + swiper.scrollbar.disableDraggable(); + }, + }; + + var Scrollbar$1 = { + name: 'scrollbar', + params: { + scrollbar: { + el: null, + dragSize: 'auto', + hide: false, + draggable: false, + snapOnRelease: true, + lockClass: 'swiper-scrollbar-lock', + dragClass: 'swiper-scrollbar-drag', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + scrollbar: { + init: Scrollbar.init.bind(swiper), + destroy: Scrollbar.destroy.bind(swiper), + updateSize: Scrollbar.updateSize.bind(swiper), + setTranslate: Scrollbar.setTranslate.bind(swiper), + setTransition: Scrollbar.setTransition.bind(swiper), + enableDraggable: Scrollbar.enableDraggable.bind(swiper), + disableDraggable: Scrollbar.disableDraggable.bind(swiper), + setDragPosition: Scrollbar.setDragPosition.bind(swiper), + onDragStart: Scrollbar.onDragStart.bind(swiper), + onDragMove: Scrollbar.onDragMove.bind(swiper), + onDragEnd: Scrollbar.onDragEnd.bind(swiper), + isTouched: false, + timeout: null, + dragTimeout: null, + }, + }); + }, + on: { + init: function init() { + var swiper = this; + swiper.scrollbar.init(); + swiper.scrollbar.updateSize(); + swiper.scrollbar.setTranslate(); + }, + update: function update() { + var swiper = this; + swiper.scrollbar.updateSize(); + }, + resize: function resize() { + var swiper = this; + swiper.scrollbar.updateSize(); + }, + observerUpdate: function observerUpdate() { + var swiper = this; + swiper.scrollbar.updateSize(); + }, + setTranslate: function setTranslate() { + var swiper = this; + swiper.scrollbar.setTranslate(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + swiper.scrollbar.setTransition(duration); + }, + destroy: function destroy() { + var swiper = this; + swiper.scrollbar.destroy(); + }, + }, + }; + + var Parallax = { + setTransform: function setTransform(el, progress) { + var swiper = this; + var rtl = swiper.rtl; + + var $el = $(el); + var rtlFactor = rtl ? -1 : 1; + + var p = $el.attr('data-swiper-parallax') || '0'; + var x = $el.attr('data-swiper-parallax-x'); + var y = $el.attr('data-swiper-parallax-y'); + var scale = $el.attr('data-swiper-parallax-scale'); + var opacity = $el.attr('data-swiper-parallax-opacity'); + + if (x || y) { + x = x || '0'; + y = y || '0'; + } else if (swiper.isHorizontal()) { + x = p; + y = '0'; + } else { + y = p; + x = '0'; + } + + if ((x).indexOf('%') >= 0) { + x = (parseInt(x, 10) * progress * rtlFactor) + "%"; + } else { + x = (x * progress * rtlFactor) + "px"; + } + if ((y).indexOf('%') >= 0) { + y = (parseInt(y, 10) * progress) + "%"; + } else { + y = (y * progress) + "px"; + } + + if (typeof opacity !== 'undefined' && opacity !== null) { + var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress))); + $el[0].style.opacity = currentOpacity; + } + if (typeof scale === 'undefined' || scale === null) { + $el.transform(("translate3d(" + x + ", " + y + ", 0px)")); + } else { + var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress))); + $el.transform(("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")")); + } + }, + setTranslate: function setTranslate() { + var swiper = this; + var $el = swiper.$el; + var slides = swiper.slides; + var progress = swiper.progress; + var snapGrid = swiper.snapGrid; + $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]') + .each(function (index, el) { + swiper.parallax.setTransform(el, progress); + }); + slides.each(function (slideIndex, slideEl) { + var slideProgress = slideEl.progress; + if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { + slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1)); + } + slideProgress = Math.min(Math.max(slideProgress, -1), 1); + $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]') + .each(function (index, el) { + swiper.parallax.setTransform(el, slideProgress); + }); + }); + }, + setTransition: function setTransition(duration) { + if ( duration === void 0 ) duration = this.params.speed; + + var swiper = this; + var $el = swiper.$el; + $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]') + .each(function (index, parallaxEl) { + var $parallaxEl = $(parallaxEl); + var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; + if (duration === 0) { parallaxDuration = 0; } + $parallaxEl.transition(parallaxDuration); + }); + }, + }; + + var Parallax$1 = { + name: 'parallax', + params: { + parallax: { + enabled: false, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + parallax: { + setTransform: Parallax.setTransform.bind(swiper), + setTranslate: Parallax.setTranslate.bind(swiper), + setTransition: Parallax.setTransition.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (!swiper.params.parallax.enabled) { return; } + swiper.params.watchSlidesProgress = true; + swiper.originalParams.watchSlidesProgress = true; + }, + init: function init() { + var swiper = this; + if (!swiper.params.parallax) { return; } + swiper.parallax.setTranslate(); + }, + setTranslate: function setTranslate() { + var swiper = this; + if (!swiper.params.parallax) { return; } + swiper.parallax.setTranslate(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (!swiper.params.parallax) { return; } + swiper.parallax.setTransition(duration); + }, + }, + }; + + var Zoom = { + // Calc Scale From Multi-touches + getDistanceBetweenTouches: function getDistanceBetweenTouches(e) { + if (e.targetTouches.length < 2) { return 1; } + var x1 = e.targetTouches[0].pageX; + var y1 = e.targetTouches[0].pageY; + var x2 = e.targetTouches[1].pageX; + var y2 = e.targetTouches[1].pageY; + var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 ))); + return distance; + }, + // Events + onGestureStart: function onGestureStart(e) { + var swiper = this; + var params = swiper.params.zoom; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + zoom.fakeGestureTouched = false; + zoom.fakeGestureMoved = false; + if (!Support.gestures) { + if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) { + return; + } + zoom.fakeGestureTouched = true; + gesture.scaleStart = Zoom.getDistanceBetweenTouches(e); + } + if (!gesture.$slideEl || !gesture.$slideEl.length) { + gesture.$slideEl = $(e.target).closest('.swiper-slide'); + if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); } + gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas'); + gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass))); + gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; + if (gesture.$imageWrapEl.length === 0) { + gesture.$imageEl = undefined; + return; + } + } + gesture.$imageEl.transition(0); + swiper.zoom.isScaling = true; + }, + onGestureChange: function onGestureChange(e) { + var swiper = this; + var params = swiper.params.zoom; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + if (!Support.gestures) { + if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) { + return; + } + zoom.fakeGestureMoved = true; + gesture.scaleMove = Zoom.getDistanceBetweenTouches(e); + } + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + if (Support.gestures) { + swiper.zoom.scale = e.scale * zoom.currentScale; + } else { + zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale; + } + if (zoom.scale > gesture.maxRatio) { + zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 )); + } + if (zoom.scale < params.minRatio) { + zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 )); + } + gesture.$imageEl.transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")")); + }, + onGestureEnd: function onGestureEnd(e) { + var swiper = this; + var params = swiper.params.zoom; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + if (!Support.gestures) { + if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) { + return; + } + if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) { + return; + } + zoom.fakeGestureTouched = false; + zoom.fakeGestureMoved = false; + } + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); + gesture.$imageEl.transition(swiper.params.speed).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")")); + zoom.currentScale = zoom.scale; + zoom.isScaling = false; + if (zoom.scale === 1) { gesture.$slideEl = undefined; } + }, + onTouchStart: function onTouchStart(e) { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + var image = zoom.image; + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + if (image.isTouched) { return; } + if (Device.android) { e.preventDefault(); } + image.isTouched = true; + image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + }, + onTouchMove: function onTouchMove(e) { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + var image = zoom.image; + var velocity = zoom.velocity; + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + swiper.allowClick = false; + if (!image.isTouched || !gesture.$slideEl) { return; } + + if (!image.isMoved) { + image.width = gesture.$imageEl[0].offsetWidth; + image.height = gesture.$imageEl[0].offsetHeight; + image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0; + image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0; + gesture.slideWidth = gesture.$slideEl[0].offsetWidth; + gesture.slideHeight = gesture.$slideEl[0].offsetHeight; + gesture.$imageWrapEl.transition(0); + if (swiper.rtl) { + image.startX = -image.startX; + image.startY = -image.startY; + } + } + // Define if we need image drag + var scaledWidth = image.width * zoom.scale; + var scaledHeight = image.height * zoom.scale; + + if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; } + + image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0); + image.maxX = -image.minX; + image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0); + image.maxY = -image.minY; + + image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + + if (!image.isMoved && !zoom.isScaling) { + if ( + swiper.isHorizontal() + && ( + (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x) + || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x) + ) + ) { + image.isTouched = false; + return; + } if ( + !swiper.isHorizontal() + && ( + (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y) + || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y) + ) + ) { + image.isTouched = false; + return; + } + } + e.preventDefault(); + e.stopPropagation(); + + image.isMoved = true; + image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX; + image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY; + + if (image.currentX < image.minX) { + image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 )); + } + if (image.currentX > image.maxX) { + image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 )); + } + + if (image.currentY < image.minY) { + image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 )); + } + if (image.currentY > image.maxY) { + image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 )); + } + + // Velocity + if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; } + if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; } + if (!velocity.prevTime) { velocity.prevTime = Date.now(); } + velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; + velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; + if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; } + if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; } + velocity.prevPositionX = image.touchesCurrent.x; + velocity.prevPositionY = image.touchesCurrent.y; + velocity.prevTime = Date.now(); + + gesture.$imageWrapEl.transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)")); + }, + onTouchEnd: function onTouchEnd() { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + var image = zoom.image; + var velocity = zoom.velocity; + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + if (!image.isTouched || !image.isMoved) { + image.isTouched = false; + image.isMoved = false; + return; + } + image.isTouched = false; + image.isMoved = false; + var momentumDurationX = 300; + var momentumDurationY = 300; + var momentumDistanceX = velocity.x * momentumDurationX; + var newPositionX = image.currentX + momentumDistanceX; + var momentumDistanceY = velocity.y * momentumDurationY; + var newPositionY = image.currentY + momentumDistanceY; + + // Fix duration + if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); } + if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); } + var momentumDuration = Math.max(momentumDurationX, momentumDurationY); + + image.currentX = newPositionX; + image.currentY = newPositionY; + + // Define if we need image drag + var scaledWidth = image.width * zoom.scale; + var scaledHeight = image.height * zoom.scale; + image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0); + image.maxX = -image.minX; + image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0); + image.maxY = -image.minY; + image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); + image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); + + gesture.$imageWrapEl.transition(momentumDuration).transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)")); + }, + onTransitionEnd: function onTransitionEnd() { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { + gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); + gesture.$imageWrapEl.transform('translate3d(0,0,0)'); + gesture.$slideEl = undefined; + gesture.$imageEl = undefined; + gesture.$imageWrapEl = undefined; + + zoom.scale = 1; + zoom.currentScale = 1; + } + }, + // Toggle Zoom + toggle: function toggle(e) { + var swiper = this; + var zoom = swiper.zoom; + + if (zoom.scale && zoom.scale !== 1) { + // Zoom Out + zoom.out(); + } else { + // Zoom In + zoom.in(e); + } + }, + in: function in$1(e) { + var swiper = this; + + var zoom = swiper.zoom; + var params = swiper.params.zoom; + var gesture = zoom.gesture; + var image = zoom.image; + + if (!gesture.$slideEl) { + gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex); + gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas'); + gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass))); + } + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + + gesture.$slideEl.addClass(("" + (params.zoomedSlideClass))); + + var touchX; + var touchY; + var offsetX; + var offsetY; + var diffX; + var diffY; + var translateX; + var translateY; + var imageWidth; + var imageHeight; + var scaledWidth; + var scaledHeight; + var translateMinX; + var translateMinY; + var translateMaxX; + var translateMaxY; + var slideWidth; + var slideHeight; + + if (typeof image.touchesStart.x === 'undefined' && e) { + touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; + touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; + } else { + touchX = image.touchesStart.x; + touchY = image.touchesStart.y; + } + + zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; + zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; + if (e) { + slideWidth = gesture.$slideEl[0].offsetWidth; + slideHeight = gesture.$slideEl[0].offsetHeight; + offsetX = gesture.$slideEl.offset().left; + offsetY = gesture.$slideEl.offset().top; + diffX = (offsetX + (slideWidth / 2)) - touchX; + diffY = (offsetY + (slideHeight / 2)) - touchY; + + imageWidth = gesture.$imageEl[0].offsetWidth; + imageHeight = gesture.$imageEl[0].offsetHeight; + scaledWidth = imageWidth * zoom.scale; + scaledHeight = imageHeight * zoom.scale; + + translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0); + translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0); + translateMaxX = -translateMinX; + translateMaxY = -translateMinY; + + translateX = diffX * zoom.scale; + translateY = diffY * zoom.scale; + + if (translateX < translateMinX) { + translateX = translateMinX; + } + if (translateX > translateMaxX) { + translateX = translateMaxX; + } + + if (translateY < translateMinY) { + translateY = translateMinY; + } + if (translateY > translateMaxY) { + translateY = translateMaxY; + } + } else { + translateX = 0; + translateY = 0; + } + gesture.$imageWrapEl.transition(300).transform(("translate3d(" + translateX + "px, " + translateY + "px,0)")); + gesture.$imageEl.transition(300).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")")); + }, + out: function out() { + var swiper = this; + + var zoom = swiper.zoom; + var params = swiper.params.zoom; + var gesture = zoom.gesture; + + if (!gesture.$slideEl) { + gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex); + gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas'); + gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass))); + } + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; } + + zoom.scale = 1; + zoom.currentScale = 1; + gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); + gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); + gesture.$slideEl.removeClass(("" + (params.zoomedSlideClass))); + gesture.$slideEl = undefined; + }, + // Attach/Detach Events + enable: function enable() { + var swiper = this; + var zoom = swiper.zoom; + if (zoom.enabled) { return; } + zoom.enabled = true; + + var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false; + + // Scale image + if (Support.gestures) { + swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener); + swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener); + swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener); + } else if (swiper.touchEvents.start === 'touchstart') { + swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener); + swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener); + swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener); + } + + // Move image + swiper.$wrapperEl.on(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove); + }, + disable: function disable() { + var swiper = this; + var zoom = swiper.zoom; + if (!zoom.enabled) { return; } + + swiper.zoom.enabled = false; + + var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false; + + // Scale image + if (Support.gestures) { + swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener); + swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener); + swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener); + } else if (swiper.touchEvents.start === 'touchstart') { + swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener); + swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener); + swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener); + } + + // Move image + swiper.$wrapperEl.off(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove); + }, + }; + + var Zoom$1 = { + name: 'zoom', + params: { + zoom: { + enabled: false, + maxRatio: 3, + minRatio: 1, + toggle: true, + containerClass: 'swiper-zoom-container', + zoomedSlideClass: 'swiper-slide-zoomed', + }, + }, + create: function create() { + var swiper = this; + var zoom = { + enabled: false, + scale: 1, + currentScale: 1, + isScaling: false, + gesture: { + $slideEl: undefined, + slideWidth: undefined, + slideHeight: undefined, + $imageEl: undefined, + $imageWrapEl: undefined, + maxRatio: 3, + }, + image: { + isTouched: undefined, + isMoved: undefined, + currentX: undefined, + currentY: undefined, + minX: undefined, + minY: undefined, + maxX: undefined, + maxY: undefined, + width: undefined, + height: undefined, + startX: undefined, + startY: undefined, + touchesStart: {}, + touchesCurrent: {}, + }, + velocity: { + x: undefined, + y: undefined, + prevPositionX: undefined, + prevPositionY: undefined, + prevTime: undefined, + }, + }; + ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) { + zoom[methodName] = Zoom[methodName].bind(swiper); + }); + Utils.extend(swiper, { + zoom: zoom, + }); + }, + on: { + init: function init() { + var swiper = this; + if (swiper.params.zoom.enabled) { + swiper.zoom.enable(); + } + }, + destroy: function destroy() { + var swiper = this; + swiper.zoom.disable(); + }, + touchStart: function touchStart(e) { + var swiper = this; + if (!swiper.zoom.enabled) { return; } + swiper.zoom.onTouchStart(e); + }, + touchEnd: function touchEnd(e) { + var swiper = this; + if (!swiper.zoom.enabled) { return; } + swiper.zoom.onTouchEnd(e); + }, + doubleTap: function doubleTap(e) { + var swiper = this; + if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { + swiper.zoom.toggle(e); + } + }, + transitionEnd: function transitionEnd() { + var swiper = this; + if (swiper.zoom.enabled && swiper.params.zoom.enabled) { + swiper.zoom.onTransitionEnd(); + } + }, + }, + }; + + var Lazy = { + loadInSlide: function loadInSlide(index, loadInDuplicate) { + if ( loadInDuplicate === void 0 ) loadInDuplicate = true; + + var swiper = this; + var params = swiper.params.lazy; + if (typeof index === 'undefined') { return; } + if (swiper.slides.length === 0) { return; } + var isVirtual = swiper.virtual && swiper.params.virtual.enabled; + + var $slideEl = isVirtual + ? swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]")) + : swiper.slides.eq(index); + + var $images = $slideEl.find(("." + (params.elementClass) + ":not(." + (params.loadedClass) + "):not(." + (params.loadingClass) + ")")); + if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { + $images = $images.add($slideEl[0]); + } + if ($images.length === 0) { return; } + + $images.each(function (imageIndex, imageEl) { + var $imageEl = $(imageEl); + $imageEl.addClass(params.loadingClass); + + var background = $imageEl.attr('data-background'); + var src = $imageEl.attr('data-src'); + var srcset = $imageEl.attr('data-srcset'); + var sizes = $imageEl.attr('data-sizes'); + + swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () { + if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; } + if (background) { + $imageEl.css('background-image', ("url(\"" + background + "\")")); + $imageEl.removeAttr('data-background'); + } else { + if (srcset) { + $imageEl.attr('srcset', srcset); + $imageEl.removeAttr('data-srcset'); + } + if (sizes) { + $imageEl.attr('sizes', sizes); + $imageEl.removeAttr('data-sizes'); + } + if (src) { + $imageEl.attr('src', src); + $imageEl.removeAttr('data-src'); + } + } + + $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); + $slideEl.find(("." + (params.preloaderClass))).remove(); + if (swiper.params.loop && loadInDuplicate) { + var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); + if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { + var originalSlide = swiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + (swiper.params.slideDuplicateClass) + ")")); + swiper.lazy.loadInSlide(originalSlide.index(), false); + } else { + var duplicatedSlide = swiper.$wrapperEl.children(("." + (swiper.params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]")); + swiper.lazy.loadInSlide(duplicatedSlide.index(), false); + } + } + swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]); + }); + + swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]); + }); + }, + load: function load() { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl; + var swiperParams = swiper.params; + var slides = swiper.slides; + var activeIndex = swiper.activeIndex; + var isVirtual = swiper.virtual && swiperParams.virtual.enabled; + var params = swiperParams.lazy; + + var slidesPerView = swiperParams.slidesPerView; + if (slidesPerView === 'auto') { + slidesPerView = 0; + } + + function slideExist(index) { + if (isVirtual) { + if ($wrapperEl.children(("." + (swiperParams.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]")).length) { + return true; + } + } else if (slides[index]) { return true; } + return false; + } + function slideIndex(slideEl) { + if (isVirtual) { + return $(slideEl).attr('data-swiper-slide-index'); + } + return $(slideEl).index(); + } + + if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; } + if (swiper.params.watchSlidesVisibility) { + $wrapperEl.children(("." + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) { + var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index(); + swiper.lazy.loadInSlide(index); + }); + } else if (slidesPerView > 1) { + for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) { + if (slideExist(i)) { swiper.lazy.loadInSlide(i); } + } + } else { + swiper.lazy.loadInSlide(activeIndex); + } + if (params.loadPrevNext) { + if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) { + var amount = params.loadPrevNextAmount; + var spv = slidesPerView; + var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); + var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); + // Next Slides + for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) { + if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); } + } + // Prev Slides + for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) { + if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); } + } + } else { + var nextSlide = $wrapperEl.children(("." + (swiperParams.slideNextClass))); + if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); } + + var prevSlide = $wrapperEl.children(("." + (swiperParams.slidePrevClass))); + if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); } + } + } + }, + }; + + var Lazy$1 = { + name: 'lazy', + params: { + lazy: { + enabled: false, + loadPrevNext: false, + loadPrevNextAmount: 1, + loadOnTransitionStart: false, + + elementClass: 'swiper-lazy', + loadingClass: 'swiper-lazy-loading', + loadedClass: 'swiper-lazy-loaded', + preloaderClass: 'swiper-lazy-preloader', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + lazy: { + initialImageLoaded: false, + load: Lazy.load.bind(swiper), + loadInSlide: Lazy.loadInSlide.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (swiper.params.lazy.enabled && swiper.params.preloadImages) { + swiper.params.preloadImages = false; + } + }, + init: function init() { + var swiper = this; + if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) { + swiper.lazy.load(); + } + }, + scroll: function scroll() { + var swiper = this; + if (swiper.params.freeMode && !swiper.params.freeModeSticky) { + swiper.lazy.load(); + } + }, + resize: function resize() { + var swiper = this; + if (swiper.params.lazy.enabled) { + swiper.lazy.load(); + } + }, + scrollbarDragMove: function scrollbarDragMove() { + var swiper = this; + if (swiper.params.lazy.enabled) { + swiper.lazy.load(); + } + }, + transitionStart: function transitionStart() { + var swiper = this; + if (swiper.params.lazy.enabled) { + if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) { + swiper.lazy.load(); + } + } + }, + transitionEnd: function transitionEnd() { + var swiper = this; + if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { + swiper.lazy.load(); + } + }, + }, + }; + + /* eslint no-bitwise: ["error", { "allow": [">>"] }] */ + + var Controller = { + LinearSpline: function LinearSpline(x, y) { + var binarySearch = (function search() { + var maxIndex; + var minIndex; + var guess; + return function (array, val) { + minIndex = -1; + maxIndex = array.length; + while (maxIndex - minIndex > 1) { + guess = maxIndex + minIndex >> 1; + if (array[guess] <= 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; + var i3; + + this.interpolate = function interpolate(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]; + }; + return this; + }, + // xxx: for now i will just save one spline function to to + getInterpolateFunction: function getInterpolateFunction(c) { + var swiper = this; + if (!swiper.controller.spline) { + swiper.controller.spline = swiper.params.loop + ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) + : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid); + } + }, + setTranslate: function setTranslate(setTranslate$1, byController) { + var swiper = this; + var controlled = swiper.controller.control; + var multiplier; + var 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 + var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; + if (swiper.params.controller.by === 'slide') { + swiper.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 = -swiper.controller.spline.interpolate(-translate); + } + + if (!controlledTranslate || swiper.params.controller.by === 'container') { + multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); + controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate(); + } + + if (swiper.params.controller.inverse) { + controlledTranslate = c.maxTranslate() - controlledTranslate; + } + c.updateProgress(controlledTranslate); + c.setTranslate(controlledTranslate, swiper); + c.updateActiveIndex(); + c.updateSlidesClasses(); + } + if (Array.isArray(controlled)) { + for (var i = 0; i < controlled.length; i += 1) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTranslate(controlled[i]); + } + } + } else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTranslate(controlled); + } + }, + setTransition: function setTransition(duration, byController) { + var swiper = this; + var controlled = swiper.controller.control; + var i; + function setControlledTransition(c) { + c.setTransition(duration, swiper); + if (duration !== 0) { + c.transitionStart(); + if (c.params.autoHeight) { + Utils.nextTick(function () { + c.updateAutoHeight(); + }); + } + c.$wrapperEl.transitionEnd(function () { + if (!controlled) { return; } + if (c.params.loop && swiper.params.controller.by === 'slide') { + c.loopFix(); + } + c.transitionEnd(); + }); + } + } + if (Array.isArray(controlled)) { + for (i = 0; i < controlled.length; i += 1) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTransition(controlled[i]); + } + } + } else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTransition(controlled); + } + }, + }; + var Controller$1 = { + name: 'controller', + params: { + controller: { + control: undefined, + inverse: false, + by: 'slide', // or 'container' + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + controller: { + control: swiper.params.controller.control, + getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper), + setTranslate: Controller.setTranslate.bind(swiper), + setTransition: Controller.setTransition.bind(swiper), + }, + }); + }, + on: { + update: function update() { + var swiper = this; + if (!swiper.controller.control) { return; } + if (swiper.controller.spline) { + swiper.controller.spline = undefined; + delete swiper.controller.spline; + } + }, + resize: function resize() { + var swiper = this; + if (!swiper.controller.control) { return; } + if (swiper.controller.spline) { + swiper.controller.spline = undefined; + delete swiper.controller.spline; + } + }, + observerUpdate: function observerUpdate() { + var swiper = this; + if (!swiper.controller.control) { return; } + if (swiper.controller.spline) { + swiper.controller.spline = undefined; + delete swiper.controller.spline; + } + }, + setTranslate: function setTranslate(translate, byController) { + var swiper = this; + if (!swiper.controller.control) { return; } + swiper.controller.setTranslate(translate, byController); + }, + setTransition: function setTransition(duration, byController) { + var swiper = this; + if (!swiper.controller.control) { return; } + swiper.controller.setTransition(duration, byController); + }, + }, + }; + + var a11y = { + makeElFocusable: function makeElFocusable($el) { + $el.attr('tabIndex', '0'); + return $el; + }, + addElRole: function addElRole($el, role) { + $el.attr('role', role); + return $el; + }, + addElLabel: function addElLabel($el, label) { + $el.attr('aria-label', label); + return $el; + }, + disableEl: function disableEl($el) { + $el.attr('aria-disabled', true); + return $el; + }, + enableEl: function enableEl($el) { + $el.attr('aria-disabled', false); + return $el; + }, + onEnterKey: function onEnterKey(e) { + var swiper = this; + var params = swiper.params.a11y; + if (e.keyCode !== 13) { return; } + var $targetEl = $(e.target); + if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { + if (!(swiper.isEnd && !swiper.params.loop)) { + swiper.slideNext(); + } + if (swiper.isEnd) { + swiper.a11y.notify(params.lastSlideMessage); + } else { + swiper.a11y.notify(params.nextSlideMessage); + } + } + if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { + if (!(swiper.isBeginning && !swiper.params.loop)) { + swiper.slidePrev(); + } + if (swiper.isBeginning) { + swiper.a11y.notify(params.firstSlideMessage); + } else { + swiper.a11y.notify(params.prevSlideMessage); + } + } + if (swiper.pagination && $targetEl.is(("." + (swiper.params.pagination.bulletClass)))) { + $targetEl[0].click(); + } + }, + notify: function notify(message) { + var swiper = this; + var notification = swiper.a11y.liveRegion; + if (notification.length === 0) { return; } + notification.html(''); + notification.html(message); + }, + updateNavigation: function updateNavigation() { + var swiper = this; + + if (swiper.params.loop) { return; } + var ref = swiper.navigation; + var $nextEl = ref.$nextEl; + var $prevEl = ref.$prevEl; + + if ($prevEl && $prevEl.length > 0) { + if (swiper.isBeginning) { + swiper.a11y.disableEl($prevEl); + } else { + swiper.a11y.enableEl($prevEl); + } + } + if ($nextEl && $nextEl.length > 0) { + if (swiper.isEnd) { + swiper.a11y.disableEl($nextEl); + } else { + swiper.a11y.enableEl($nextEl); + } + } + }, + updatePagination: function updatePagination() { + var swiper = this; + var params = swiper.params.a11y; + if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { + swiper.pagination.bullets.each(function (bulletIndex, bulletEl) { + var $bulletEl = $(bulletEl); + swiper.a11y.makeElFocusable($bulletEl); + swiper.a11y.addElRole($bulletEl, 'button'); + swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1)); + }); + } + }, + init: function init() { + var swiper = this; + + swiper.$el.append(swiper.a11y.liveRegion); + + // Navigation + var params = swiper.params.a11y; + var $nextEl; + var $prevEl; + if (swiper.navigation && swiper.navigation.$nextEl) { + $nextEl = swiper.navigation.$nextEl; + } + if (swiper.navigation && swiper.navigation.$prevEl) { + $prevEl = swiper.navigation.$prevEl; + } + if ($nextEl) { + swiper.a11y.makeElFocusable($nextEl); + swiper.a11y.addElRole($nextEl, 'button'); + swiper.a11y.addElLabel($nextEl, params.nextSlideMessage); + $nextEl.on('keydown', swiper.a11y.onEnterKey); + } + if ($prevEl) { + swiper.a11y.makeElFocusable($prevEl); + swiper.a11y.addElRole($prevEl, 'button'); + swiper.a11y.addElLabel($prevEl, params.prevSlideMessage); + $prevEl.on('keydown', swiper.a11y.onEnterKey); + } + + // Pagination + if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { + swiper.pagination.$el.on('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey); + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); } + + var $nextEl; + var $prevEl; + if (swiper.navigation && swiper.navigation.$nextEl) { + $nextEl = swiper.navigation.$nextEl; + } + if (swiper.navigation && swiper.navigation.$prevEl) { + $prevEl = swiper.navigation.$prevEl; + } + if ($nextEl) { + $nextEl.off('keydown', swiper.a11y.onEnterKey); + } + if ($prevEl) { + $prevEl.off('keydown', swiper.a11y.onEnterKey); + } + + // Pagination + if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { + swiper.pagination.$el.off('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey); + } + }, + }; + var A11y = { + name: 'a11y', + params: { + a11y: { + enabled: true, + notificationClass: 'swiper-notification', + prevSlideMessage: 'Previous slide', + nextSlideMessage: 'Next slide', + firstSlideMessage: 'This is the first slide', + lastSlideMessage: 'This is the last slide', + paginationBulletMessage: 'Go to slide {{index}}', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + a11y: { + liveRegion: $(("")), + }, + }); + Object.keys(a11y).forEach(function (methodName) { + swiper.a11y[methodName] = a11y[methodName].bind(swiper); + }); + }, + on: { + init: function init() { + var swiper = this; + if (!swiper.params.a11y.enabled) { return; } + swiper.a11y.init(); + swiper.a11y.updateNavigation(); + }, + toEdge: function toEdge() { + var swiper = this; + if (!swiper.params.a11y.enabled) { return; } + swiper.a11y.updateNavigation(); + }, + fromEdge: function fromEdge() { + var swiper = this; + if (!swiper.params.a11y.enabled) { return; } + swiper.a11y.updateNavigation(); + }, + paginationUpdate: function paginationUpdate() { + var swiper = this; + if (!swiper.params.a11y.enabled) { return; } + swiper.a11y.updatePagination(); + }, + destroy: function destroy() { + var swiper = this; + if (!swiper.params.a11y.enabled) { return; } + swiper.a11y.destroy(); + }, + }, + }; + + var History = { + init: function init() { + var swiper = this; + if (!swiper.params.history) { return; } + if (!win.history || !win.history.pushState) { + swiper.params.history.enabled = false; + swiper.params.hashNavigation.enabled = true; + return; + } + var history = swiper.history; + history.initialized = true; + history.paths = History.getPathValues(); + if (!history.paths.key && !history.paths.value) { return; } + history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit); + if (!swiper.params.history.replaceState) { + win.addEventListener('popstate', swiper.history.setHistoryPopState); + } + }, + destroy: function destroy() { + var swiper = this; + if (!swiper.params.history.replaceState) { + win.removeEventListener('popstate', swiper.history.setHistoryPopState); + } + }, + setHistoryPopState: function setHistoryPopState() { + var swiper = this; + swiper.history.paths = History.getPathValues(); + swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false); + }, + getPathValues: function getPathValues() { + var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; }); + var total = pathArray.length; + var key = pathArray[total - 2]; + var value = pathArray[total - 1]; + return { key: key, value: value }; + }, + setHistory: function setHistory(key, index) { + var swiper = this; + if (!swiper.history.initialized || !swiper.params.history.enabled) { return; } + var slide = swiper.slides.eq(index); + var value = History.slugify(slide.attr('data-history')); + if (!win.location.pathname.includes(key)) { + value = key + "/" + value; + } + var currentState = win.history.state; + if (currentState && currentState.value === value) { + return; + } + if (swiper.params.history.replaceState) { + win.history.replaceState({ value: value }, null, value); + } else { + win.history.pushState({ value: value }, null, value); + } + }, + slugify: function slugify(text) { + return text.toString().toLowerCase() + .replace(/\s+/g, '-') + .replace(/[^\w-]+/g, '') + .replace(/--+/g, '-') + .replace(/^-+/, '') + .replace(/-+$/, ''); + }, + scrollToSlide: function scrollToSlide(speed, value, runCallbacks) { + var swiper = this; + if (value) { + for (var i = 0, length = swiper.slides.length; i < length; i += 1) { + var slide = swiper.slides.eq(i); + var slideHistory = History.slugify(slide.attr('data-history')); + if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { + var index = slide.index(); + swiper.slideTo(index, speed, runCallbacks); + } + } + } else { + swiper.slideTo(0, speed, runCallbacks); + } + }, + }; + + var History$1 = { + name: 'history', + params: { + history: { + enabled: false, + replaceState: false, + key: 'slides', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + history: { + init: History.init.bind(swiper), + setHistory: History.setHistory.bind(swiper), + setHistoryPopState: History.setHistoryPopState.bind(swiper), + scrollToSlide: History.scrollToSlide.bind(swiper), + destroy: History.destroy.bind(swiper), + }, + }); + }, + on: { + init: function init() { + var swiper = this; + if (swiper.params.history.enabled) { + swiper.history.init(); + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.params.history.enabled) { + swiper.history.destroy(); + } + }, + transitionEnd: function transitionEnd() { + var swiper = this; + if (swiper.history.initialized) { + swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); + } + }, + }, + }; + + var HashNavigation = { + onHashCange: function onHashCange() { + var swiper = this; + var newHash = doc.location.hash.replace('#', ''); + var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); + if (newHash !== activeSlideHash) { + var newIndex = swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-hash=\"" + newHash + "\"]")).index(); + if (typeof newIndex === 'undefined') { return; } + swiper.slideTo(newIndex); + } + }, + setHash: function setHash() { + var swiper = this; + if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; } + if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) { + win.history.replaceState(null, null, (("#" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || '')); + } else { + var slide = swiper.slides.eq(swiper.activeIndex); + var hash = slide.attr('data-hash') || slide.attr('data-history'); + doc.location.hash = hash || ''; + } + }, + init: function init() { + var swiper = this; + if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; } + swiper.hashNavigation.initialized = true; + var hash = doc.location.hash.replace('#', ''); + if (hash) { + var speed = 0; + for (var i = 0, length = swiper.slides.length; i < length; i += 1) { + var slide = swiper.slides.eq(i); + var slideHash = slide.attr('data-hash') || slide.attr('data-history'); + if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { + var index = slide.index(); + swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); + } + } + } + if (swiper.params.hashNavigation.watchState) { + $(win).on('hashchange', swiper.hashNavigation.onHashCange); + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.params.hashNavigation.watchState) { + $(win).off('hashchange', swiper.hashNavigation.onHashCange); + } + }, + }; + var HashNavigation$1 = { + name: 'hash-navigation', + params: { + hashNavigation: { + enabled: false, + replaceState: false, + watchState: false, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + hashNavigation: { + initialized: false, + init: HashNavigation.init.bind(swiper), + destroy: HashNavigation.destroy.bind(swiper), + setHash: HashNavigation.setHash.bind(swiper), + onHashCange: HashNavigation.onHashCange.bind(swiper), + }, + }); + }, + on: { + init: function init() { + var swiper = this; + if (swiper.params.hashNavigation.enabled) { + swiper.hashNavigation.init(); + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.params.hashNavigation.enabled) { + swiper.hashNavigation.destroy(); + } + }, + transitionEnd: function transitionEnd() { + var swiper = this; + if (swiper.hashNavigation.initialized) { + swiper.hashNavigation.setHash(); + } + }, + }, + }; + + /* eslint no-underscore-dangle: "off" */ + + var Autoplay = { + run: function run() { + var swiper = this; + var $activeSlideEl = swiper.slides.eq(swiper.activeIndex); + var delay = swiper.params.autoplay.delay; + if ($activeSlideEl.attr('data-swiper-autoplay')) { + delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; + } + swiper.autoplay.timeout = Utils.nextTick(function () { + if (swiper.params.autoplay.reverseDirection) { + if (swiper.params.loop) { + swiper.loopFix(); + swiper.slidePrev(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.isBeginning) { + swiper.slidePrev(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.params.autoplay.stopOnLastSlide) { + swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else { + swiper.autoplay.stop(); + } + } else if (swiper.params.loop) { + swiper.loopFix(); + swiper.slideNext(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.isEnd) { + swiper.slideNext(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.params.autoplay.stopOnLastSlide) { + swiper.slideTo(0, swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else { + swiper.autoplay.stop(); + } + }, delay); + }, + start: function start() { + var swiper = this; + if (typeof swiper.autoplay.timeout !== 'undefined') { return false; } + if (swiper.autoplay.running) { return false; } + swiper.autoplay.running = true; + swiper.emit('autoplayStart'); + swiper.autoplay.run(); + return true; + }, + stop: function stop() { + var swiper = this; + if (!swiper.autoplay.running) { return false; } + if (typeof swiper.autoplay.timeout === 'undefined') { return false; } + + if (swiper.autoplay.timeout) { + clearTimeout(swiper.autoplay.timeout); + swiper.autoplay.timeout = undefined; + } + swiper.autoplay.running = false; + swiper.emit('autoplayStop'); + return true; + }, + pause: function pause(speed) { + var swiper = this; + if (!swiper.autoplay.running) { return; } + if (swiper.autoplay.paused) { return; } + if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); } + swiper.autoplay.paused = true; + if (speed === 0 || !swiper.params.autoplay.waitForTransition) { + swiper.autoplay.paused = false; + swiper.autoplay.run(); + } else { + swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd); + swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); + } + }, + }; + + var Autoplay$1 = { + name: 'autoplay', + params: { + autoplay: { + enabled: false, + delay: 3000, + waitForTransition: true, + disableOnInteraction: true, + stopOnLastSlide: false, + reverseDirection: false, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + autoplay: { + running: false, + paused: false, + run: Autoplay.run.bind(swiper), + start: Autoplay.start.bind(swiper), + stop: Autoplay.stop.bind(swiper), + pause: Autoplay.pause.bind(swiper), + onTransitionEnd: function onTransitionEnd(e) { + if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; } + if (e.target !== this) { return; } + swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd); + swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); + swiper.autoplay.paused = false; + if (!swiper.autoplay.running) { + swiper.autoplay.stop(); + } else { + swiper.autoplay.run(); + } + }, + }, + }); + }, + on: { + init: function init() { + var swiper = this; + if (swiper.params.autoplay.enabled) { + swiper.autoplay.start(); + } + }, + beforeTransitionStart: function beforeTransitionStart(speed, internal) { + var swiper = this; + if (swiper.autoplay.running) { + if (internal || !swiper.params.autoplay.disableOnInteraction) { + swiper.autoplay.pause(speed); + } else { + swiper.autoplay.stop(); + } + } + }, + sliderFirstMove: function sliderFirstMove() { + var swiper = this; + if (swiper.autoplay.running) { + if (swiper.params.autoplay.disableOnInteraction) { + swiper.autoplay.stop(); + } else { + swiper.autoplay.pause(); + } + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.autoplay.running) { + swiper.autoplay.stop(); + } + }, + }, + }; + + var Fade = { + setTranslate: function setTranslate() { + var swiper = this; + var slides = swiper.slides; + for (var i = 0; i < slides.length; i += 1) { + var $slideEl = swiper.slides.eq(i); + var offset = $slideEl[0].swiperSlideOffset; + var tx = -offset; + if (!swiper.params.virtualTranslate) { tx -= swiper.translate; } + var ty = 0; + if (!swiper.isHorizontal()) { + ty = tx; + tx = 0; + } + var slideOpacity = swiper.params.fadeEffect.crossFade + ? Math.max(1 - Math.abs($slideEl[0].progress), 0) + : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); + $slideEl + .css({ + opacity: slideOpacity, + }) + .transform(("translate3d(" + tx + "px, " + ty + "px, 0px)")); + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + var slides = swiper.slides; + var $wrapperEl = swiper.$wrapperEl; + slides.transition(duration); + if (swiper.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + slides.transitionEnd(function () { + if (eventTriggered) { return; } + if (!swiper || swiper.destroyed) { return; } + eventTriggered = true; + swiper.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend']; + for (var i = 0; i < triggerEvents.length; i += 1) { + $wrapperEl.trigger(triggerEvents[i]); + } + }); + } + }, + }; + + var EffectFade = { + name: 'effect-fade', + params: { + fadeEffect: { + crossFade: false, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + fadeEffect: { + setTranslate: Fade.setTranslate.bind(swiper), + setTransition: Fade.setTransition.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (swiper.params.effect !== 'fade') { return; } + swiper.classNames.push(((swiper.params.containerModifierClass) + "fade")); + var overwriteParams = { + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerGroup: 1, + watchSlidesProgress: true, + spaceBetween: 0, + virtualTranslate: true, + }; + Utils.extend(swiper.params, overwriteParams); + Utils.extend(swiper.originalParams, overwriteParams); + }, + setTranslate: function setTranslate() { + var swiper = this; + if (swiper.params.effect !== 'fade') { return; } + swiper.fadeEffect.setTranslate(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (swiper.params.effect !== 'fade') { return; } + swiper.fadeEffect.setTransition(duration); + }, + }, + }; + + var Cube = { + setTranslate: function setTranslate() { + var swiper = this; + var $el = swiper.$el; + var $wrapperEl = swiper.$wrapperEl; + var slides = swiper.slides; + var swiperWidth = swiper.width; + var swiperHeight = swiper.height; + var rtl = swiper.rtlTranslate; + var swiperSize = swiper.size; + var params = swiper.params.cubeEffect; + var isHorizontal = swiper.isHorizontal(); + var isVirtual = swiper.virtual && swiper.params.virtual.enabled; + var wrapperRotate = 0; + var $cubeShadowEl; + if (params.shadow) { + if (isHorizontal) { + $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); + if ($cubeShadowEl.length === 0) { + $cubeShadowEl = $('
'); + $wrapperEl.append($cubeShadowEl); + } + $cubeShadowEl.css({ height: (swiperWidth + "px") }); + } else { + $cubeShadowEl = $el.find('.swiper-cube-shadow'); + if ($cubeShadowEl.length === 0) { + $cubeShadowEl = $('
'); + $el.append($cubeShadowEl); + } + } + } + for (var i = 0; i < slides.length; i += 1) { + var $slideEl = slides.eq(i); + var slideIndex = i; + if (isVirtual) { + slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); + } + var slideAngle = slideIndex * 90; + var round = Math.floor(slideAngle / 360); + if (rtl) { + slideAngle = -slideAngle; + round = Math.floor(-slideAngle / 360); + } + var progress = Math.max(Math.min($slideEl[0].progress, 1), -1); + var tx = 0; + var ty = 0; + var tz = 0; + if (slideIndex % 4 === 0) { + tx = -round * 4 * swiperSize; + tz = 0; + } else if ((slideIndex - 1) % 4 === 0) { + tx = 0; + tz = -round * 4 * swiperSize; + } else if ((slideIndex - 2) % 4 === 0) { + tx = swiperSize + (round * 4 * swiperSize); + tz = swiperSize; + } else if ((slideIndex - 3) % 4 === 0) { + tx = -swiperSize; + tz = (3 * swiperSize) + (swiperSize * 4 * round); + } + if (rtl) { + tx = -tx; + } + + if (!isHorizontal) { + ty = tx; + tx = 0; + } + + var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)"; + if (progress <= 1 && progress > -1) { + wrapperRotate = (slideIndex * 90) + (progress * 90); + if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); } + } + $slideEl.transform(transform); + if (params.slideShadows) { + // Set shadows + var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); + var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $(("
")); + $slideEl.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $(("
")); + $slideEl.append(shadowAfter); + } + if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); } + if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); } + } + } + $wrapperEl.css({ + '-webkit-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"), + '-moz-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"), + '-ms-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"), + 'transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"), + }); + + if (params.shadow) { + if (isHorizontal) { + $cubeShadowEl.transform(("translate3d(0px, " + ((swiperWidth / 2) + params.shadowOffset) + "px, " + (-swiperWidth / 2) + "px) rotateX(90deg) rotateZ(0deg) scale(" + (params.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 = params.shadowScale; + var scale2 = params.shadowScale / multiplier; + var offset = params.shadowOffset; + $cubeShadowEl.transform(("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + ((swiperHeight / 2) + offset) + "px, " + (-swiperHeight / 2 / scale2) + "px) rotateX(-90deg)")); + } + } + var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0; + $wrapperEl + .transform(("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)")); + }, + setTransition: function setTransition(duration) { + var swiper = this; + var $el = swiper.$el; + var slides = swiper.slides; + slides + .transition(duration) + .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left') + .transition(duration); + if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { + $el.find('.swiper-cube-shadow').transition(duration); + } + }, + }; + + var EffectCube = { + name: 'effect-cube', + params: { + cubeEffect: { + slideShadows: true, + shadow: true, + shadowOffset: 20, + shadowScale: 0.94, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + cubeEffect: { + setTranslate: Cube.setTranslate.bind(swiper), + setTransition: Cube.setTransition.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (swiper.params.effect !== 'cube') { return; } + swiper.classNames.push(((swiper.params.containerModifierClass) + "cube")); + swiper.classNames.push(((swiper.params.containerModifierClass) + "3d")); + var overwriteParams = { + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerGroup: 1, + watchSlidesProgress: true, + resistanceRatio: 0, + spaceBetween: 0, + centeredSlides: false, + virtualTranslate: true, + }; + Utils.extend(swiper.params, overwriteParams); + Utils.extend(swiper.originalParams, overwriteParams); + }, + setTranslate: function setTranslate() { + var swiper = this; + if (swiper.params.effect !== 'cube') { return; } + swiper.cubeEffect.setTranslate(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (swiper.params.effect !== 'cube') { return; } + swiper.cubeEffect.setTransition(duration); + }, + }, + }; + + var Flip = { + setTranslate: function setTranslate() { + var swiper = this; + var slides = swiper.slides; + var rtl = swiper.rtlTranslate; + for (var i = 0; i < slides.length; i += 1) { + var $slideEl = slides.eq(i); + var progress = $slideEl[0].progress; + if (swiper.params.flipEffect.limitRotation) { + progress = Math.max(Math.min($slideEl[0].progress, 1), -1); + } + var offset = $slideEl[0].swiperSlideOffset; + var rotate = -180 * progress; + var rotateY = rotate; + var rotateX = 0; + var tx = -offset; + var ty = 0; + if (!swiper.isHorizontal()) { + ty = tx; + tx = 0; + rotateX = -rotateY; + rotateY = 0; + } else if (rtl) { + rotateY = -rotateY; + } + + $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; + + if (swiper.params.flipEffect.slideShadows) { + // Set shadows + var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); + var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $(("
")); + $slideEl.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $(("
")); + $slideEl.append(shadowAfter); + } + if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); } + if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); } + } + $slideEl + .transform(("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)")); + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + var slides = swiper.slides; + var activeIndex = swiper.activeIndex; + var $wrapperEl = swiper.$wrapperEl; + slides + .transition(duration) + .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left') + .transition(duration); + if (swiper.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + // eslint-disable-next-line + slides.eq(activeIndex).transitionEnd(function onTransitionEnd() { + if (eventTriggered) { return; } + if (!swiper || swiper.destroyed) { return; } + // if (!$(this).hasClass(swiper.params.slideActiveClass)) return; + eventTriggered = true; + swiper.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend']; + for (var i = 0; i < triggerEvents.length; i += 1) { + $wrapperEl.trigger(triggerEvents[i]); + } + }); + } + }, + }; + + var EffectFlip = { + name: 'effect-flip', + params: { + flipEffect: { + slideShadows: true, + limitRotation: true, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + flipEffect: { + setTranslate: Flip.setTranslate.bind(swiper), + setTransition: Flip.setTransition.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (swiper.params.effect !== 'flip') { return; } + swiper.classNames.push(((swiper.params.containerModifierClass) + "flip")); + swiper.classNames.push(((swiper.params.containerModifierClass) + "3d")); + var overwriteParams = { + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerGroup: 1, + watchSlidesProgress: true, + spaceBetween: 0, + virtualTranslate: true, + }; + Utils.extend(swiper.params, overwriteParams); + Utils.extend(swiper.originalParams, overwriteParams); + }, + setTranslate: function setTranslate() { + var swiper = this; + if (swiper.params.effect !== 'flip') { return; } + swiper.flipEffect.setTranslate(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (swiper.params.effect !== 'flip') { return; } + swiper.flipEffect.setTransition(duration); + }, + }, + }; + + var Coverflow = { + setTranslate: function setTranslate() { + var swiper = this; + var swiperWidth = swiper.width; + var swiperHeight = swiper.height; + var slides = swiper.slides; + var $wrapperEl = swiper.$wrapperEl; + var slidesSizesGrid = swiper.slidesSizesGrid; + var params = swiper.params.coverflowEffect; + var isHorizontal = swiper.isHorizontal(); + var transform = swiper.translate; + var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2); + var rotate = isHorizontal ? params.rotate : -params.rotate; + var translate = params.depth; + // Each slide offset from center + for (var i = 0, length = slides.length; i < length; i += 1) { + var $slideEl = slides.eq(i); + var slideSize = slidesSizesGrid[i]; + var slideOffset = $slideEl[0].swiperSlideOffset; + var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier; + + var rotateY = isHorizontal ? rotate * offsetMultiplier : 0; + var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; + // var rotateZ = 0 + var translateZ = -translate * Math.abs(offsetMultiplier); + + var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier); + var translateX = isHorizontal ? params.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)"; + + $slideEl.transform(slideTransform); + $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; + if (params.slideShadows) { + // Set shadows + var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); + var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); + if ($shadowBeforeEl.length === 0) { + $shadowBeforeEl = $(("
")); + $slideEl.append($shadowBeforeEl); + } + if ($shadowAfterEl.length === 0) { + $shadowAfterEl = $(("
")); + $slideEl.append($shadowAfterEl); + } + if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; } + if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; } + } + } + + // Set correct perspective for IE10 + if (Support.pointerEvents || Support.prefixedPointerEvents) { + var ws = $wrapperEl[0].style; + ws.perspectiveOrigin = center + "px 50%"; + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + swiper.slides + .transition(duration) + .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left') + .transition(duration); + }, + }; + + var EffectCoverflow = { + name: 'effect-coverflow', + params: { + coverflowEffect: { + rotate: 50, + stretch: 0, + depth: 100, + modifier: 1, + slideShadows: true, + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + coverflowEffect: { + setTranslate: Coverflow.setTranslate.bind(swiper), + setTransition: Coverflow.setTransition.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + if (swiper.params.effect !== 'coverflow') { return; } + + swiper.classNames.push(((swiper.params.containerModifierClass) + "coverflow")); + swiper.classNames.push(((swiper.params.containerModifierClass) + "3d")); + + swiper.params.watchSlidesProgress = true; + swiper.originalParams.watchSlidesProgress = true; + }, + setTranslate: function setTranslate() { + var swiper = this; + if (swiper.params.effect !== 'coverflow') { return; } + swiper.coverflowEffect.setTranslate(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (swiper.params.effect !== 'coverflow') { return; } + swiper.coverflowEffect.setTransition(duration); + }, + }, + }; + + var Thumbs = { + init: function init() { + var swiper = this; + var ref = swiper.params; + var thumbsParams = ref.thumbs; + var SwiperClass = swiper.constructor; + if (thumbsParams.swiper instanceof SwiperClass) { + swiper.thumbs.swiper = thumbsParams.swiper; + Utils.extend(swiper.thumbs.swiper.originalParams, { + watchSlidesProgress: true, + slideToClickedSlide: false, + }); + Utils.extend(swiper.thumbs.swiper.params, { + watchSlidesProgress: true, + slideToClickedSlide: false, + }); + } else if (Utils.isObject(thumbsParams.swiper)) { + swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, { + watchSlidesVisibility: true, + watchSlidesProgress: true, + slideToClickedSlide: false, + })); + swiper.thumbs.swiperCreated = true; + } + swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); + swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick); + }, + onThumbClick: function onThumbClick() { + var swiper = this; + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) { return; } + var clickedIndex = thumbsSwiper.clickedIndex; + if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; } + var slideToIndex; + if (thumbsSwiper.params.loop) { + slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); + } else { + slideToIndex = clickedIndex; + } + if (swiper.params.loop) { + var currentIndex = swiper.activeIndex; + if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { + swiper.loopFix(); + // eslint-disable-next-line + swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; + currentIndex = swiper.activeIndex; + } + var prevIndex = swiper.slides.eq(currentIndex).prevAll(("[data-swiper-slide-index=\"" + slideToIndex + "\"]")).eq(0).index(); + var nextIndex = swiper.slides.eq(currentIndex).nextAll(("[data-swiper-slide-index=\"" + slideToIndex + "\"]")).eq(0).index(); + if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; } + else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; } + else if (nextIndex - currentIndex < currentIndex - prevIndex) { slideToIndex = nextIndex; } + else { slideToIndex = prevIndex; } + } + swiper.slideTo(slideToIndex); + }, + update: function update(initial) { + var swiper = this; + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) { return; } + + var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' + ? thumbsSwiper.slidesPerViewDynamic() + : thumbsSwiper.params.slidesPerView; + + if (swiper.realIndex !== thumbsSwiper.realIndex) { + var currentThumbsIndex = thumbsSwiper.activeIndex; + var newThumbsIndex; + if (thumbsSwiper.params.loop) { + if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { + thumbsSwiper.loopFix(); + // eslint-disable-next-line + thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; + currentThumbsIndex = thumbsSwiper.activeIndex; + } + // Find actual thumbs index to slide to + var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(("[data-swiper-slide-index=\"" + (swiper.realIndex) + "\"]")).eq(0).index(); + var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(("[data-swiper-slide-index=\"" + (swiper.realIndex) + "\"]")).eq(0).index(); + if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; } + else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; } + else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; } + else { newThumbsIndex = prevThumbsIndex; } + } else { + newThumbsIndex = swiper.realIndex; + } + + if (thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { + if (thumbsSwiper.params.centeredSlides) { + if (newThumbsIndex > currentThumbsIndex) { + newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; + } else { + newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; + } + } else if (newThumbsIndex > currentThumbsIndex) { + newThumbsIndex = newThumbsIndex - slidesPerView + 1; + } + thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); + } + } + + // Activate thumbs + var thumbsToActivate = 1; + var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; + + if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { + thumbsToActivate = swiper.params.slidesPerView; + } + + thumbsSwiper.slides.removeClass(thumbActiveClass); + if (thumbsSwiper.params.loop) { + for (var i = 0; i < thumbsToActivate; i += 1) { + thumbsSwiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]")).addClass(thumbActiveClass); + } + } else { + for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) { + thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass); + } + } + }, + }; + var Thumbs$1 = { + name: 'thumbs', + params: { + thumbs: { + swiper: null, + slideThumbActiveClass: 'swiper-slide-thumb-active', + thumbsContainerClass: 'swiper-container-thumbs', + }, + }, + create: function create() { + var swiper = this; + Utils.extend(swiper, { + thumbs: { + swiper: null, + init: Thumbs.init.bind(swiper), + update: Thumbs.update.bind(swiper), + onThumbClick: Thumbs.onThumbClick.bind(swiper), + }, + }); + }, + on: { + beforeInit: function beforeInit() { + var swiper = this; + var ref = swiper.params; + var thumbs = ref.thumbs; + if (!thumbs || !thumbs.swiper) { return; } + swiper.thumbs.init(); + swiper.thumbs.update(true); + }, + slideChange: function slideChange() { + var swiper = this; + if (!swiper.thumbs.swiper) { return; } + swiper.thumbs.update(); + }, + update: function update() { + var swiper = this; + if (!swiper.thumbs.swiper) { return; } + swiper.thumbs.update(); + }, + resize: function resize() { + var swiper = this; + if (!swiper.thumbs.swiper) { return; } + swiper.thumbs.update(); + }, + observerUpdate: function observerUpdate() { + var swiper = this; + if (!swiper.thumbs.swiper) { return; } + swiper.thumbs.update(); + }, + setTransition: function setTransition(duration) { + var swiper = this; + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) { return; } + thumbsSwiper.setTransition(duration); + }, + beforeDestroy: function beforeDestroy() { + var swiper = this; + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) { return; } + if (swiper.thumbs.swiperCreated && thumbsSwiper) { + thumbsSwiper.destroy(); + } + }, + }, + }; + + // Swiper Class + + var components = [ + Device$1, + Support$1, + Browser$1, + Resize, + Observer$1, + Virtual$1, + Keyboard$1, + Mousewheel$1, + Navigation$1, + Pagination$1, + Scrollbar$1, + Parallax$1, + Zoom$1, + Lazy$1, + Controller$1, + A11y, + History$1, + HashNavigation$1, + Autoplay$1, + EffectFade, + EffectCube, + EffectFlip, + EffectCoverflow, + Thumbs$1 + ]; + + if (typeof Swiper.use === 'undefined') { + Swiper.use = Swiper.Class.use; + Swiper.installModule = Swiper.Class.installModule; + } + + Swiper.use(components); + + return Swiper; + +}))); diff --git a/style.css b/style.css index 30e458a..d91b146 100755 --- a/style.css +++ b/style.css @@ -1,3 +1,4 @@ + *{ margin:0; padding:0; @@ -384,6 +385,17 @@ a:hover{ End Header CSS =====================*/ +/*=================== + swiper CSS +=====================*/ +.swiper-container { + width: 100%; + height: 600px; +} + +/*=================== + End swiper CSS +=====================*/ /*=================== Slider CSS -- libgit2 0.21.4