diff --git a/core/src/components/slides/slides-vendor.scss b/core/src/components/slides/slides-vendor.scss
index f099e7eae3..5a62c704f1 100644
--- a/core/src/components/slides/slides-vendor.scss
+++ b/core/src/components/slides/slides-vendor.scss
@@ -1,354 +1,113 @@
/**
- * Swiper 3.4.2
+ * Swiper 4.2.6
* Most modern mobile touch slider and framework with hardware accelerated transitions
- *
* http://www.idangero.us/swiper/
*
- * Copyright 2017, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
+ * Copyright 2014-2018 Vladimir Kharlampidi
*
- * Licensed under MIT
+ * Released under the MIT License
*
- * Released on: March 10, 2017
+ * Released on: May 1, 2018
*/
.swiper-container {
- margin-left: auto;
- margin-right: auto;
+ margin: 0 auto;
position: relative;
overflow: hidden;
+ list-style: none;
+ padding: 0;
/* Fix of Webkit flickering */
z-index: 1;
}
-
.swiper-container-no-flexbox .swiper-slide {
float: left;
}
-
.swiper-container-vertical > .swiper-wrapper {
-webkit-box-orient: vertical;
- -moz-box-orient: vertical;
- -ms-flex-direction: column;
+ -webkit-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: -moz-box;
- display: -ms-flexbox;
display: -webkit-flex;
+ display: -ms-flexbox;
display: flex;
-webkit-transition-property: -webkit-transform;
- -moz-transition-property: -moz-transform;
- -o-transition-property: -o-transform;
- -ms-transition-property: -ms-transform;
+ transition-property: -webkit-transform;
+ -o-transition-property: transform;
transition-property: transform;
+ transition-property: transform, -webkit-transform;
-webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
box-sizing: content-box;
}
-
.swiper-container-android .swiper-slide,
.swiper-wrapper {
-webkit-transform: translate3d(0px, 0, 0);
- -moz-transform: translate3d(0px, 0, 0);
- -o-transform: translate(0px, 0px);
- -ms-transform: translate3d(0px, 0, 0);
transform: translate3d(0px, 0, 0);
}
-
.swiper-container-multirow > .swiper-wrapper {
- -webkit-box-lines: multiple;
- -moz-box-lines: multiple;
- -ms-flex-wrap: wrap;
-webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
flex-wrap: wrap;
}
-
.swiper-container-free-mode > .swiper-wrapper {
-webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
-o-transition-timing-function: ease-out;
transition-timing-function: ease-out;
margin: 0 auto;
}
-
.swiper-slide {
-webkit-flex-shrink: 0;
- -ms-flex: 0 0 auto;
+ -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-invisible-blank-slide {
+ visibility: hidden;
}
-
/* Auto Height */
.swiper-container-autoheight,
.swiper-container-autoheight .swiper-slide {
height: auto;
}
-
.swiper-container-autoheight .swiper-wrapper {
-webkit-box-align: start;
- -ms-flex-align: start;
-webkit-align-items: flex-start;
+ -ms-flex-align: start;
align-items: flex-start;
- -webkit-transition-property: -webkit-transform, height;
- -moz-transition-property: -moz-transform;
- -o-transition-property: -o-transform;
- -ms-transition-property: -ms-transform;
+ -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;
}
-
-/* a11y */
-.swiper-container .swiper-notification {
- position: absolute;
- left: 0;
- top: 0;
- pointer-events: none;
- opacity: 0;
- z-index: -1000;
-}
-
-/* IE10 Windows Phone 8 Fixes */
-.swiper-wp8-horizontal {
- -ms-touch-action: pan-y;
- touch-action: pan-y;
-}
-
-.swiper-wp8-vertical {
- -ms-touch-action: pan-x;
- touch-action: pan-x;
-}
-
-/* Arrows */
-.swiper-button-prev,
-.swiper-button-next {
- position: absolute;
- top: 50%;
- width: 27px;
- height: 44px;
- margin-top: -22px;
- z-index: 10;
- cursor: pointer;
- -moz-background-size: 27px 44px;
- -webkit-background-size: 27px 44px;
- background-size: 27px 44px;
- background-position: center;
- background-repeat: no-repeat;
-}
-
-.swiper-button-prev.swiper-button-disabled,
-.swiper-button-next.swiper-button-disabled {
- opacity: .35;
- cursor: auto;
- pointer-events: none;
-}
-
-.swiper-button-prev,
-.swiper-container-rtl .swiper-button-next {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
- left: 10px;
- right: auto;
-}
-
-.swiper-button-prev.swiper-button-black,
-.swiper-container-rtl .swiper-button-next.swiper-button-black {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
-}
-
-.swiper-button-prev.swiper-button-white,
-.swiper-container-rtl .swiper-button-next.swiper-button-white {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
-}
-
-.swiper-button-next,
-.swiper-container-rtl .swiper-button-prev {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
- right: 10px;
- left: auto;
-}
-
-.swiper-button-next.swiper-button-black,
-.swiper-container-rtl .swiper-button-prev.swiper-button-black {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
-}
-
-.swiper-button-next.swiper-button-white,
-.swiper-container-rtl .swiper-button-prev.swiper-button-white {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
-}
-
-/* Pagination Styles */
-.swiper-pagination {
- position: absolute;
- text-align: center;
- -webkit-transition: 300ms;
- -moz-transition: 300ms;
- -o-transition: 300ms;
- transition: 300ms;
- -webkit-transform: translate3d(0, 0, 0);
- -ms-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- z-index: 10;
-}
-
-.swiper-pagination.swiper-pagination-hidden {
- opacity: 0;
-}
-
-/* Common Styles */
-.swiper-pagination-fraction,
-.swiper-pagination-custom,
-.swiper-container-horizontal > .swiper-pagination-bullets {
- bottom: 10px;
- left: 0;
- width: 100%;
-}
-
-/* Bullets */
-.swiper-pagination-bullet {
- width: 8px;
- height: 8px;
- display: inline-block;
- border-radius: 100%;
- opacity: .2;
-}
-
-button.swiper-pagination-bullet {
- border: none;
- margin: 0;
- padding: 0;
- box-shadow: none;
- -moz-appearance: none;
- -ms-appearance: none;
- -webkit-appearance: none;
- appearance: none;
-}
-
-.swiper-pagination-clickable .swiper-pagination-bullet {
- cursor: pointer;
-}
-
-.swiper-pagination-white .swiper-pagination-bullet {
- background: #fff;
-}
-
-.swiper-pagination-bullet-active {
- opacity: 1;
-}
-
-.swiper-pagination-white .swiper-pagination-bullet-active {
- background: #fff;
-}
-
-.swiper-pagination-black .swiper-pagination-bullet-active {
- background: #000;
-}
-
-.swiper-container-vertical > .swiper-pagination-bullets {
- right: 10px;
- top: 50%;
- -webkit-transform: translate3d(0px, -50%, 0);
- -moz-transform: translate3d(0px, -50%, 0);
- -o-transform: translate(0px, -50%);
- -ms-transform: translate3d(0px, -50%, 0);
- transform: translate3d(0px, -50%, 0);
-}
-
-.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
- margin: 5px 0;
- display: block;
-}
-
-.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
- margin: 0 5px;
-}
-
-/* Progress */
-.swiper-pagination-progress {
- position: absolute;
-}
-
-.swiper-pagination-progress .swiper-pagination-progressbar {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- -webkit-transform: scale(0);
- -ms-transform: scale(0);
- -o-transform: scale(0);
- transform: scale(0);
- -webkit-transform-origin: left top;
- -moz-transform-origin: left top;
- -ms-transform-origin: left top;
- -o-transform-origin: left top;
- transform-origin: left top;
-}
-
-.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
- -webkit-transform-origin: right top;
- -moz-transform-origin: right top;
- -ms-transform-origin: right top;
- -o-transform-origin: right top;
- transform-origin: right top;
-}
-
-.swiper-container-horizontal > .swiper-pagination-progress {
- width: 100%;
- height: 4px;
- left: 0;
- top: 0;
-}
-
-.swiper-container-vertical > .swiper-pagination-progress {
- width: 4px;
- height: 100%;
- left: 0;
- top: 0;
-}
-
-.swiper-pagination-progress.swiper-pagination-white {
- background: rgba(255, 255, 255, .5);
-}
-
-.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
- background: #fff;
-}
-
-.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
- background: #000;
-}
-
-/* 3D Container */
+/* 3D Effects */
.swiper-container-3d {
-webkit-perspective: 1200px;
- -moz-perspective: 1200px;
- -o-perspective: 1200px;
perspective: 1200px;
}
-
.swiper-container-3d .swiper-wrapper,
.swiper-container-3d .swiper-slide,
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
-.swiper-container-3d .swiper-slide-shadow-top, ¡
+.swiper-container-3d .swiper-slide-shadow-top,
.swiper-container-3d .swiper-slide-shadow-bottom,
.swiper-container-3d .swiper-cube-shadow {
-webkit-transform-style: preserve-3d;
- -moz-transform-style: preserve-3d;
- -ms-transform-style: preserve-3d;
transform-style: preserve-3d;
}
-
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top,
@@ -361,210 +120,293 @@ button.swiper-pagination-bullet {
pointer-events: none;
z-index: 10;
}
-
.swiper-container-3d .swiper-slide-shadow-left {
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
+ 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, right top, left top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
+ 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 top, left bottom, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
+ 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 bottom, left top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
+ 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));
}
-
-/* Coverflow */
-.swiper-container-coverflow .swiper-wrapper,
-.swiper-container-flip .swiper-wrapper {
- /* Windows 8 IE 10 fix */
- -ms-perspective: 1200px;
+/* IE10 Windows Phone 8 Fixes */
+.swiper-container-wp8-horizontal,
+.swiper-container-wp8-horizontal > .swiper-wrapper {
+ -ms-touch-action: pan-y;
+ touch-action: pan-y;
}
-
-/* Cube + Flip */
-.swiper-container-cube,
-.swiper-container-flip {
- overflow: visible;
+.swiper-container-wp8-vertical,
+.swiper-container-wp8-vertical > .swiper-wrapper {
+ -ms-touch-action: pan-x;
+ touch-action: pan-x;
}
-
-.swiper-container-cube .swiper-slide,
-.swiper-container-flip .swiper-slide {
- pointer-events: none;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
- z-index: 1;
+.swiper-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-container-cube .swiper-slide .swiper-slide,
-.swiper-container-flip .swiper-slide .swiper-slide {
+.swiper-button-prev.swiper-button-disabled,
+.swiper-button-next.swiper-button-disabled {
+ opacity: 0.35;
+ cursor: auto;
pointer-events: none;
}
-
-.swiper-container-cube .swiper-slide-active,
-.swiper-container-flip .swiper-slide-active,
-.swiper-container-cube .swiper-slide-active .swiper-slide-active,
-.swiper-container-flip .swiper-slide-active .swiper-slide-active {
- pointer-events: auto;
+.swiper-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-container-cube .swiper-slide-shadow-top,
-.swiper-container-flip .swiper-slide-shadow-top,
-.swiper-container-cube .swiper-slide-shadow-bottom,
-.swiper-container-flip .swiper-slide-shadow-bottom,
-.swiper-container-cube .swiper-slide-shadow-left,
-.swiper-container-flip .swiper-slide-shadow-left,
-.swiper-container-cube .swiper-slide-shadow-right,
-.swiper-container-flip .swiper-slide-shadow-right {
- z-index: 0;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
+.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;
}
-
-/* Cube */
-.swiper-container-cube .swiper-slide {
- visibility: hidden;
- -webkit-transform-origin: 0 0;
- -moz-transform-origin: 0 0;
- -ms-transform-origin: 0 0;
- transform-origin: 0 0;
+.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%;
- height: 100%;
}
-
-.swiper-container-cube.swiper-container-rtl .swiper-slide {
- -webkit-transform-origin: 100% 0;
- -moz-transform-origin: 100% 0;
- -ms-transform-origin: 100% 0;
- transform-origin: 100% 0;
+/* Bullets */
+.swiper-pagination-bullets-dynamic {
+ overflow: hidden;
+ font-size: 0;
}
-
-.swiper-container-cube .swiper-slide-active,
-.swiper-container-cube .swiper-slide-next,
-.swiper-container-cube .swiper-slide-prev,
-.swiper-container-cube .swiper-slide-next + .swiper-slide {
- pointer-events: auto;
- visibility: visible;
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+ -webkit-transform: scale(0.33);
+ -ms-transform: scale(0.33);
+ transform: scale(0.33);
+ position: relative;
}
-
-.swiper-container-cube .swiper-cube-shadow {
+.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;
- bottom: 0px;
+ top: 0;
width: 100%;
height: 100%;
- background: #000;
- opacity: .6;
- -webkit-filter: blur(50px);
- filter: blur(50px);
- z-index: 0;
+ -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;
}
-
-/* Fade */
-.swiper-container-fade.swiper-container-free-mode .swiper-slide {
- -webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
- -o-transition-timing-function: ease-out;
- transition-timing-function: ease-out;
+.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+ -webkit-transform-origin: right top;
+ -ms-transform-origin: right top;
+ transform-origin: right top;
}
-
-.swiper-container-fade .swiper-slide {
- pointer-events: none;
- -webkit-transition-property: opacity;
- -moz-transition-property: opacity;
- -o-transition-property: opacity;
- transition-property: opacity;
-}
-
-.swiper-container-fade .swiper-slide .swiper-slide {
- pointer-events: none;
-}
-
-.swiper-container-fade .swiper-slide-active,
-.swiper-container-fade .swiper-slide-active .swiper-slide-active {
- pointer-events: auto;
-}
-
-.swiper-zoom-container {
+.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%;
- display: -webkit-box;
- display: -moz-box;
- display: -ms-flexbox;
- display: -webkit-flex;
- display: flex;
- -webkit-box-pack: center;
- -moz-box-pack: center;
- -ms-flex-pack: center;
- -webkit-justify-content: center;
- justify-content: center;
- -webkit-box-align: center;
- -moz-box-align: center;
- -ms-flex-align: center;
- -webkit-align-items: center;
- align-items: center;
- text-align: center;
+ left: 0;
+ top: 0;
}
-
-.swiper-zoom-container > img,
-.swiper-zoom-container > svg,
-.swiper-zoom-container > canvas {
- max-width: 100%;
- max-height: 100%;
- object-fit: contain;
+.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%;
@@ -573,7 +415,6 @@ button.swiper-pagination-bullet {
height: 5px;
width: 98%;
}
-
.swiper-container-vertical > .swiper-scrollbar {
position: absolute;
right: 3px;
@@ -582,20 +423,49 @@ button.swiper-pagination-bullet {
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;
@@ -607,37 +477,142 @@ button.swiper-pagination-bullet {
margin-top: -21px;
z-index: 10;
-webkit-transform-origin: 50%;
- -moz-transform-origin: 50%;
+ -ms-transform-origin: 50%;
transform-origin: 50%;
-webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
- -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
animation: swiper-preloader-spin 1s steps(12, end) infinite;
}
-
.swiper-lazy-preloader:after {
display: block;
- content: "";
+ content: '';
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
background-position: 50%;
- -webkit-background-size: 100%;
background-size: 100%;
background-repeat: no-repeat;
}
-
.swiper-lazy-preloader-white:after {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
}
-
@-webkit-keyframes swiper-preloader-spin {
100% {
-webkit-transform: rotate(360deg);
- }
-}
-
-@keyframes swiper-preloader-spin {
- 100% {
transform: rotate(360deg);
}
}
+@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;
+}
\ No newline at end of file
diff --git a/core/src/components/slides/slides.tsx b/core/src/components/slides/slides.tsx
index 43b4f15354..09c137188f 100644
--- a/core/src/components/slides/slides.tsx
+++ b/core/src/components/slides/slides.tsx
@@ -1,5 +1,13 @@
-import { Component, Element, Event, EventEmitter, Method, Prop, Watch } from '@stencil/core';
-import { Swiper } from './vendor/swiper.js';
+import {
+ Component,
+ Element,
+ Event,
+ EventEmitter,
+ Method,
+ Prop,
+ Watch
+} from '@stencil/core';
+import { Swiper } from './vendor/swiper.js';
@Component({
tag: 'ion-slides',
styleUrls: {
@@ -12,7 +20,6 @@ import { Swiper } from './vendor/swiper.js';
assetsDir: 'vendor'
})
export class Slides {
-
private container!: HTMLElement;
private swiper: any;
@@ -106,22 +113,15 @@ export class Slides {
}
componentDidUnload() {
- this.enableKeyboardControl(false);
this.swiper.destroy(true, true);
}
private initSlides() {
console.debug(`ion-slides, init`);
-
this.container = this.el.children[0] as HTMLElement;
const finalOptions = this.normalizeOptions();
// init swiper core
this.swiper = new Swiper(this.container, finalOptions);
-
- if (finalOptions.keyboardControl) {
- // init keyboard event listeners
- this.enableKeyboardControl(true);
- }
}
/**
@@ -203,7 +203,7 @@ export class Slides {
*/
@Method()
startAutoplay(): void {
- this.swiper.startAutoplay();
+ this.swiper.autoplay.start();
}
/**
@@ -211,7 +211,7 @@ export class Slides {
*/
@Method()
stopAutoplay(): void {
- this.swiper.stopAutoplay();
+ this.swiper.autoplay.stop();
}
/**
@@ -247,21 +247,10 @@ export class Slides {
this.swiper.unlockSwipes();
}
- /**
- * Enable or disable keyboard control.
- */
- private enableKeyboardControl(shouldEnableKeyboard: boolean) {
- if (shouldEnableKeyboard) {
- return this.swiper.enableKeyboardControl();
- }
- this.swiper.disableKeyboardControl();
- }
-
private normalizeOptions() {
// Base options, can be changed
const swiperOptions = {
effect: 'slide',
- autoplay: 0,
direction: 'horizontal',
initialSlide: 0,
loop: false,
@@ -323,7 +312,6 @@ export class Slides {
runCallbacksOnInit: true,
controlBy: 'slide',
controlInverse: false,
- keyboardControl: true,
coverflow: {
rotate: 50,
stretch: 0,
@@ -369,18 +357,12 @@ export class Slides {
};
// Merge the base, user options, and events together then pas to swiper
- return Object.assign(
- {},
- swiperOptions,
- this.options,
- eventOptions
- );
-
-}
+ return Object.assign({}, swiperOptions, this.options, eventOptions);
+ }
render() {
return (
-
+
diff --git a/core/src/components/slides/test/basic/index.html b/core/src/components/slides/test/basic/index.html
index 35a68eaa36..8650217cf7 100644
--- a/core/src/components/slides/test/basic/index.html
+++ b/core/src/components/slides/test/basic/index.html
@@ -63,7 +63,12 @@
}
function slideAutoPlay() {
- slides.options = Object.assign({}, slides.options, {autoplay: 300});
+ slides.options = Object.assign({}, slides.options, {
+ autoplay: {
+ delay: 2500,
+ disableOnInteraction: false
+ }
+ });
slides.startAutoplay();
}
diff --git a/core/src/components/slides/vendor/swiper.d.ts b/core/src/components/slides/vendor/swiper.d.ts
index 9678067efe..b86fa862e9 100644
--- a/core/src/components/slides/vendor/swiper.d.ts
+++ b/core/src/components/slides/vendor/swiper.d.ts
@@ -1,11 +1,195 @@
-// Type definitions for Swiper 3.4
+// Type definitions for Swiper 4.2
// Project: https://github.com/nolimits4web/Swiper
-// Definitions by: Sebastián Galiano
, Luca Trazzi
+// Definitions by: Sebastián Galiano
, Luca Trazzi , Eugene Matseruk
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.7
+
+type CommonEvent =
+ | 'init'
+ | 'beforeDestroy'
+ | 'slideChange'
+ | 'slideChangeTransitionStart'
+ | 'slideChangeTransitionEnd'
+ | 'slideNextTransitionStart'
+ | 'slideNextTransitionEnd'
+ | 'slidePrevTransitionStart'
+ | 'slidePrevTransitionEnd'
+ | 'transitionStart'
+ | 'transitionEnd'
+ | 'touchStart'
+ | 'touchMove'
+ | 'touchMoveOpposite'
+ | 'sliderMove'
+ | 'touchEnd'
+ | 'click'
+ | 'tap'
+ | 'doubleTap'
+ | 'imagesReady'
+ | 'progress'
+ | 'reachBeginning'
+ | 'reachEnd'
+ | 'fromEdge'
+ | 'setTranslate'
+ | 'setTransition'
+ | 'resize';
+
+type PaginationEvent = 'paginationRender' | 'paginationUpdate';
+type AutoplayEvent = 'autoplayStart' | 'autoplayStop' | 'autoplay';
+type LazyLoadingEvent = 'lazyImageLoad' | 'lazyImageReady';
+
+type SwiperEvent = CommonEvent | PaginationEvent | AutoplayEvent | LazyLoadingEvent;
+
+interface NavigationOptions {
+ nextEl?: string | HTMLElement;
+ prevEl?: string | HTMLElement;
+ hideOnClick?: boolean;
+ disabledClass?: string;
+ hiddenClass?: string;
+}
+
+interface PaginationOptions {
+ el?: string;
+ type?: 'bullets' | 'fraction' | 'progressbar' | 'custom';
+ bulletElement?: string;
+ dynamicBullets?: boolean;
+ dynamicMainBullets?: number;
+ hideOnClick?: boolean;
+ clickable?: boolean;
+ progressbarOpposite?: boolean;
+
+ bulletClass?: string;
+ bulletActiveClass?: string;
+ modifierClass?: string;
+ currentClass?: string;
+ totalClass?: string;
+ hiddenClass?: string;
+ progressbarFillClass?: string;
+ clickableClass?: string;
+
+ renderBullet?: (index: number, className: string) => void;
+ renderFraction?: (currentClass: string, totalClass: string) => void;
+ renderProgressbar?: (progressbarFillClass: string) => void;
+ renderCustom?: (swiper: Swiper, current: number, total: number) => void;
+}
+
+interface ScrollbarOptions {
+ el?: string | HTMLElement;
+ hide?: boolean;
+ draggable?: boolean;
+ snapOnRelease?: boolean;
+ dragSize?: 'auto' | number;
+ lockClass?: 'string';
+ dragClass?: 'string';
+}
+
+interface AutoplayOptions {
+ delay?: number;
+ stopOnLastSlide?: boolean;
+ disableOnInteraction?: boolean;
+ reverseDirection?: boolean;
+ waitForTransition?: boolean;
+}
+
+interface LazyLoadingOptions {
+ loadPrevNext?: string;
+ loadPrevNextAmount?: number;
+ loadOnTransitionStart?: boolean;
+ elementClass?: string;
+ loadingClass?: string;
+ loadedClass?: string;
+ preloaderClass?: string;
+}
+
+interface FadeEffectOptions {
+ crossFade: boolean;
+}
+
+interface CoverflowEffectOptions {
+ slideShadows?: boolean;
+ rotate?: number;
+ stretch?: number;
+ depth?: number;
+ modifier?: number;
+}
+
+interface FlipEffectOptions {
+ slideShadows?: boolean;
+ limitRotation?: boolean;
+}
+
+interface CubeEffectOptions {
+ slideShadows?: boolean;
+ shadow?: boolean;
+ shadowOffset: number;
+ shadowScale: number;
+}
+
+interface ZoomOptions {
+ maxRatio?: number;
+ minRatio?: number;
+ toggle?: boolean;
+ containerClass?: string;
+ zoomedSlideClass?: string;
+}
+
+interface KeyboardControlOptions {
+ enabled?: boolean;
+ onlyInViewport?: boolean;
+}
+
+interface MouseWheelControlOptions {
+ forceToAxis?: boolean;
+ releaseOnEdges?: boolean;
+ invert?: boolean;
+ sensitivity?: number;
+ eventsTarged?: string | HTMLElement;
+}
+
+interface VirtualSlidesRenderExternalData {
+ offset: number;
+ from: number;
+ to: number;
+ slides: any[];
+}
+
+interface VirtualSlidesOptions {
+ slides?: any[];
+ cache?: boolean;
+ renderSlide?: (slide: any, index: number) => void;
+ renderExternal?: (data: VirtualSlidesRenderExternalData) => void;
+}
+
+interface HashNavigationOptions {
+ watchState?: boolean;
+ replaceState?: boolean;
+}
+
+interface HistoryNavigationOptions {
+ replaceState?: boolean;
+ key?: string;
+}
+
+interface ControllerOptions {
+ control: Swiper;
+ inverse: boolean;
+ by: 'slide' | 'container';
+}
+
+interface AccessibilityOptions {
+ enabled?: boolean;
+ prevSlideMessage?: string;
+ nextSlideMessage?: string;
+ firstSlideMessage?: string;
+ lastSlideMessage?: string;
+ paginationBulletMessage?: string;
+ notificationClass?: string;
+}
export interface SwiperOptions {
+ // General parameters
+ init?: boolean;
initialSlide?: number;
- direction?: string;
+ direction?: 'horizontal' | 'vertical';
speed?: number;
setWrapperSize?: boolean;
virtualTranslate?: boolean;
@@ -14,15 +198,61 @@ export interface SwiperOptions {
autoHeight?: boolean;
roundLengths?: boolean;
nested?: boolean;
+ uniqueNavElements?: boolean;
+ effect?: 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip';
+ runCallbacksOnInit?: boolean;
+ watchOverflow?: boolean;
+ on?: {[key in SwiperEvent]?: () => void };
- // Autoplay
- autoplay?: number;
- autoplayStopOnLast?: boolean;
- autoplayDisableOnInteraction?: boolean;
+ // Slides grid
+ spaceBetween?: number;
+ slidesPerView?: 'auto' | number;
+ slidesPerColumn?: number;
+ slidesPerColumnFill?: 'row' | 'column';
+ slidesPerGroup?: number;
+ centeredSlides?: boolean;
+ slidesOffsetBefore?: number;
+ slidesOffsetAfter?: number;
+ normalizeSlideIndex?: boolean;
- // Progress
- watchSlidesProgress?: boolean;
- watchSlidesVisibility?: boolean;
+ // Grab cursor
+ grabCursor?: boolean;
+
+ // Touches
+ touchEventsTarget?: 'container' | 'wrapper';
+ touchRatio?: number;
+ touchAngle?: number;
+ simulateTouch?: boolean;
+ shortSwipes?: boolean;
+ longSwipes?: boolean;
+ longSwipesRatio?: number;
+ longSwipesMs?: number;
+ followFinger?: boolean;
+ allowTouchMove?: boolean;
+ threshold?: number;
+ touchMoveStopPropagation?: boolean;
+ iOSEdgeSwipeDetection?: boolean;
+ iOSEdgeSwipeThreshold?: number;
+ touchReleaseOnEdges?: boolean;
+ passiveListeners?: boolean;
+
+ // Touch Resistance
+ resistance?: boolean;
+ resistanceRatio?: number;
+
+ // Swiping / No swiping
+ preventIntercationOnTransition?: boolean;
+ allowSlidePrev?: boolean;
+ allowSlideNext?: boolean;
+ noSwiping?: boolean;
+ noSwipingClass?: string;
+ noSwipingSelector?: string;
+ swipeHandler?: string | HTMLElement;
+
+ // Clicks
+ preventClicks?: boolean;
+ preventClicksPropagation?: boolean;
+ slideToClickedSlide?: boolean;
// Freemode
freeMode?: boolean;
@@ -34,291 +264,195 @@ export interface SwiperOptions {
freeModeMinimumVelocity?: number;
freeModeSticky?: boolean;
- // Effects
- effect?: string;
- fade?: {};
- cube?: {};
- coverflow?: {};
- flip?: {};
-
- // Parallax
- parallax?: boolean;
-
- // Slides grid
- spaceBetween?: number;
- slidesPerView?: number | string;
- slidesPerColumn?: number;
- slidesPerColumnFill?: string;
- slidesPerGroup?: number;
- centeredSlides?: boolean;
- slidesOffsetBefore?: number;
- slidesOffsetAfter?: number;
-
- // Grab Cursor
- grabCursor?: boolean;
-
- // Touches
- touchEventsTarget?: string;
- touchRatio?: number;
- touchAngle?: number;
- simulateTouch?: boolean;
- shortSwipes?: boolean;
- longSwipes?: boolean;
- longSwipesRatio?: number;
- longSwipesMs?: number;
- followFinger?: boolean;
- onlyExternal?: boolean;
- threshold?: number;
- touchMoveStopPropagation?: boolean;
- iOSEdgeSwipeDetection?: boolean;
- iOSEdgeSwipeThreshold?: number;
-
- // Touch Resistance
- resistance?: boolean;
- resistanceRatio?: number;
-
- // Clicks
- preventClicks?: boolean;
- preventClicksPropagation?: boolean;
- slideToClickedSlide?: boolean;
-
- // Swiping / No swiping
- allowSwipeToPrev?: boolean;
- allowSwipeToNext?: boolean;
- noSwiping?: boolean;
- noSwipingClass?: string;
- swipeHandler?: string | Element;
-
- // Navigation Controls
- uniqueNavElements?: boolean;
-
- // Pagination
- pagination?: string | Element;
- paginationType?: string;
- paginationHide?: boolean;
- paginationClickable?: boolean;
- paginationElement?: string;
- paginationBulletRender?(swiper: Swiper, index: number, className: string): void;
- paginationFractionRender?(swiper: Swiper, currentClassName: string, totalClassName: string): void;
- paginationProgressRender?(swiper: Swiper, progressbarClass: string): void;
- paginationCustomRender?(swiper: Swiper, current: number, total: number): void;
-
- // Navigation Buttons
- nextButton?: string | Element;
- prevButton?: string | Element;
-
- // Scollbar
- scrollbar?: string | Element | SwiperScrollbarOptions;
- scrollbarHide?: boolean;
- scrollbarDraggable?: boolean;
- scrollbarSnapOnRelease?: boolean;
-
- // Accessibility
- a11y?: boolean;
- prevSlideMessage?: string;
- nextSlideMessage?: string;
- firstSlideMessage?: string;
- lastSlideMessage?: string;
- paginationBulletMessage?: string;
-
- // Keyboard / Mousewheel
- keyboardControl?: boolean;
- mousewheelControl?: boolean;
- mousewheelForceToAxis?: boolean;
- mousewheelReleaseOnEdges?: boolean;
- mousewheelInvert?: boolean;
- mousewheelSensitivity?: number;
-
- // Hash Navigation
- hashnav?: boolean;
- hashnavWatchState?: boolean;
- history?: string;
+ // Progress
+ watchSlidesProgress?: boolean;
+ watchSlidesVisibility?: boolean;
// Images
preloadImages?: boolean;
updateOnImagesReady?: boolean;
- lazyLoading?: boolean;
- lazyLoadingInPrevNext?: boolean;
- lazyLoadingInPrevNextAmount?: number;
- lazyLoadingOnTransitionStart?: boolean;
-
// Loop
loop?: boolean;
loopAdditionalSlides?: number;
loopedSlides?: number;
+ loopFillGroupWithBlank?: boolean;
- zoom?: boolean;
-
- // Controller
- control?: Swiper;
- controlInverse?: boolean;
- controlBy?: string;
+ // Breakpoints
+ breakpoints?: {
+ // TODO: extract possible parameters for breakpoints to separate interface
+ [index: number]: any;
+ };
// Observer
observer?: boolean;
observeParents?: boolean;
- // Breakpoints
- breakpoints?: {};
-
- // Callbacks
- runCallbacksOnInit?: boolean;
- onInit?(swiper: Swiper): void;
- onSlideChangeStart?(swiper: Swiper): void;
- onSlideChangeEnd?(swiper: Swiper): void;
- onSlideNextStart?(swiper: Swiper): void;
- onSlideNextEnd?(swiper: Swiper): void;
- onSlidePrevStart?(swiper: Swiper): void;
- onSlidePrevEnd?(swiper: Swiper): void;
- onTransitionStart?(swiper: Swiper): void;
- onTransitionEnd?(swiper: Swiper): void;
- onTouchStart?(swiper: Swiper, event: Event): void;
- onTouchMove?(swiper: Swiper, event: Event): void;
- onTouchMoveOpposite?(swiper: Swiper, event: Event): void;
- onSliderMove?(swiper: Swiper, event: Event): void;
- onTouchEnd?(swiper: Swiper, event: Event): void;
- onClick?(swiper: Swiper, event: Event): void;
- onTap?(swiper: Swiper, event: Event): void;
- onDoubleTap?(swiper: Swiper, event: Event): void;
- onImagesReady?(swiper: Swiper): void;
- onProgress?(swiper: Swiper, progress: number): void;
- onReachBeginning?(swiper: Swiper): void;
- onReachEnd?(swiper: Swiper): void;
- onDestroy?(swiper: Swiper): void;
- onSetTranslate?(swiper: Swiper, translate: any): void;
- onSetTransition?(swiper: Swiper, transition: any): void;
- onAutoplay?(swiper: Swiper): void;
- onAutoplayStart?(swiper: Swiper): void;
- onAutoplayStop?(swiper: Swiper): void;
- onLazyImageLoad?(swiper: Swiper, slide: any, image: any): void;
- onLazyImageReady?(swiper: Swiper, slide: any, image: any): void;
- onPaginationRendered?(swiper: Swiper, paginationContainer: any): void;
-
// Namespace
+ containerModifierClass?: string;
slideClass?: string;
slideActiveClass?: string;
+ slideDuplicatedActiveClass?: string;
slideVisibleClass?: string;
slideDuplicateClass?: string;
slideNextClass?: string;
+ slideDuplicatedNextClass?: string;
slidePrevClass?: string;
+ slideDuplicatedPrevClass?: string;
wrapperClass?: string;
- bulletClass?: string;
- bulletActiveClass?: string;
- paginationHiddenClass?: string;
- paginationCurrentClass?: string;
- paginationTotalClass?: string;
- paginationProgressbarClass?: string;
- buttonDisabledClass?: string;
+
+ // Components
+ navigation?: NavigationOptions;
+ pagination?: PaginationOptions;
+ scrollbar?: ScrollbarOptions;
+ autoplay?: AutoplayOptions;
+ parallax?: boolean;
+ lazy?: LazyLoadingOptions | boolean;
+ fadeEffect?: FadeEffectOptions;
+ coverflowEffect?: CoverflowEffectOptions;
+ flipEffect?: FlipEffectOptions;
+ cubeEffect?: CubeEffectOptions;
+ zoom?: ZoomOptions | boolean;
+ keyboard?: KeyboardControlOptions | boolean;
+ mousewheel?: MouseWheelControlOptions | boolean;
+ virtual?: VirtualSlidesOptions;
+ hashNavigation?: HashNavigationOptions;
+ history?: HistoryNavigationOptions;
+ controller?: ControllerOptions;
+ a11y?: AccessibilityOptions;
}
-interface SwiperScrollbarOptions {
- container: string; // Default: '.swiper-scrollbar'
- draggable?: boolean; // Default: true
- hide?: boolean; // Default: true
- snapOnRelease?: boolean; // Default: false
+interface Navigation {
+ nextEl: HTMLElement;
+ prevEl: HTMLElement;
+ update: () => void;
+}
+interface Pagination {
+ el: HTMLElement;
+ // TODO: dom7 like array
+ bullets: any[];
+
+ render: () => void;
+ update: () => void;
}
-declare class SwiperSlide {
- append(): SwiperSlide;
- clone(): SwiperSlide;
- getWidth(): number;
- getHeight(): number;
- getOffset(): { top: number; left: number; };
- insertAfter(index: number): SwiperSlide;
- prepend(): SwiperSlide;
- remove(): void;
+interface Scrollbar {
+ eL: HTMLElement;
+ dragEl: HTMLElement;
+
+ updateSize: () => void;
+}
+
+interface Autoplay {
+ running: boolean;
+
+ start: () => void;
+ stop: () => void;
+}
+
+interface LazyLoading {
+ load: () => void;
+ loadInSlide: (index: number) => void;
+}
+
+interface Zoom {
+ enabled: boolean;
+ scale: number;
+
+ enable: () => void;
+ disable: () => void;
+ in: () => void;
+ out: () => void;
+ toggle: () => void;
+}
+
+// Keyboard and Mousewheel control
+interface Control {
+ enabled: boolean;
+
+ enable: () => void;
+ disable: () => void;
+}
+
+interface VirtualSlides {
+ cache: any;
+ from: number;
+ to: number;
+ slides: any[];
+
+ appendSlide: (slide: any) => void;
+ prependSlide: (slide: any) => void;
+ update: () => void;
+}
+
+interface Controller {
+ control: Swiper;
}
export declare class Swiper {
- constructor(container: string | Element, options?: SwiperOptions);
+ constructor(container: string | Element, parameters?: SwiperOptions);
// Properties
+ params: SwiperOptions;
+ // TODO: dom7 element
+ $el: any;
+ // TODO: dom7 element
+ $wrapperEl: any;
+ slides: HTMLElement[];
width: number;
height: number;
- params: any;
- positions: any;
-
- // Feature detection
- support: {
- touch: boolean;
- transforms: boolean;
- transforms3d: boolean;
- transitions: boolean;
- };
-
- // Browser detection
- browser: {
- ie8: boolean;
- ie10: boolean;
- };
-
- // Navigation
+ translate: number;
+ progress: number;
activeIndex: number;
- activeLoopIndex: number;
- activeLoaderIndex: number;
+ realIndex: number;
previousIndex: number;
- swipeNext(internal?: boolean): boolean;
- swipePrev(internal?: boolean): boolean;
- swipeReset(): boolean;
- swipeTo(index: number, speed?: number, runCallbacks?: boolean): boolean;
- activeSlide(): SwiperSlide;
- updateActiveSlide(index: number): void;
-
- // Events
- touches: any;
- isTouched: boolean;
- clickedSlideIndex: number;
- clickedSlide: SwiperSlide;
- wrapperTransitionEnd(callback: () => void, permanent: boolean): void;
-
- // Init/reset
- destroy(deleteInstance: boolean, cleanupStyles: boolean): void;
- reInit(forceCalcSlides?: boolean): void;
- resizeFix(reInit?: boolean): void;
-
- // Autoplaying
- autoplay: boolean;
- startAutoplay(): void;
- stopAutoplay(): void;
-
- // Other methods
- getWrapperTranslate(axis: string): number; // 'x' or 'y'
- setWrapperTranslate(x: number, y: number, z: number): void;
- setWrapperTransition(duration: any): void;
-
- // Slides API
-
- slides: SwiperSlide[];
-
- slidePrev(runCallbacks?: boolean, speed?: number): void;
- slideNext(runCallbacks?: boolean, speed?: number): void;
- slideTo(index: number, speed?: number, runCallbacks?: boolean): void;
- update(updateTranslate?: boolean): void;
- onResize(): void;
- detachEvents(): void;
- attachEvents(): void;
-
- appendSlide(slides: HTMLElement | string | string[]): void;
- prependSlide(slides: HTMLElement | string | string[]): void;
- removeSlide(slideIndex: number): void;
- removeAllSlides(): void;
-
- lockSwipeToNext(): void;
- unlockSwipeToNext(): void;
- lockSwipeToPrev(): void;
- unlockSwipeToPrev(): void;
- lockSwipes(): void;
- unlockSwipes(): void;
- disableMousewheelControl(): void;
- enableMousewheelControl(): void;
- disableKeyboardControl(): void;
- enableKeyboardControl(): void;
- disableTouchContro(): void;
- enableTouchContro(): void;
- unsetGrabCursor(): void;
- setGrabCursor(): void;
-
- plugins?: {
- debugger?(swiper: any, params: any): void;
+ isBeginning: boolean;
+ isEnd: boolean;
+ animating: boolean;
+ touches: {
+ startX: number;
+ startY: number;
+ currentX: number;
+ currentY: number;
+ diff: number;
};
+ clickedIndex: number;
+ clickedSlide: HTMLElement;
+ allowSlideNext: boolean;
+ allowSlidePrev: boolean;
+ allowTouchMove: boolean;
+
+ slideNext: (speed?: number, runCallbacks?: boolean) => void;
+ slidePrev: (speed?: number, runCallbacks?: boolean) => void;
+ slideTo: (index: number, speed?: number, runCallbacks?: boolean) => void;
+ slideToLoop: (index: number, speed?: number, runCallbacks?: boolean) => void;
+ slideReset: (speed?: number, runCallbacks?: boolean) => void;
+ slideToClosest: (speed?: number, runCallbacks?: boolean) => void;
+ updateAutoHeight: (speed?: number) => void;
+ update: () => void;
+ detachEvents: () => void;
+ attachEvents: () => void;
+ destroy: (deleteInstance?: boolean, cleanStyles?: boolean) => void;
+ appendSlide: (slides: Array<(HTMLElement | string)> | string | HTMLElement) => void;
+ prependSlide: (slides: Array<(HTMLElement | string)> | string | HTMLElement) => void;
+ removeSlide: (index: number) => void;
+ removeAllSlides: () => void;
+ setTranslate: (translate: number) => void;
+ getTranslate: () => void;
+ on: (event: SwiperEvent, handler: () => void) => void;
+ once: (event: SwiperEvent, handler: () => void) => void;
+ off: (event: SwiperEvent, handler?: () => void) => void;
+ unsetGrabCursor: () => void;
+ setGrabCursor: () => void;
+
+ // components
+ navigation: Navigation;
+ pagination: Pagination;
+ scrollbar: Scrollbar;
+ autoplay: Autoplay;
+ zoom: Zoom;
+ keyboard: Control;
+ mousewheel: Control;
+ virtual: VirtualSlides;
+ controller: Controller;
}
+
diff --git a/core/src/components/slides/vendor/swiper.js b/core/src/components/slides/vendor/swiper.js
index aa30cf675a..29c1babba5 100644
--- a/core/src/components/slides/vendor/swiper.js
+++ b/core/src/components/slides/vendor/swiper.js
@@ -1,5340 +1,9652 @@
/**
- * Swiper 3.4.2
+ * Swiper 4.2.6
* Most modern mobile touch slider and framework with hardware accelerated transitions
- *
* http://www.idangero.us/swiper/
- *
- * Copyright 2017, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
- *
- * Licensed under MIT
- *
- * Released on: March 10, 2017
+ *
+ * Copyright 2014-2018 Vladimir Kharlampidi
+ *
+ * Released under the MIT License
+ *
+ * Released on: May 1, 2018
*/
+
var Swiper;
+(function() {
+ 'use strict';
-(function () {
- 'use strict';
- var $;
-
- /*===========================
- Swiper
- ===========================*/
- Swiper = function (container, params) {
- if (!(this instanceof Swiper)) return new Swiper(container, params);
-
-
- var defaults = {
- direction: 'horizontal',
- touchEventsTarget: 'container',
- initialSlide: 0,
- speed: 300,
- // autoplay
- autoplay: false,
- autoplayDisableOnInteraction: true,
- autoplayStopOnLast: false,
- // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
- iOSEdgeSwipeDetection: false,
- iOSEdgeSwipeThreshold: 20,
- // Free mode
- freeMode: false,
- freeModeMomentum: true,
- freeModeMomentumRatio: 1,
- freeModeMomentumBounce: true,
- freeModeMomentumBounceRatio: 1,
- freeModeMomentumVelocityRatio: 1,
- freeModeSticky: false,
- freeModeMinimumVelocity: 0.02,
- // Autoheight
- autoHeight: false,
- // Set wrapper width
- setWrapperSize: false,
- // Virtual Translate
- virtualTranslate: false,
- // Effects
- effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
- coverflow: {
- rotate: 50,
- stretch: 0,
- depth: 100,
- modifier: 1,
- slideShadows : true
- },
- flip: {
- slideShadows : true,
- limitRotation: true
- },
- cube: {
- slideShadows: true,
- shadow: true,
- shadowOffset: 20,
- shadowScale: 0.94
- },
- fade: {
- crossFade: false
- },
- // Parallax
- parallax: false,
- // Zoom
- zoom: false,
- zoomMax: 3,
- zoomMin: 1,
- zoomToggle: true,
- // Scrollbar
- scrollbar: null,
- scrollbarHide: true,
- scrollbarDraggable: false,
- scrollbarSnapOnRelease: false,
- // Keyboard Mousewheel
- keyboardControl: false,
- mousewheelControl: false,
- mousewheelReleaseOnEdges: false,
- mousewheelInvert: false,
- mousewheelForceToAxis: false,
- mousewheelSensitivity: 1,
- mousewheelEventsTarged: 'container',
- // Hash Navigation
- hashnav: false,
- hashnavWatchState: false,
- // History
- history: false,
- // Commong Nav State
- replaceState: false,
- // Breakpoints
- breakpoints: undefined,
- // Slides grid
- spaceBetween: 0,
- slidesPerView: 1,
- slidesPerColumn: 1,
- slidesPerColumnFill: 'column',
- slidesPerGroup: 1,
- centeredSlides: false,
- slidesOffsetBefore: 0, // in px
- slidesOffsetAfter: 0, // in px
- // Round length
- roundLengths: false,
- // Touches
- touchRatio: 1,
- touchAngle: 45,
- simulateTouch: true,
- shortSwipes: true,
- longSwipes: true,
- longSwipesRatio: 0.5,
- longSwipesMs: 300,
- followFinger: true,
- onlyExternal: false,
- threshold: 0,
- touchMoveStopPropagation: true,
- touchReleaseOnEdges: false,
- // Unique Navigation Elements
- uniqueNavElements: true,
- // Pagination
- pagination: null,
- paginationElement: 'span',
- paginationClickable: false,
- paginationHide: false,
- paginationBulletRender: null,
- paginationProgressRender: null,
- paginationFractionRender: null,
- paginationCustomRender: null,
- paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'
- // Resistance
- resistance: true,
- resistanceRatio: 0.85,
- // Next/prev buttons
- nextButton: null,
- prevButton: null,
- // Progress
- watchSlidesProgress: false,
- watchSlidesVisibility: false,
- // Cursor
- grabCursor: false,
- // Clicks
- preventClicks: true,
- preventClicksPropagation: true,
- slideToClickedSlide: false,
- // Lazy Loading
- lazyLoading: false,
- lazyLoadingInPrevNext: false,
- lazyLoadingInPrevNextAmount: 1,
- lazyLoadingOnTransitionStart: false,
- // Images
- preloadImages: true,
- updateOnImagesReady: true,
- // loop
- loop: false,
- loopAdditionalSlides: 0,
- loopedSlides: null,
- // Control
- control: undefined,
- controlInverse: false,
- controlBy: 'slide', //or 'container'
- normalizeSlideIndex: true,
- // Swiping/no swiping
- allowSwipeToPrev: true,
- allowSwipeToNext: true,
- swipeHandler: null, //'.swipe-handler',
- noSwiping: true,
- noSwipingClass: 'swiper-no-swiping',
- // Passive Listeners
- passiveListeners: true,
- // NS
- containerModifierClass: 'swiper-container-', // NEW
- slideClass: 'swiper-slide',
- slideActiveClass: 'swiper-slide-active',
- slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
- slideVisibleClass: 'swiper-slide-visible',
- slideDuplicateClass: 'swiper-slide-duplicate',
- slideNextClass: 'swiper-slide-next',
- slideDuplicateNextClass: 'swiper-slide-duplicate-next',
- slidePrevClass: 'swiper-slide-prev',
- slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
- wrapperClass: 'swiper-wrapper',
- bulletClass: 'swiper-pagination-bullet',
- bulletActiveClass: 'swiper-pagination-bullet-active',
- buttonDisabledClass: 'swiper-button-disabled',
- paginationCurrentClass: 'swiper-pagination-current',
- paginationTotalClass: 'swiper-pagination-total',
- paginationHiddenClass: 'swiper-pagination-hidden',
- paginationProgressbarClass: 'swiper-pagination-progressbar',
- paginationClickableClass: 'swiper-pagination-clickable', // NEW
- paginationModifierClass: 'swiper-pagination-', // NEW
- lazyLoadingClass: 'swiper-lazy',
- lazyStatusLoadingClass: 'swiper-lazy-loading',
- lazyStatusLoadedClass: 'swiper-lazy-loaded',
- lazyPreloaderClass: 'swiper-lazy-preloader',
- notificationClass: 'swiper-notification',
- preloaderClass: 'preloader',
- zoomContainerClass: 'swiper-zoom-container',
-
- // Observer
- observer: false,
- observeParents: false,
- // Accessibility
- a11y: false,
- prevSlideMessage: 'Previous slide',
- nextSlideMessage: 'Next slide',
- firstSlideMessage: 'This is the first slide',
- lastSlideMessage: 'This is the last slide',
- paginationBulletMessage: 'Go to slide {{index}}',
- // Callbacks
- runCallbacksOnInit: true
- /*
- Callbacks:
- onInit: function (swiper)
- onDestroy: function (swiper)
- onBeforeResize: function (swiper)
- onAfterResize: function (swiper)
- onClick: function (swiper, e)
- onTap: function (swiper, e)
- onDoubleTap: function (swiper, e)
- onSliderMove: function (swiper, e)
- onSlideChangeStart: function (swiper)
- onSlideChangeEnd: function (swiper)
- onTransitionStart: function (swiper)
- onTransitionEnd: function (swiper)
- onImagesReady: function (swiper)
- onProgress: function (swiper, progress)
- onTouchStart: function (swiper, e)
- onTouchMove: function (swiper, e)
- onTouchMoveOpposite: function (swiper, e)
- onTouchEnd: function (swiper, e)
- onReachBeginning: function (swiper)
- onReachEnd: function (swiper)
- onSetTransition: function (swiper, duration)
- onSetTranslate: function (swiper, translate)
- onAutoplayStart: function (swiper)
- onAutoplayStop: function (swiper),
- onLazyImageLoad: function (swiper, slide, image)
- onLazyImageReady: function (swiper, slide, image)
- onKeyPress: function (swiper, keyCode)
- */
-
+ /**
+ * SSR Window 1.0.0
+ * Better handling for window object in SSR environment
+ * https://github.com/nolimits4web/ssr-window
+ *
+ * Copyright 2018, Vladimir Kharlampidi
+ *
+ * Licensed under MIT
+ *
+ * Released on: February 10, 2018
+ */
+ var d;
+ if (typeof document === 'undefined') {
+ d = {
+ 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() {}
};
- var initialVirtualTranslate = params && params.virtualTranslate;
-
- params = params || {};
- var originalParams = {};
- for (var param in params) {
- if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {
- originalParams[param] = {};
- for (var deepParam in params[param]) {
- originalParams[param][deepParam] = params[param][deepParam];
- }
- }
- else {
- originalParams[param] = params[param];
+ },
+ createElement: function createElement() {
+ return {
+ children: [],
+ childNodes: [],
+ style: {},
+ setAttribute: function setAttribute() {},
+ getElementsByTagName: function getElementsByTagName() {
+ return [];
+ }
+ };
+ },
+ location: { hash: '' }
+ };
+ } else {
+ // eslint-disable-next-line
+ d = document;
+ }
+
+ var doc = d;
+
+ var w;
+ if (typeof window === 'undefined') {
+ w = {
+ 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() {}
+ };
+ } else {
+ // eslint-disable-next-line
+ w = window;
+ }
+
+ var win = w;
+
+ /**
+ * Dom7 2.0.5
+ * 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: April 20, 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]);
}
+ }
}
- for (var def in defaults) {
- if (typeof params[def] === 'undefined') {
- params[def] = defaults[def];
- }
- else if (typeof params[def] === 'object') {
- for (var deepDef in defaults[def]) {
- if (typeof params[def][deepDef] === 'undefined') {
- params[def][deepDef] = defaults[def][deepDef];
- }
- }
- }
+ } 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]);
}
-
- // Swiper
- var s = this;
-
- // Params
- s.params = params;
- s.originalParams = originalParams;
-
- // Classname
- s.classNames = [];
- /*=========================
- Dom Library and plugins
- ===========================*/
- if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){
- $ = Dom7;
+ }
+ }
+ 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].classList !== 'undefined') {
+ this$1[j].classList.add(classes[i]);
}
- if (typeof $ === 'undefined') {
- if (typeof Dom7 === 'undefined') {
- $ = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- $ = Dom7;
- }
- if (!$) return;
+ }
+ }
+ 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].classList !== 'undefined') {
+ this$1[j].classList.remove(classes[i]);
}
- // Export it to Swiper instance
- s.$ = $;
-
- /*=========================
- Breakpoints
- ===========================*/
- s.currentBreakpoint = undefined;
- s.getActiveBreakpoint = function () {
- //Get breakpoint for window width
- if (!s.params.breakpoints) return false;
- var breakpoint = false;
- var points = [], point;
- for ( point in s.params.breakpoints ) {
- if (s.params.breakpoints.hasOwnProperty(point)) {
- points.push(point);
- }
+ }
+ }
+ 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].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;
+ }
+ 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
+ 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];
+ }
+ 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) {
+ 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) {
+ var styles = this.styles();
+ return (
+ this[0].offsetWidth +
+ parseFloat(styles.getPropertyValue('margin-right')) +
+ parseFloat(styles.getPropertyValue('margin-left'))
+ );
+ }
+ return this[0].offsetWidth;
+ }
+ return null;
+ }
+ function outerHeight(includeMargins) {
+ if (this.length > 0) {
+ if (includeMargins) {
+ var 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;
+ }
+ 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;
+ }
+ 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;
+ }
+ 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;
+ } else if (matrix.length === 16) {
+ // Crazy IE10 Matrix
+ curTransform = parseFloat(matrix[12]);
+ } else {
+ // Normal Browsers
+ curTransform = parseFloat(matrix[4]);
+ }
+ }
+ if (axis === 'y') {
+ // Latest Chrome and webkits Fix
+ if (win.WebKitCSSMatrix) {
+ curTransform = transformMatrix.m42;
+ } else if (matrix.length === 16) {
+ // Crazy IE10 Matrix
+ curTransform = parseFloat(matrix[13]);
+ } else {
+ // Normal Browsers
+ 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];
+ }
}
- points.sort(function (a, b) {
- return parseInt(a, 10) > parseInt(b, 10);
+ }
+ }
+ }
+ 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 {
+ 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 slides = $wrapperEl.children('.' + swiper.params.slideClass);
+ var isVirtual = swiper.virtual && params.virtual.enabled;
+ 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 previousSlidesLength = slidesLength;
+ 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;
+ if (currentTransform) {
+ slide[0].style.transform = 'none';
+ }
+ 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 (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 (index % params.slidesPerGroup === 0) {
+ snapGrid.push(slidePosition);
+ }
+ slidesGrid.push(slidePosition);
+ } else {
+ 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) {
+ if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) {
+ newSlidesGrid.push(snapGrid[i$1]);
+ }
+ }
+ 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) {
+ if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {
+ newSlidesGrid.push(snapGrid[i$2]);
+ }
+ }
+ 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' });
+ }
+ }
+
+ 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);
+
+ 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) {
+ slides.eq(i).addClass(params.slideVisibleClass);
+ }
+ }
+ slide.progress = rtl ? -slideProgress : slideProgress;
+ }
+ }
+
+ 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.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.preventIntercationOnTransition) {
+ 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.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);
+ }
+
+ 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
+ );
+ }
+
+ 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;
+ var currentSnap = snapGrid[snapGrid.indexOf(translate)];
+ var prevSnap = snapGrid[snapGrid.indexOf(translate) - 1];
+ var prevIndex;
+
+ if (prevSnap) {
+ prevIndex = slidesGrid.indexOf(prevSnap);
+ if (prevIndex < 0) {
+ prevIndex = swiper.activeIndex - 1;
+ }
+ }
+ return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
+ }
+
+ 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);
+ }
+
+ 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 - params.slidesPerView * 2
+ ) {
+ // 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 removeSlide(slidesIndexes) {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+
+ if (params.loop) {
+ swiper.loopDestroy();
+ swiper.slides = $wrapperEl.children('.' + params.slideClass);
+ }
+ var newActiveIndex = activeIndex;
+ 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,
+ 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.preventIntercationOnTransition) {
+ 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.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
+
+ if (
+ Device.ios &&
+ !Device.cordova &&
+ params.iOSEdgeSwipeDetection &&
+ startX <= params.iOSEdgeSwipeThreshold &&
+ startX >= win.screen.width - params.iOSEdgeSwipeThreshold
+ ) {
+ 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) {
+ 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 (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 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;
+ } else 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();
});
- for (var i = 0; i < points.length; i++) {
- point = points[i];
- if (point >= window.innerWidth && !breakpoint) {
- breakpoint = point;
- }
- }
- return breakpoint || 'max';
- };
- s.setBreakpoint = function () {
- //Set breakpoint for window width and update parameters
- var breakpoint = s.getActiveBreakpoint();
- if (breakpoint && s.currentBreakpoint !== breakpoint) {
- var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;
- var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);
- for ( var param in breakPointsParams ) {
- s.params[param] = breakPointsParams[param];
- }
- s.currentBreakpoint = breakpoint;
- if(needsReLoop && s.destroyLoop) {
- s.reLoop(true);
- }
- }
- };
- // Set breakpoint on load
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- /*=========================
- Preparation - Define Container, Wrapper and Pagination
- ===========================*/
- s.container = $(container);
- if (s.container.length === 0) return;
- if (s.container.length > 1) {
- var swipers = [];
- s.container.each(function () {
- var container = this;
- swipers.push(new Swiper(this, params));
+ });
+ } 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();
});
- return swipers;
+ }
+ } else {
+ swiper.updateProgress(newPosition);
}
-
- // Save instance in container HTML Element and in data
- s.container[0].swiper = s;
- s.container.data('swiper', s);
-
- s.classNames.push(s.params.containerModifierClass + s.params.direction);
-
- if (s.params.freeMode) {
- s.classNames.push(s.params.containerModifierClass + 'free-mode');
+
+ 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];
}
- if (!s.support.flexbox) {
- s.classNames.push(s.params.containerModifierClass + 'no-flexbox');
- s.params.slidesPerColumn = 1;
+ } 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 (s.params.autoHeight) {
- s.classNames.push(s.params.containerModifierClass + 'autoheight');
+ }
+ if (swiper.swipeDirection === 'prev') {
+ if (ratio > 1 - params.longSwipesRatio) {
+ swiper.slideTo(stopIndex + params.slidesPerGroup);
+ } else {
+ swiper.slideTo(stopIndex);
}
- // Enable slides progress when required
- if (s.params.parallax || s.params.watchSlidesVisibility) {
- s.params.watchSlidesProgress = true;
+ }
+ } 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
+ );
}
- // Max resistance when touchReleaseOnEdges
- if (s.params.touchReleaseOnEdges) {
- s.params.resistanceRatio = 0;
+ 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);
}
- // Coverflow / 3D
- if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {
- if (s.support.transforms3d) {
- s.params.watchSlidesProgress = true;
- s.classNames.push(s.params.containerModifierClass + '3d');
- }
- else {
- s.params.effect = 'slide';
- }
+ }
+ // Prevent Links Clicks
+ if (params.preventClicks || params.preventClicksPropagation) {
+ target.addEventListener('click', swiper.onClick, true);
+ }
+ }
+
+ // Resize handler
+ swiper.on('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 (s.params.effect !== 'slide') {
- s.classNames.push(s.params.containerModifierClass + s.params.effect);
+ 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);
}
- if (s.params.effect === 'cube') {
- s.params.resistanceRatio = 0;
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.centeredSlides = false;
- s.params.spaceBetween = 0;
- s.params.virtualTranslate = true;
+ }
+ // Prevent Links Clicks
+ if (params.preventClicks || params.preventClicksPropagation) {
+ target.removeEventListener('click', swiper.onClick, true);
+ }
+ }
+
+ // Resize handler
+ swiper.off('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) {
+ // 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 (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),
+ 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 &&
+ (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 (s.params.effect === 'fade' || s.params.effect === 'flip') {
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.watchSlidesProgress = true;
- s.params.spaceBetween = 0;
- if (typeof initialVirtualTranslate === 'undefined') {
- s.params.virtualTranslate = true;
- }
+ if (srcset) {
+ image.srcset = srcset;
}
-
- // Grab Cursor
- if (s.params.grabCursor && s.support.touch) {
- s.params.grabCursor = false;
+ if (src) {
+ image.src = src;
}
-
- // Wrapper
- s.wrapper = s.container.children('.' + s.params.wrapperClass);
-
- // Pagination
- if (s.params.pagination) {
- s.paginationContainer = $(s.params.pagination);
- if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {
- s.paginationContainer = s.container.find(s.params.pagination);
- }
-
- if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {
- s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');
- }
- else {
- s.params.paginationClickable = false;
- }
- s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);
+ } 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();
}
- // Next/Prev Buttons
- if (s.params.nextButton || s.params.prevButton) {
- if (s.params.nextButton) {
- s.nextButton = $(s.params.nextButton);
- if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {
- s.nextButton = s.container.find(s.params.nextButton);
- }
- }
- if (s.params.prevButton) {
- s.prevButton = $(s.params.prevButton);
- if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {
- s.prevButton = s.container.find(s.params.prevButton);
- }
- }
+ 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,
+ //
+ preventIntercationOnTransition: false,
+
+ // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
+ iOSEdgeSwipeDetection: false,
+ iOSEdgeSwipeThreshold: 20,
+
+ // Free mode
+ freeMode: false,
+ freeModeMomentum: true,
+ freeModeMomentumRatio: 1,
+ freeModeMomentumBounce: true,
+ freeModeMomentumBounceRatio: 1,
+ freeModeMomentumVelocityRatio: 1,
+ freeModeSticky: false,
+ freeModeMinimumVelocity: 0.02,
+
+ // Autoheight
+ autoHeight: false,
+
+ // Set wrapper width
+ setWrapperSize: false,
+
+ // Virtual Translate
+ virtualTranslate: false,
+
+ // Effects
+ effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
+
+ // Breakpoints
+ breakpoints: undefined,
+
+ // Slides grid
+ spaceBetween: 0,
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerColumnFill: 'column',
+ slidesPerGroup: 1,
+ centeredSlides: false,
+ slidesOffsetBefore: 0, // in px
+ slidesOffsetAfter: 0, // in px
+ normalizeSlideIndex: true,
+
+ // 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,
+ 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 = {};
+
+ 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') {
+ 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 };
+ }
}
-
- // Is Horizontal
- s.isHorizontal = function () {
- return s.params.direction === 'horizontal';
- };
- // s.isH = isH;
-
+ });
+
+ // 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
- s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');
- if (s.rtl) {
- s.classNames.push(s.params.containerModifierClass + 'rtl');
- }
-
- // Wrong RTL support
- if (s.rtl) {
- s.wrongRTL = s.wrapper.css('display') === '-webkit-box';
- }
-
- // Columns
- if (s.params.slidesPerColumn > 1) {
- s.classNames.push(s.params.containerModifierClass + 'multirow');
- }
-
- // Check for Android
- if (s.device.android) {
- s.classNames.push(s.params.containerModifierClass + 'android');
- }
-
- // Add classes
- s.container.addClass(s.classNames.join(' '));
-
- // Translate
- s.translate = 0;
-
- // Progress
- s.progress = 0;
-
- // Velocity
- s.velocity = 0;
-
- /*=========================
- Locks, unlocks
- ===========================*/
- s.lockSwipeToNext = function () {
- s.params.allowSwipeToNext = false;
- if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {
- s.unsetGrabCursor();
- }
- };
- s.lockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = false;
- if (s.params.allowSwipeToNext === false && s.params.grabCursor) {
- s.unsetGrabCursor();
- }
- };
- s.lockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;
- if (s.params.grabCursor) s.unsetGrabCursor();
- };
- s.unlockSwipeToNext = function () {
- s.params.allowSwipeToNext = true;
- if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {
- s.setGrabCursor();
- }
- };
- s.unlockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = true;
- if (s.params.allowSwipeToNext === true && s.params.grabCursor) {
- s.setGrabCursor();
- }
- };
- s.unlockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;
- if (s.params.grabCursor) s.setGrabCursor();
- };
-
- /*=========================
- Round helper
- ===========================*/
- function round(a) {
- return Math.floor(a);
- }
- /*=========================
- Set grab cursor
- ===========================*/
- s.setGrabCursor = function(moving) {
- s.container[0].style.cursor = 'move';
- s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
- s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
- s.container[0].style.cursor = moving ? 'grabbing': 'grab';
- };
- s.unsetGrabCursor = function () {
- s.container[0].style.cursor = '';
- };
- if (s.params.grabCursor) {
- s.setGrabCursor();
- }
- /*=========================
- Update on Images Ready
- ===========================*/
- s.imagesToLoad = [];
- s.imagesLoaded = 0;
-
- s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {
- var image;
- function onReady () {
- if (callback) callback();
- }
- if (!imgElement.complete || !checkForComplete) {
- if (src) {
- image = new window.Image();
- image.onload = onReady;
- image.onerror = onReady;
- if (sizes) {
- image.sizes = sizes;
- }
- if (srcset) {
- image.srcset = srcset;
- }
- if (src) {
- image.src = src;
- }
- } else {
- onReady();
- }
-
- } else {//image already loaded...
- onReady();
- }
- };
- s.preloadImages = function () {
- s.imagesToLoad = s.container.find('img');
- function _onReady() {
- if (typeof s === 'undefined' || s === null || !s) return;
- if (s.imagesLoaded !== undefined) s.imagesLoaded++;
- if (s.imagesLoaded === s.imagesToLoad.length) {
- if (s.params.updateOnImagesReady) s.update();
- s.emit('onImagesReady', s);
- }
- }
- for (var i = 0; i < s.imagesToLoad.length; i++) {
- s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);
- }
- };
-
- /*=========================
- Autoplay
- ===========================*/
- s.autoplayTimeoutId = undefined;
- s.autoplaying = false;
- s.autoplayPaused = false;
- function autoplay() {
- var autoplayDelay = s.params.autoplay;
- var activeSlide = s.slides.eq(s.activeIndex);
- if (activeSlide.attr('data-swiper-autoplay')) {
- autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;
- }
- s.autoplayTimeoutId = setTimeout(function () {
- if (s.params.loop) {
- s.fixLoop();
- s._slideNext();
- s.emit('onAutoplay', s);
- }
- else {
- if (!s.isEnd) {
- s._slideNext();
- s.emit('onAutoplay', s);
- }
- else {
- if (!params.autoplayStopOnLast) {
- s._slideTo(0);
- s.emit('onAutoplay', s);
- }
- else {
- s.stopAutoplay();
- }
- }
- }
- }, autoplayDelay);
- }
- s.startAutoplay = function () {
- if (typeof s.autoplayTimeoutId !== 'undefined') return false;
- if (!s.params.autoplay) return false;
- if (s.autoplaying) return false;
- s.autoplaying = true;
- s.emit('onAutoplayStart', s);
- autoplay();
- };
- s.stopAutoplay = function (internal) {
- if (!s.autoplayTimeoutId) return;
- if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);
- s.autoplaying = false;
- s.autoplayTimeoutId = undefined;
- s.emit('onAutoplayStop', s);
- };
- s.pauseAutoplay = function (speed) {
- if (s.autoplayPaused) return;
- if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);
- s.autoplayPaused = true;
- if (speed === 0) {
- s.autoplayPaused = false;
- autoplay();
- }
- else {
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.autoplayPaused = false;
- if (!s.autoplaying) {
- s.stopAutoplay();
- }
- else {
- autoplay();
- }
- });
- }
- };
- /*=========================
- Min/Max Translate
- ===========================*/
- s.minTranslate = function () {
- return (-s.snapGrid[0]);
- };
- s.maxTranslate = function () {
- return (-s.snapGrid[s.snapGrid.length - 1]);
- };
- /*=========================
- Slider/slides sizes
- ===========================*/
- s.updateAutoHeight = function () {
- var activeSlides = [];
- var newHeight = 0;
- var i;
-
- // Find slides currently in view
- if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {
- for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {
- var index = s.activeIndex + i;
- if(index > s.slides.length) break;
- activeSlides.push(s.slides.eq(index)[0]);
- }
- } else {
- activeSlides.push(s.slides.eq(s.activeIndex)[0]);
- }
-
- // Find new height from heighest slide in view
- for (i = 0; i < activeSlides.length; i++) {
- if (typeof activeSlides[i] !== 'undefined') {
- var height = activeSlides[i].offsetHeight;
- newHeight = height > newHeight ? height : newHeight;
- }
- }
-
- // Update Height
- if (newHeight) s.wrapper.css('height', newHeight + 'px');
- };
- s.updateContainerSize = function () {
- var width, height;
- if (typeof s.params.width !== 'undefined') {
- width = s.params.width;
- }
- else {
- width = s.container[0].clientWidth;
- }
- if (typeof s.params.height !== 'undefined') {
- height = s.params.height;
- }
- else {
- height = s.container[0].clientHeight;
- }
- if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {
- return;
- }
-
- //Subtract paddings
- width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);
- height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);
-
- // Store values
- s.width = width;
- s.height = height;
- s.size = s.isHorizontal() ? s.width : s.height;
- };
-
- s.updateSlidesSize = function () {
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- s.snapGrid = [];
- s.slidesGrid = [];
- s.slidesSizesGrid = [];
-
- var spaceBetween = s.params.spaceBetween,
- slidePosition = -s.params.slidesOffsetBefore,
- i,
- prevSlideSize = 0,
- index = 0;
- if (typeof s.size === 'undefined') return;
- if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
- spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;
- }
-
- s.virtualSize = -spaceBetween;
- // reset margins
- if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});
- else s.slides.css({marginRight: '', marginBottom: ''});
-
- var slidesNumberEvenToRows;
- if (s.params.slidesPerColumn > 1) {
- if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {
- slidesNumberEvenToRows = s.slides.length;
- }
- else {
- slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;
- }
- if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {
- slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);
- }
- }
-
- // Calc slides
- var slideSize;
- var slidesPerColumn = s.params.slidesPerColumn;
- var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
- var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);
- for (i = 0; i < s.slides.length; i++) {
- slideSize = 0;
- var slide = s.slides.eq(i);
- if (s.params.slidesPerColumn > 1) {
- // Set slides order
- var newSlideOrderIndex;
- var column, row;
- if (s.params.slidesPerColumnFill === 'column') {
- column = Math.floor(i / slidesPerColumn);
- row = i - column * slidesPerColumn;
- if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {
- if (++row >= slidesPerColumn) {
- row = 0;
- column++;
- }
- }
- newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
- slide
- .css({
- '-webkit-box-ordinal-group': newSlideOrderIndex,
- '-moz-box-ordinal-group': newSlideOrderIndex,
- '-ms-flex-order': newSlideOrderIndex,
- '-webkit-order': newSlideOrderIndex,
- 'order': newSlideOrderIndex
- });
- }
- else {
- row = Math.floor(i / slidesPerRow);
- column = i - row * slidesPerRow;
- }
- slide
- .css(
- 'margin-' + (s.isHorizontal() ? 'top' : 'left'),
- (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')
- )
- .attr('data-swiper-column', column)
- .attr('data-swiper-row', row);
-
- }
- if (slide.css('display') === 'none') continue;
- if (s.params.slidesPerView === 'auto') {
- slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);
- if (s.params.roundLengths) slideSize = round(slideSize);
- }
- else {
- slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;
- if (s.params.roundLengths) slideSize = round(slideSize);
-
- if (s.isHorizontal()) {
- s.slides[i].style.width = slideSize + 'px';
- }
- else {
- s.slides[i].style.height = slideSize + 'px';
- }
- }
- s.slides[i].swiperSlideSize = slideSize;
- s.slidesSizesGrid.push(slideSize);
-
-
- if (s.params.centeredSlides) {
- slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
- if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;
- if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;
- if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
- if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);
- s.slidesGrid.push(slidePosition);
- }
- else {
- if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);
- s.slidesGrid.push(slidePosition);
- slidePosition = slidePosition + slideSize + spaceBetween;
- }
-
- s.virtualSize += slideSize + spaceBetween;
-
- prevSlideSize = slideSize;
-
- index ++;
- }
- s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;
- var newSlidesGrid;
-
- if (
- s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {
- s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});
- }
- if (!s.support.flexbox || s.params.setWrapperSize) {
- if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});
- else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});
- }
-
- if (s.params.slidesPerColumn > 1) {
- s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;
- s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;
- if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});
- else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});
- if (s.params.centeredSlides) {
- newSlidesGrid = [];
- for (i = 0; i < s.snapGrid.length; i++) {
- if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);
- }
- s.snapGrid = newSlidesGrid;
- }
- }
-
- // Remove last grid elements depending on width
- if (!s.params.centeredSlides) {
- newSlidesGrid = [];
- for (i = 0; i < s.snapGrid.length; i++) {
- if (s.snapGrid[i] <= s.virtualSize - s.size) {
- newSlidesGrid.push(s.snapGrid[i]);
- }
- }
- s.snapGrid = newSlidesGrid;
- if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {
- s.snapGrid.push(s.virtualSize - s.size);
- }
- }
- if (s.snapGrid.length === 0) s.snapGrid = [0];
-
- if (s.params.spaceBetween !== 0) {
- if (s.isHorizontal()) {
- if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});
- else s.slides.css({marginRight: spaceBetween + 'px'});
- }
- else s.slides.css({marginBottom: spaceBetween + 'px'});
- }
- if (s.params.watchSlidesProgress) {
- s.updateSlidesOffset();
- }
- };
- s.updateSlidesOffset = function () {
- for (var i = 0; i < s.slides.length; i++) {
- s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;
- }
- };
-
- /*=========================
- Dynamic Slides Per View
- ===========================*/
- s.currentSlidesPerView = function () {
- var spv = 1, i, j;
- if (s.params.centeredSlides) {
- var size = s.slides[s.activeIndex].swiperSlideSize;
- var breakLoop;
- for (i = s.activeIndex + 1; i < s.slides.length; i++) {
- if (s.slides[i] && !breakLoop) {
- size += s.slides[i].swiperSlideSize;
- spv ++;
- if (size > s.size) breakLoop = true;
- }
- }
- for (j = s.activeIndex - 1; j >= 0; j--) {
- if (s.slides[j] && !breakLoop) {
- size += s.slides[j].swiperSlideSize;
- spv ++;
- if (size > s.size) breakLoop = true;
- }
- }
- }
- else {
- for (i = s.activeIndex + 1; i < s.slides.length; i++) {
- if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {
- spv++;
- }
- }
- }
- return spv;
- };
- /*=========================
- Slider/slides progress
- ===========================*/
- s.updateSlidesProgress = function (translate) {
- if (typeof translate === 'undefined') {
- translate = s.translate || 0;
- }
- if (s.slides.length === 0) return;
- if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();
-
- var offsetCenter = -translate;
- if (s.rtl) offsetCenter = translate;
-
- // Visible Slides
- s.slides.removeClass(s.params.slideVisibleClass);
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides[i];
- var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);
- if (s.params.watchSlidesVisibility) {
- var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
- var slideAfter = slideBefore + s.slidesSizesGrid[i];
- var isVisible =
- (slideBefore >= 0 && slideBefore < s.size) ||
- (slideAfter > 0 && slideAfter <= s.size) ||
- (slideBefore <= 0 && slideAfter >= s.size);
- if (isVisible) {
- s.slides.eq(i).addClass(s.params.slideVisibleClass);
- }
- }
- slide.progress = s.rtl ? -slideProgress : slideProgress;
- }
- };
- s.updateProgress = function (translate) {
- if (typeof translate === 'undefined') {
- translate = s.translate || 0;
- }
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- var wasBeginning = s.isBeginning;
- var wasEnd = s.isEnd;
- if (translatesDiff === 0) {
- s.progress = 0;
- s.isBeginning = s.isEnd = true;
- }
- else {
- s.progress = (translate - s.minTranslate()) / (translatesDiff);
- s.isBeginning = s.progress <= 0;
- s.isEnd = s.progress >= 1;
- }
- if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);
- if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);
-
- if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);
- s.emit('onProgress', s, s.progress);
- };
- s.updateActiveIndex = function () {
- var translate = s.rtl ? s.translate : -s.translate;
- var newActiveIndex, i, snapIndex;
- for (i = 0; i < s.slidesGrid.length; i ++) {
- if (typeof s.slidesGrid[i + 1] !== 'undefined') {
- if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {
- newActiveIndex = i;
- }
- else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {
- newActiveIndex = i + 1;
- }
- }
- else {
- if (translate >= s.slidesGrid[i]) {
- newActiveIndex = i;
- }
- }
- }
- // Normalize slideIndex
- if(s.params.normalizeSlideIndex){
- if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;
- }
- // for (i = 0; i < s.slidesGrid.length; i++) {
- // if (- translate >= s.slidesGrid[i]) {
- // newActiveIndex = i;
- // }
- // }
- snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);
- if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;
-
- if (newActiveIndex === s.activeIndex) {
- return;
- }
- s.snapIndex = snapIndex;
- s.previousIndex = s.activeIndex;
- s.activeIndex = newActiveIndex;
- s.updateClasses();
- s.updateRealIndex();
- };
- s.updateRealIndex = function(){
- s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);
- };
-
- /*=========================
- Classes
- ===========================*/
- s.updateClasses = function () {
- s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);
- var activeSlide = s.slides.eq(s.activeIndex);
- // Active classes
- activeSlide.addClass(s.params.slideActiveClass);
- if (params.loop) {
- // Duplicate to all looped slides
- if (activeSlide.hasClass(s.params.slideDuplicateClass)) {
- s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass);
- }
- else {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass);
- }
- }
- // Next Slide
- var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
- if (s.params.loop && nextSlide.length === 0) {
- nextSlide = s.slides.eq(0);
- nextSlide.addClass(s.params.slideNextClass);
- }
- // Prev Slide
- var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);
- if (s.params.loop && prevSlide.length === 0) {
- prevSlide = s.slides.eq(-1);
- prevSlide.addClass(s.params.slidePrevClass);
- }
- if (params.loop) {
- // Duplicate to all looped slides
- if (nextSlide.hasClass(s.params.slideDuplicateClass)) {
- s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass);
- }
- else {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass);
- }
- if (prevSlide.hasClass(s.params.slideDuplicateClass)) {
- s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass);
- }
- else {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass);
- }
- }
-
- // Pagination
- if (s.paginationContainer && s.paginationContainer.length > 0) {
- // Current/Total
- var current,
- total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;
- if (s.params.loop) {
- current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);
- if (current > s.slides.length - 1 - s.loopedSlides * 2) {
- current = current - (s.slides.length - s.loopedSlides * 2);
- }
- if (current > total - 1) current = current - total;
- if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;
- }
- else {
- if (typeof s.snapIndex !== 'undefined') {
- current = s.snapIndex;
- }
- else {
- current = s.activeIndex || 0;
- }
- }
- // Types
- if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {
- s.bullets.removeClass(s.params.bulletActiveClass);
- if (s.paginationContainer.length > 1) {
- s.bullets.each(function () {
- if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);
- });
- }
- else {
- s.bullets.eq(current).addClass(s.params.bulletActiveClass);
- }
- }
- if (s.params.paginationType === 'fraction') {
- s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);
- s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);
- }
- if (s.params.paginationType === 'progress') {
- var scale = (current + 1) / total,
- scaleX = scale,
- scaleY = 1;
- if (!s.isHorizontal()) {
- scaleY = scale;
- scaleX = 1;
- }
- s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);
- }
- if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {
- s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));
- s.emit('onPaginationRendered', s, s.paginationContainer[0]);
- }
- }
-
- // Next/active buttons
- if (!s.params.loop) {
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- if (s.isBeginning) {
- s.prevButton.addClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);
- }
- else {
- s.prevButton.removeClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);
- }
- }
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- if (s.isEnd) {
- s.nextButton.addClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);
- }
- else {
- s.nextButton.removeClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);
- }
- }
- }
- };
-
- /*=========================
- Pagination
- ===========================*/
- s.updatePagination = function () {
- if (!s.params.pagination) return;
- if (s.paginationContainer && s.paginationContainer.length > 0) {
- var paginationHTML = '';
- if (s.params.paginationType === 'bullets') {
- var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;
- for (var i = 0; i < numberOfBullets; i++) {
- if (s.params.paginationBulletRender) {
- paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);
- }
- else {
- paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">' + s.params.paginationElement + '>';
- }
- }
- s.paginationContainer.html(paginationHTML);
- s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);
- if (s.params.paginationClickable && s.params.a11y && s.a11y) {
- s.a11y.initPagination();
- }
- }
- if (s.params.paginationType === 'fraction') {
- if (s.params.paginationFractionRender) {
- paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);
- }
- else {
- paginationHTML =
- '' +
- ' / ' +
- '';
- }
- s.paginationContainer.html(paginationHTML);
- }
- if (s.params.paginationType === 'progress') {
- if (s.params.paginationProgressRender) {
- paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);
- }
- else {
- paginationHTML = '';
- }
- s.paginationContainer.html(paginationHTML);
- }
- if (s.params.paginationType !== 'custom') {
- s.emit('onPaginationRendered', s, s.paginationContainer[0]);
- }
- }
- };
- /*=========================
- Common update method
- ===========================*/
- s.update = function (updateTranslate) {
- if (!s) return;
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updateProgress();
- s.updatePagination();
- s.updateClasses();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- var newTranslate;
- function forceSetTranslate() {
- var translate = s.rtl ? -s.translate : s.translate;
- newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
- }
- if (updateTranslate) {
- var translated;
- if (s.controller && s.controller.spline) {
- s.controller.spline = undefined;
- }
- if (s.params.freeMode) {
- forceSetTranslate();
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- }
- else {
- if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {
- translated = s.slideTo(s.slides.length - 1, 0, false, true);
- }
- else {
- translated = s.slideTo(s.activeIndex, 0, false, true);
- }
- if (!translated) {
- forceSetTranslate();
- }
- }
- }
- else if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- };
-
- /*=========================
- Resize Handler
- ===========================*/
- s.onResize = function (forceUpdatePagination) {
- if (s.params.onBeforeResize) s.params.onBeforeResize(s);
- //Breakpoints
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- // Disable locks on resize
- var allowSwipeToPrev = s.params.allowSwipeToPrev;
- var allowSwipeToNext = s.params.allowSwipeToNext;
- s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;
-
- s.updateContainerSize();
- s.updateSlidesSize();
- if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- if (s.controller && s.controller.spline) {
- s.controller.spline = undefined;
- }
- var slideChangedBySlideTo = false;
- if (s.params.freeMode) {
- var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
-
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- }
- else {
- s.updateClasses();
- if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {
- slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);
- }
- else {
- slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);
- }
- }
- if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {
- s.lazy.load();
- }
- // Return locks after resize
- s.params.allowSwipeToPrev = allowSwipeToPrev;
- s.params.allowSwipeToNext = allowSwipeToNext;
- if (s.params.onAfterResize) s.params.onAfterResize(s);
- };
-
- /*=========================
- Events
- ===========================*/
-
- //Define Touch Events
- s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};
- if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};
- else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};
- s.touchEvents = {
- start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,
- move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,
- end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end
- };
-
-
- // WP8 Touch Events Fix
- if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {
- (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);
- }
-
- // Attach/detach events
- s.initEvents = function (detach) {
- var actionDom = detach ? 'off' : 'on';
- var action = detach ? 'removeEventListener' : 'addEventListener';
- var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];
- var target = s.support.touch ? touchEventsTarget : document;
-
- var moveCapture = s.params.nested ? true : false;
-
- //Touch Events
- if (s.browser.ie) {
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);
- target[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- target[action](s.touchEvents.end, s.onTouchEnd, false);
- }
- else {
- if (s.support.touch) {
- var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);
- touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);
- }
- if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {
- touchEventsTarget[action]('mousedown', s.onTouchStart, false);
- document[action]('mousemove', s.onTouchMove, moveCapture);
- document[action]('mouseup', s.onTouchEnd, false);
- }
- }
- window[action]('resize', s.onResize);
-
- // Next, Prev, Index
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.nextButton[actionDom]('click', s.onClickNext);
- if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.prevButton[actionDom]('click', s.onClickPrev);
- if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.pagination && s.params.paginationClickable) {
- s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);
- if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);
- }
-
- // Prevent Links Clicks
- if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);
- };
- s.attachEvents = function () {
- s.initEvents();
- };
- s.detachEvents = function () {
- s.initEvents(true);
- };
-
- /*=========================
- Handle Clicks
- ===========================*/
- // Prevent Clicks
- s.allowClick = true;
- s.preventClicks = function (e) {
- if (!s.allowClick) {
- if (s.params.preventClicks) e.preventDefault();
- if (s.params.preventClicksPropagation && s.animating) {
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- }
- };
+ 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,
+ 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
- s.onClickNext = function (e) {
- e.preventDefault();
- if (s.isEnd && !s.params.loop) return;
- s.slideNext();
- };
- s.onClickPrev = function (e) {
- e.preventDefault();
- if (s.isBeginning && !s.params.loop) return;
- s.slidePrev();
- };
- s.onClickIndex = function (e) {
- e.preventDefault();
- var index = $(this).index() * s.params.slidesPerGroup;
- if (s.params.loop) index = index + s.loopedSlides;
- s.slideTo(index);
- };
-
- /*=========================
- Handle Touches
- ===========================*/
- function findElementInEvent(e, selector) {
- var el = $(e.target);
- if (!el.is(selector)) {
- if (typeof selector === 'string') {
- el = el.parents(selector);
- }
- else if (selector.nodeType) {
- var found;
- el.parents().each(function (index, _el) {
- if (_el === selector) found = selector;
- });
- if (!found) return undefined;
- else return selector;
- }
- }
- if (el.length === 0) {
- return undefined;
- }
- return el[0];
- }
- s.updateClickedSlide = function (e) {
- var slide = findElementInEvent(e, '.' + s.params.slideClass);
- var slideFound = false;
- if (slide) {
- for (var i = 0; i < s.slides.length; i++) {
- if (s.slides[i] === slide) slideFound = true;
- }
- }
-
- if (slide && slideFound) {
- s.clickedSlide = slide;
- s.clickedIndex = $(slide).index();
- }
- else {
- s.clickedSlide = undefined;
- s.clickedIndex = undefined;
- return;
- }
- if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {
- var slideToIndex = s.clickedIndex,
- realIndex,
- duplicatedSlides,
- slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;
- if (s.params.loop) {
- if (s.animating) return;
- realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);
- if (s.params.centeredSlides) {
- if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- else {
- if (slideToIndex > s.slides.length - slidesPerView) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- };
-
- var isTouched,
- isMoved,
- allowTouchCallbacks,
- touchStartTime,
- isScrolling,
- currentTranslate,
- startTranslate,
- allowThresholdMove,
- // Form elements to match
- formElements = 'input, select, textarea, button, video',
- // Last click time
- lastClickTime = Date.now(), clickTimeout,
- //Velocities
- velocities = [],
- allowMomentumBounce;
-
- // Animating Flag
- s.animating = false;
-
- // Touches information
- s.touches = {
- startX: 0,
- startY: 0,
- currentX: 0,
- currentY: 0,
- diff: 0
- };
-
- // Touch handlers
- var isTouchEvent, startMoving;
- s.onTouchStart = function (e) {
- if (e.originalEvent) e = e.originalEvent;
- isTouchEvent = e.type === 'touchstart';
- if (!isTouchEvent && 'which' in e && e.which === 3) return;
- if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {
- s.allowClick = true;
- return;
- }
- if (s.params.swipeHandler) {
- if (!findElementInEvent(e, s.params.swipeHandler)) return;
- }
-
- var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
- var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
-
- // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
- if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {
- return;
- }
-
- isTouched = true;
- isMoved = false;
- allowTouchCallbacks = true;
- isScrolling = undefined;
- startMoving = undefined;
- s.touches.startX = startX;
- s.touches.startY = startY;
- touchStartTime = Date.now();
- s.allowClick = true;
- s.updateContainerSize();
- s.swipeDirection = undefined;
- if (s.params.threshold > 0) allowThresholdMove = false;
- if (e.type !== 'touchstart') {
- var preventDefault = true;
- if ($(e.target).is(formElements)) preventDefault = false;
- if (document.activeElement && $(document.activeElement).is(formElements)) {
- document.activeElement.blur();
- }
- if (preventDefault) {
- e.preventDefault();
- }
- }
- s.emit('onTouchStart', s, e);
- };
-
- s.onTouchMove = function (e) {
- if (e.originalEvent) e = e.originalEvent;
- if (isTouchEvent && e.type === 'mousemove') return;
- if (e.preventedByNestedSwiper) {
- s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
- return;
- }
- if (s.params.onlyExternal) {
- // isMoved = true;
- s.allowClick = false;
- if (isTouched) {
- s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
- touchStartTime = Date.now();
- }
- return;
- }
- if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {
- if (!s.isHorizontal()) {
- // Vertical
- if (
- (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||
- (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())
- ) {
- return;
- }
- }
- else {
- if (
- (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||
- (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())
- ) {
- return;
- }
- }
- }
- if (isTouchEvent && document.activeElement) {
- if (e.target === document.activeElement && $(e.target).is(formElements)) {
- isMoved = true;
- s.allowClick = false;
- return;
- }
- }
- if (allowTouchCallbacks) {
- s.emit('onTouchMove', s, e);
- }
- if (e.targetTouches && e.targetTouches.length > 1) return;
-
- s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
-
- if (typeof isScrolling === 'undefined') {
- var touchAngle;
- if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {
- isScrolling = false;
- }
- else {
- touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;
- isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);
- }
- }
- if (isScrolling) {
- s.emit('onTouchMoveOpposite', s, e);
- }
- if (typeof startMoving === 'undefined') {
- if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {
- startMoving = true;
- }
- }
- if (!isTouched) return;
- if (isScrolling) {
- isTouched = false;
- return;
- }
- if (!startMoving) {
- return;
- }
- s.allowClick = false;
- s.emit('onSliderMove', s, e);
- e.preventDefault();
- if (s.params.touchMoveStopPropagation && !s.params.nested) {
- e.stopPropagation();
- }
-
- if (!isMoved) {
- if (params.loop) {
- s.fixLoop();
- }
- startTranslate = s.getWrapperTranslate();
- s.setWrapperTransition(0);
- if (s.animating) {
- s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');
- }
- if (s.params.autoplay && s.autoplaying) {
- if (s.params.autoplayDisableOnInteraction) {
- s.stopAutoplay();
- }
- else {
- s.pauseAutoplay();
- }
- }
- allowMomentumBounce = false;
- //Grab Cursor
- if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {
- s.setGrabCursor(true);
- }
- }
- isMoved = true;
-
- var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;
-
- diff = diff * s.params.touchRatio;
- if (s.rtl) diff = -diff;
-
- s.swipeDirection = diff > 0 ? 'prev' : 'next';
- currentTranslate = diff + startTranslate;
-
- var disableParentSwiper = true;
- if ((diff > 0 && currentTranslate > s.minTranslate())) {
- disableParentSwiper = false;
- if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);
- }
- else if (diff < 0 && currentTranslate < s.maxTranslate()) {
- disableParentSwiper = false;
- if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);
- }
-
- if (disableParentSwiper) {
- e.preventedByNestedSwiper = true;
- }
-
- // Directions locks
- if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {
- currentTranslate = startTranslate;
- }
- if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {
- currentTranslate = startTranslate;
- }
-
-
- // Threshold
- if (s.params.threshold > 0) {
- if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {
- if (!allowThresholdMove) {
- allowThresholdMove = true;
- s.touches.startX = s.touches.currentX;
- s.touches.startY = s.touches.currentY;
- currentTranslate = startTranslate;
- s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;
- return;
- }
- }
- else {
- currentTranslate = startTranslate;
- return;
- }
- }
-
- if (!s.params.followFinger) return;
-
- // Update active index in free mode
- if (s.params.freeMode || s.params.watchSlidesProgress) {
- s.updateActiveIndex();
- }
- if (s.params.freeMode) {
- //Velocity
- if (velocities.length === 0) {
- velocities.push({
- position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],
- time: touchStartTime
- });
- }
- velocities.push({
- position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],
- time: (new window.Date()).getTime()
- });
- }
- // Update progress
- s.updateProgress(currentTranslate);
- // Update translate
- s.setWrapperTranslate(currentTranslate);
- };
- s.onTouchEnd = function (e) {
- if (e.originalEvent) e = e.originalEvent;
- if (allowTouchCallbacks) {
- s.emit('onTouchEnd', s, e);
- }
- allowTouchCallbacks = false;
- if (!isTouched) return;
- //Return Grab Cursor
- if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {
- s.setGrabCursor(false);
- }
-
- // Time diff
- var touchEndTime = Date.now();
- var timeDiff = touchEndTime - touchStartTime;
-
- // Tap, doubleTap, Click
- if (s.allowClick) {
- s.updateClickedSlide(e);
- s.emit('onTap', s, e);
- if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {
- if (clickTimeout) clearTimeout(clickTimeout);
- clickTimeout = setTimeout(function () {
- if (!s) return;
- if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {
- s.paginationContainer.toggleClass(s.params.paginationHiddenClass);
- }
- s.emit('onClick', s, e);
- }, 300);
-
- }
- if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {
- if (clickTimeout) clearTimeout(clickTimeout);
- s.emit('onDoubleTap', s, e);
- }
- }
-
- lastClickTime = Date.now();
- setTimeout(function () {
- if (s) s.allowClick = true;
- }, 0);
-
- if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {
- isTouched = isMoved = false;
- return;
- }
- isTouched = isMoved = false;
-
- var currentPos;
- if (s.params.followFinger) {
- currentPos = s.rtl ? s.translate : -s.translate;
- }
- else {
- currentPos = -currentTranslate;
- }
- if (s.params.freeMode) {
- if (currentPos < -s.minTranslate()) {
- s.slideTo(s.activeIndex);
- return;
- }
- else if (currentPos > -s.maxTranslate()) {
- if (s.slides.length < s.snapGrid.length) {
- s.slideTo(s.snapGrid.length - 1);
- }
- else {
- s.slideTo(s.slides.length - 1);
- }
- return;
- }
-
- if (s.params.freeModeMomentum) {
- if (velocities.length > 1) {
- var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();
-
- var distance = lastMoveEvent.position - velocityEvent.position;
- var time = lastMoveEvent.time - velocityEvent.time;
- s.velocity = distance / time;
- s.velocity = s.velocity / 2;
- if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {
- s.velocity = 0;
- }
- // this implies that the user stopped moving a finger then released.
- // There would be no events with distance zero, so the last event is stale.
- if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {
- s.velocity = 0;
- }
- } else {
- s.velocity = 0;
- }
- s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;
-
- velocities.length = 0;
- var momentumDuration = 1000 * s.params.freeModeMomentumRatio;
- var momentumDistance = s.velocity * momentumDuration;
-
- var newPosition = s.translate + momentumDistance;
- if (s.rtl) newPosition = - newPosition;
- var doBounce = false;
- var afterBouncePosition;
- var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;
- if (newPosition < s.maxTranslate()) {
- if (s.params.freeModeMomentumBounce) {
- if (newPosition + s.maxTranslate() < -bounceAmount) {
- newPosition = s.maxTranslate() - bounceAmount;
- }
- afterBouncePosition = s.maxTranslate();
- doBounce = true;
- allowMomentumBounce = true;
- }
- else {
- newPosition = s.maxTranslate();
- }
- }
- else if (newPosition > s.minTranslate()) {
- if (s.params.freeModeMomentumBounce) {
- if (newPosition - s.minTranslate() > bounceAmount) {
- newPosition = s.minTranslate() + bounceAmount;
- }
- afterBouncePosition = s.minTranslate();
- doBounce = true;
- allowMomentumBounce = true;
- }
- else {
- newPosition = s.minTranslate();
- }
- }
- else if (s.params.freeModeSticky) {
- var j = 0,
- nextSlide;
- for (j = 0; j < s.snapGrid.length; j += 1) {
- if (s.snapGrid[j] > -newPosition) {
- nextSlide = j;
- break;
- }
-
- }
- if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {
- newPosition = s.snapGrid[nextSlide];
- } else {
- newPosition = s.snapGrid[nextSlide - 1];
- }
- if (!s.rtl) newPosition = - newPosition;
- }
- //Fix duration
- if (s.velocity !== 0) {
- if (s.rtl) {
- momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);
- }
- else {
- momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);
- }
- }
- else if (s.params.freeModeSticky) {
- s.slideReset();
- return;
- }
-
- if (s.params.freeModeMomentumBounce && doBounce) {
- s.updateProgress(afterBouncePosition);
- s.setWrapperTransition(momentumDuration);
- s.setWrapperTranslate(newPosition);
- s.onTransitionStart();
- s.animating = true;
- s.wrapper.transitionEnd(function () {
- if (!s || !allowMomentumBounce) return;
- s.emit('onMomentumBounce', s);
-
- s.setWrapperTransition(s.params.speed);
- s.setWrapperTranslate(afterBouncePosition);
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.onTransitionEnd();
- });
- });
- } else if (s.velocity) {
- s.updateProgress(newPosition);
- s.setWrapperTransition(momentumDuration);
- s.setWrapperTranslate(newPosition);
- s.onTransitionStart();
- if (!s.animating) {
- s.animating = true;
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.onTransitionEnd();
- });
- }
-
- } else {
- s.updateProgress(newPosition);
- }
-
- s.updateActiveIndex();
- }
- if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {
- s.updateProgress();
- s.updateActiveIndex();
- }
- return;
- }
-
- // Find current slide
- var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];
- for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {
- if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {
- if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {
- stopIndex = i;
- groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];
- }
- }
- else {
- if (currentPos >= s.slidesGrid[i]) {
- stopIndex = i;
- groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];
- }
- }
- }
-
- // Find current slide size
- var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;
-
- if (timeDiff > s.params.longSwipesMs) {
- // Long touches
- if (!s.params.longSwipes) {
- s.slideTo(s.activeIndex);
- return;
- }
- if (s.swipeDirection === 'next') {
- if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);
- else s.slideTo(stopIndex);
-
- }
- if (s.swipeDirection === 'prev') {
- if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);
- else s.slideTo(stopIndex);
- }
- }
- else {
- // Short swipes
- if (!s.params.shortSwipes) {
- s.slideTo(s.activeIndex);
- return;
- }
- if (s.swipeDirection === 'next') {
- s.slideTo(stopIndex + s.params.slidesPerGroup);
-
- }
- if (s.swipeDirection === 'prev') {
- s.slideTo(stopIndex);
- }
- }
- };
- /*=========================
- Transitions
- ===========================*/
- s._slideTo = function (slideIndex, speed) {
- return s.slideTo(slideIndex, speed, true, true);
- };
- s.slideTo = function (slideIndex, speed, runCallbacks, internal) {
- if (typeof runCallbacks === 'undefined') runCallbacks = true;
- if (typeof slideIndex === 'undefined') slideIndex = 0;
- if (slideIndex < 0) slideIndex = 0;
- s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);
- if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;
-
- var translate = - s.snapGrid[s.snapIndex];
- // Stop autoplay
- if (s.params.autoplay && s.autoplaying) {
- if (internal || !s.params.autoplayDisableOnInteraction) {
- s.pauseAutoplay(speed);
- }
- else {
- s.stopAutoplay();
- }
- }
- // Update progress
- s.updateProgress(translate);
-
- // Normalize slideIndex
- if(s.params.normalizeSlideIndex){
- for (var i = 0; i < s.slidesGrid.length; i++) {
- if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {
- slideIndex = i;
- }
- }
- }
-
- // Directions locks
- if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {
- return false;
- }
- if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {
- if ((s.activeIndex || 0) !== slideIndex ) return false;
- }
-
- // Update Index
- if (typeof speed === 'undefined') speed = s.params.speed;
- s.previousIndex = s.activeIndex || 0;
- s.activeIndex = slideIndex;
- s.updateRealIndex();
- if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {
- // Update Height
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- s.updateClasses();
- if (s.params.effect !== 'slide') {
- s.setWrapperTranslate(translate);
- }
- return false;
- }
- s.updateClasses();
- s.onTransitionStart(runCallbacks);
-
- if (speed === 0 || s.browser.lteIE9) {
- s.setWrapperTranslate(translate);
- s.setWrapperTransition(0);
- s.onTransitionEnd(runCallbacks);
- }
- else {
- s.setWrapperTranslate(translate);
- s.setWrapperTransition(speed);
- if (!s.animating) {
- s.animating = true;
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.onTransitionEnd(runCallbacks);
- });
- }
-
- }
-
- return true;
- };
-
- s.onTransitionStart = function (runCallbacks) {
- if (typeof runCallbacks === 'undefined') runCallbacks = true;
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- if (s.lazy) s.lazy.onTransitionStart();
- if (runCallbacks) {
- s.emit('onTransitionStart', s);
- if (s.activeIndex !== s.previousIndex) {
- s.emit('onSlideChangeStart', s);
- if (s.activeIndex > s.previousIndex) {
- s.emit('onSlideNextStart', s);
- }
- else {
- s.emit('onSlidePrevStart', s);
- }
- }
-
- }
- };
- s.onTransitionEnd = function (runCallbacks) {
- s.animating = false;
- s.setWrapperTransition(0);
- if (typeof runCallbacks === 'undefined') runCallbacks = true;
- if (s.lazy) s.lazy.onTransitionEnd();
- if (runCallbacks) {
- s.emit('onTransitionEnd', s);
- if (s.activeIndex !== s.previousIndex) {
- s.emit('onSlideChangeEnd', s);
- if (s.activeIndex > s.previousIndex) {
- s.emit('onSlideNextEnd', s);
- }
- else {
- s.emit('onSlidePrevEnd', s);
- }
- }
- }
- if (s.params.history && s.history) {
- s.history.setHistory(s.params.history, s.activeIndex);
- }
- if (s.params.hashnav && s.hashnav) {
- s.hashnav.setHash();
- }
-
- };
- s.slideNext = function (runCallbacks, speed, internal) {
- if (s.params.loop) {
- if (s.animating) return false;
- s.fixLoop();
- var clientLeft = s.container[0].clientLeft;
- return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);
- }
- else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);
- };
- s._slideNext = function (speed) {
- return s.slideNext(true, speed, true);
- };
- s.slidePrev = function (runCallbacks, speed, internal) {
- if (s.params.loop) {
- if (s.animating) return false;
- s.fixLoop();
- var clientLeft = s.container[0].clientLeft;
- return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);
- }
- else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);
- };
- s._slidePrev = function (speed) {
- return s.slidePrev(true, speed, true);
- };
- s.slideReset = function (runCallbacks, speed, internal) {
- return s.slideTo(s.activeIndex, speed, runCallbacks);
- };
-
- s.disableTouchControl = function () {
- s.params.onlyExternal = true;
- return true;
- };
- s.enableTouchControl = function () {
- s.params.onlyExternal = false;
- return true;
- };
-
- /*=========================
- Translate/transition helpers
- ===========================*/
- s.setWrapperTransition = function (duration, byController) {
- s.wrapper.transition(duration);
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTransition(duration);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTransition(duration);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTransition(duration);
- }
- if (s.params.control && s.controller) {
- s.controller.setTransition(duration, byController);
- }
- s.emit('onSetTransition', s, duration);
- };
- s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {
- var x = 0, y = 0, z = 0;
- if (s.isHorizontal()) {
- x = s.rtl ? -translate : translate;
- }
- else {
- y = translate;
- }
-
- if (s.params.roundLengths) {
- x = round(x);
- y = round(y);
- }
-
- if (!s.params.virtualTranslate) {
- if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');
- else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');
- }
-
- s.translate = s.isHorizontal() ? x : y;
-
- // Check if we need to update progress
- var progress;
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- if (translatesDiff === 0) {
- progress = 0;
- }
- else {
- progress = (translate - s.minTranslate()) / (translatesDiff);
- }
- if (progress !== s.progress) {
- s.updateProgress(translate);
- }
-
- if (updateActiveIndex) s.updateActiveIndex();
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTranslate(s.translate);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTranslate(s.translate);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTranslate(s.translate);
- }
- if (s.params.control && s.controller) {
- s.controller.setTranslate(s.translate, byController);
- }
- s.emit('onSetTranslate', s, s.translate);
- };
-
- s.getTranslate = function (el, axis) {
- var matrix, curTransform, curStyle, transformMatrix;
-
- // automatic axis detection
- if (typeof axis === 'undefined') {
- axis = 'x';
- }
-
- if (s.params.virtualTranslate) {
- return s.rtl ? -s.translate : s.translate;
- }
-
- curStyle = window.getComputedStyle(el, null);
- if (window.WebKitCSSMatrix) {
- curTransform = curStyle.transform || curStyle.webkitTransform;
- if (curTransform.split(',').length > 6) {
- curTransform = curTransform.split(', ').map(function(a){
- return a.replace(',','.');
- }).join(', ');
- }
- // Some old versions of Webkit choke when 'none' is passed; pass
- // empty string instead in this case
- transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
- }
- else {
- transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
- matrix = transformMatrix.toString().split(',');
- }
-
- if (axis === 'x') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m41;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[12]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[4]);
- }
- if (axis === 'y') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m42;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[13]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[5]);
- }
- if (s.rtl && curTransform) curTransform = -curTransform;
- return curTransform || 0;
- };
- s.getWrapperTranslate = function (axis) {
- if (typeof axis === 'undefined') {
- axis = s.isHorizontal() ? 'x' : 'y';
- }
- return s.getTranslate(s.wrapper[0], axis);
- };
-
- /*=========================
- Observer
- ===========================*/
- s.observers = [];
- function initObserver(target, options) {
- options = options || {};
- // create an observer instance
- var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
- var observer = new ObserverFunc(function (mutations) {
- mutations.forEach(function (mutation) {
- s.onResize(true);
- s.emit('onObserverUpdate', s, mutation);
- });
- });
-
- observer.observe(target, {
- attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
- childList: typeof options.childList === 'undefined' ? true : options.childList,
- characterData: typeof options.characterData === 'undefined' ? true : options.characterData
- });
-
- s.observers.push(observer);
- }
- s.initObservers = function () {
- if (s.params.observeParents) {
- var containerParents = s.container.parents();
- for (var i = 0; i < containerParents.length; i++) {
- initObserver(containerParents[i]);
- }
- }
-
- // Observe container
- initObserver(s.container[0], {childList: false});
-
- // Observe wrapper
- initObserver(s.wrapper[0], {attributes: false});
- };
- s.disconnectObservers = function () {
- for (var i = 0; i < s.observers.length; i++) {
- s.observers[i].disconnect();
- }
- s.observers = [];
- };
- /*=========================
- Loop
- ===========================*/
- // Create looped slides
- s.createLoop = function () {
- // Remove duplicated slides
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
-
- var slides = s.wrapper.children('.' + s.params.slideClass);
-
- if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;
-
- s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);
- s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;
- if (s.loopedSlides > slides.length) {
- s.loopedSlides = slides.length;
- }
-
- var prependSlides = [], appendSlides = [], i;
- slides.each(function (index, el) {
- var slide = $(this);
- if (index < s.loopedSlides) appendSlides.push(el);
- if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);
- slide.attr('data-swiper-slide-index', index);
- });
- for (i = 0; i < appendSlides.length; i++) {
- s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- for (i = prependSlides.length - 1; i >= 0; i--) {
- s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- };
- s.destroyLoop = function () {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
- s.slides.removeAttr('data-swiper-slide-index');
- };
- s.reLoop = function (updatePosition) {
- var oldIndex = s.activeIndex - s.loopedSlides;
- s.destroyLoop();
- s.createLoop();
- s.updateSlidesSize();
- if (updatePosition) {
- s.slideTo(oldIndex + s.loopedSlides, 0, false);
- }
-
- };
- s.fixLoop = function () {
- var newIndex;
- //Fix For Negative Oversliding
- if (s.activeIndex < s.loopedSlides) {
- newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- //Fix For Positive Oversliding
- else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {
- newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- };
- /*=========================
- Append/Prepend/Remove Slides
- ===========================*/
- s.appendSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.append(slides[i]);
- }
- }
- else {
- s.wrapper.append(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- };
- s.prependSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- var newActiveIndex = s.activeIndex + 1;
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.prepend(slides[i]);
- }
- newActiveIndex = s.activeIndex + slides.length;
- }
- else {
- s.wrapper.prepend(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- s.slideTo(newActiveIndex, 0, false);
- };
- s.removeSlide = function (slidesIndexes) {
- if (s.params.loop) {
- s.destroyLoop();
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- }
- var newActiveIndex = s.activeIndex,
- indexToRemove;
- if (typeof slidesIndexes === 'object' && slidesIndexes.length) {
- for (var i = 0; i < slidesIndexes.length; i++) {
- indexToRemove = slidesIndexes[i];
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- }
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
- else {
- indexToRemove = slidesIndexes;
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
-
- if (s.params.loop) {
- s.createLoop();
- }
-
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- if (s.params.loop) {
- s.slideTo(newActiveIndex + s.loopedSlides, 0, false);
- }
- else {
- s.slideTo(newActiveIndex, 0, false);
- }
-
- };
- s.removeAllSlides = function () {
- var slidesIndexes = [];
- for (var i = 0; i < s.slides.length; i++) {
- slidesIndexes.push(i);
- }
- s.removeSlide(slidesIndexes);
- };
-
+ allowClick: true,
- /*=========================
- Effects
- ===========================*/
- s.effects = {
- fade: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var offset = slide[0].swiperSlideOffset;
- var tx = -offset;
- if (!s.params.virtualTranslate) tx = tx - s.translate;
- var ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
- var slideOpacity = s.params.fade.crossFade ?
- Math.max(1 - Math.abs(slide[0].progress), 0) :
- 1 + Math.min(Math.max(slide[0].progress, -1), 0);
- slide
- .css({
- opacity: slideOpacity
- })
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');
-
- }
-
- },
- setTransition: function (duration) {
- s.slides.transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- flip: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var progress = slide[0].progress;
- if (s.params.flip.limitRotation) {
- progress = Math.max(Math.min(slide[0].progress, 1), -1);
- }
- var offset = slide[0].swiperSlideOffset;
- var rotate = -180 * progress,
- rotateY = rotate,
- rotateX = 0,
- tx = -offset,
- ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- rotateX = -rotateY;
- rotateY = 0;
- }
- else if (s.rtl) {
- rotateY = -rotateY;
- }
-
- slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;
-
- if (s.params.flip.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
-
- slide
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.eq(s.activeIndex).transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- if (!$(this).hasClass(s.params.slideActiveClass)) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- cube: {
- setTranslate: function () {
- var wrapperRotate = 0, cubeShadow;
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow = s.wrapper.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.wrapper.append(cubeShadow);
- }
- cubeShadow.css({height: s.width + 'px'});
- }
- else {
- cubeShadow = s.container.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.container.append(cubeShadow);
- }
- }
- }
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var slideAngle = i * 90;
- var round = Math.floor(slideAngle / 360);
- if (s.rtl) {
- slideAngle = -slideAngle;
- round = Math.floor(-slideAngle / 360);
- }
- var progress = Math.max(Math.min(slide[0].progress, 1), -1);
- var tx = 0, ty = 0, tz = 0;
- if (i % 4 === 0) {
- tx = - round * 4 * s.size;
- tz = 0;
- }
- else if ((i - 1) % 4 === 0) {
- tx = 0;
- tz = - round * 4 * s.size;
- }
- else if ((i - 2) % 4 === 0) {
- tx = s.size + round * 4 * s.size;
- tz = s.size;
- }
- else if ((i - 3) % 4 === 0) {
- tx = - s.size;
- tz = 3 * s.size + s.size * 4 * round;
- }
- if (s.rtl) {
- tx = -tx;
- }
-
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
-
- var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';
- if (progress <= 1 && progress > -1) {
- wrapperRotate = i * 90 + progress * 90;
- if (s.rtl) wrapperRotate = -i * 90 - progress * 90;
- }
- slide.transform(transform);
- if (s.params.cube.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
- }
- s.wrapper.css({
- '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'
- });
-
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');
- }
- else {
- var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
- var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
- var scale1 = s.params.cube.shadowScale,
- scale2 = s.params.cube.shadowScale / multiplier,
- offset = s.params.cube.shadowOffset;
- cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');
- }
- }
- var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;
- s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.cube.shadow && !s.isHorizontal()) {
- s.container.find('.swiper-cube-shadow').transition(duration);
- }
- }
- },
- coverflow: {
- setTranslate: function () {
- var transform = s.translate;
- var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;
- var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;
- var translate = s.params.coverflow.depth;
- //Each slide offset from center
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideSize = s.slidesSizesGrid[i];
- var slideOffset = slide[0].swiperSlideOffset;
- var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;
-
- var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;
- var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;
- // var rotateZ = 0
- var translateZ = -translate * Math.abs(offsetMultiplier);
-
- var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);
- var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;
-
- //Fix for ultra small values
- if (Math.abs(translateX) < 0.001) translateX = 0;
- if (Math.abs(translateY) < 0.001) translateY = 0;
- if (Math.abs(translateZ) < 0.001) translateZ = 0;
- if (Math.abs(rotateY) < 0.001) rotateY = 0;
- if (Math.abs(rotateX) < 0.001) rotateX = 0;
-
- var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';
-
- slide.transform(slideTransform);
- slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
- if (s.params.coverflow.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
- if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
- }
- }
-
- //Set correct perspective for IE10
- if (s.browser.ie) {
- var ws = s.wrapper[0].style;
- ws.perspectiveOrigin = center + 'px 50%';
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- }
- }
- };
-
+ // Touches
+ allowTouchMove: swiper.params.allowTouchMove,
- /*=========================
- Images Lazy Loading
- ===========================*/
- s.lazy = {
- initialImageLoaded: false,
- loadImageInSlide: function (index, loadInDuplicate) {
- if (typeof index === 'undefined') return;
- if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;
- if (s.slides.length === 0) return;
-
- var slide = s.slides.eq(index);
- var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');
- if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {
- img = img.add(slide[0]);
- }
- if (img.length === 0) return;
-
- img.each(function () {
- var _img = $(this);
- _img.addClass(s.params.lazyStatusLoadingClass);
- var background = _img.attr('data-background');
- var src = _img.attr('data-src'),
- srcset = _img.attr('data-srcset'),
- sizes = _img.attr('data-sizes');
- s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {
- if (typeof s === 'undefined' || s === null || !s) return;
- if (background) {
- _img.css('background-image', 'url("' + background + '")');
- _img.removeAttr('data-background');
- }
- else {
- if (srcset) {
- _img.attr('srcset', srcset);
- _img.removeAttr('data-srcset');
- }
- if (sizes) {
- _img.attr('sizes', sizes);
- _img.removeAttr('data-sizes');
- }
- if (src) {
- _img.attr('src', src);
- _img.removeAttr('data-src');
- }
-
- }
-
- _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);
- slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();
- if (s.params.loop && loadInDuplicate) {
- var slideOriginalIndex = slide.attr('data-swiper-slide-index');
- if (slide.hasClass(s.params.slideDuplicateClass)) {
- var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')');
- s.lazy.loadImageInSlide(originalSlide.index(), false);
- }
- else {
- var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]');
- s.lazy.loadImageInSlide(duplicatedSlide.index(), false);
- }
- }
- s.emit('onLazyImageReady', s, slide[0], _img[0]);
- });
-
- s.emit('onLazyImageLoad', s, slide[0], _img[0]);
- });
-
- },
- load: function () {
- var i;
- var slidesPerView = s.params.slidesPerView;
- if (slidesPerView === 'auto') {
- slidesPerView = 0;
- }
- if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;
- if (s.params.watchSlidesVisibility) {
- s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {
- s.lazy.loadImageInSlide($(this).index());
- });
- }
- else {
- if (slidesPerView > 1) {
- for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- s.lazy.loadImageInSlide(s.activeIndex);
- }
- }
- if (s.params.lazyLoadingInPrevNext) {
- if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {
- var amount = s.params.lazyLoadingInPrevNextAmount;
- var spv = slidesPerView;
- var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);
- var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);
- // Next Slides
- for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- // Prev Slides
- for (i = minIndex; i < s.activeIndex ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);
- if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());
-
- var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);
- if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());
- }
- }
- },
- onTransitionStart: function () {
- if (s.params.lazyLoading) {
- if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {
- s.lazy.load();
- }
- }
- },
- onTransitionEnd: function () {
- if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {
- s.lazy.load();
- }
- }
- };
-
+ touches: {
+ startX: 0,
+ startY: 0,
+ currentX: 0,
+ currentY: 0,
+ diff: 0
+ },
- /*=========================
- Scrollbar
- ===========================*/
- s.scrollbar = {
- isTouched: false,
- setDragPosition: function (e) {
- var sb = s.scrollbar;
- var x = 0, y = 0;
- var translate;
- var pointerPosition = s.isHorizontal() ?
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;
- var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;
- var positionMin = -s.minTranslate() * sb.moveDivider;
- var positionMax = -s.maxTranslate() * sb.moveDivider;
- if (position < positionMin) {
- position = positionMin;
- }
- else if (position > positionMax) {
- position = positionMax;
- }
- position = -position / sb.moveDivider;
- s.updateProgress(position);
- s.setWrapperTranslate(position, true);
- },
- dragStart: function (e) {
- var sb = s.scrollbar;
- sb.isTouched = true;
- e.preventDefault();
- e.stopPropagation();
-
- sb.setDragPosition(e);
- clearTimeout(sb.dragTimeout);
-
- sb.track.transition(0);
- if (s.params.scrollbarHide) {
- sb.track.css('opacity', 1);
- }
- s.wrapper.transition(100);
- sb.drag.transition(100);
- s.emit('onScrollbarDragStart', s);
- },
- dragMove: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- sb.setDragPosition(e);
- s.wrapper.transition(0);
- sb.track.transition(0);
- sb.drag.transition(0);
- s.emit('onScrollbarDragMove', s);
- },
- dragEnd: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- sb.isTouched = false;
- if (s.params.scrollbarHide) {
- clearTimeout(sb.dragTimeout);
- sb.dragTimeout = setTimeout(function () {
- sb.track.css('opacity', 0);
- sb.track.transition(400);
- }, 1000);
-
- }
- s.emit('onScrollbarDragEnd', s);
- if (s.params.scrollbarSnapOnRelease) {
- s.slideReset();
- }
- },
- draggableEvents: (function () {
- if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;
- else return s.touchEvents;
- })(),
- enableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).on(sb.draggableEvents.start, sb.dragStart);
- $(target).on(sb.draggableEvents.move, sb.dragMove);
- $(target).on(sb.draggableEvents.end, sb.dragEnd);
- },
- disableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).off(sb.draggableEvents.start, sb.dragStart);
- $(target).off(sb.draggableEvents.move, sb.dragMove);
- $(target).off(sb.draggableEvents.end, sb.dragEnd);
- },
- set: function () {
- if (!s.params.scrollbar) return;
- var sb = s.scrollbar;
- sb.track = $(s.params.scrollbar);
- if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {
- sb.track = s.container.find(s.params.scrollbar);
- }
- sb.drag = sb.track.find('.swiper-scrollbar-drag');
- if (sb.drag.length === 0) {
- sb.drag = $('');
- sb.track.append(sb.drag);
- }
- sb.drag[0].style.width = '';
- sb.drag[0].style.height = '';
- sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;
-
- sb.divider = s.size / s.virtualSize;
- sb.moveDivider = sb.divider * (sb.trackSize / s.size);
- sb.dragSize = sb.trackSize * sb.divider;
-
- if (s.isHorizontal()) {
- sb.drag[0].style.width = sb.dragSize + 'px';
- }
- else {
- sb.drag[0].style.height = sb.dragSize + 'px';
- }
-
- if (sb.divider >= 1) {
- sb.track[0].style.display = 'none';
- }
- else {
- sb.track[0].style.display = '';
- }
- if (s.params.scrollbarHide) {
- sb.track[0].style.opacity = 0;
- }
- },
- setTranslate: function () {
- if (!s.params.scrollbar) return;
- var diff;
- var sb = s.scrollbar;
- var translate = s.translate || 0;
- var newPos;
-
- var newSize = sb.dragSize;
- newPos = (sb.trackSize - sb.dragSize) * s.progress;
- if (s.rtl && s.isHorizontal()) {
- newPos = -newPos;
- if (newPos > 0) {
- newSize = sb.dragSize - newPos;
- newPos = 0;
- }
- else if (-newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize + newPos;
- }
- }
- else {
- if (newPos < 0) {
- newSize = sb.dragSize + newPos;
- newPos = 0;
- }
- else if (newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize - newPos;
- }
- }
- if (s.isHorizontal()) {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');
- }
- else {
- sb.drag.transform('translateX(' + (newPos) + 'px)');
- }
- sb.drag[0].style.width = newSize + 'px';
- }
- else {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');
- }
- else {
- sb.drag.transform('translateY(' + (newPos) + 'px)');
- }
- sb.drag[0].style.height = newSize + 'px';
- }
- if (s.params.scrollbarHide) {
- clearTimeout(sb.timeout);
- sb.track[0].style.opacity = 1;
- sb.timeout = setTimeout(function () {
- sb.track[0].style.opacity = 0;
- sb.track.transition(400);
- }, 1000);
- }
- },
- setTransition: function (duration) {
- if (!s.params.scrollbar) return;
- s.scrollbar.drag.transition(duration);
- }
- };
-
+ // Images
+ imagesToLoad: [],
+ imagesLoaded: 0
+ });
- /*=========================
- Controller
- ===========================*/
- s.controller = {
- LinearSpline: function (x, y) {
- var binarySearch = (function() {
- var maxIndex, minIndex, guess;
- return function(array, val) {
- minIndex = -1;
- maxIndex = array.length;
- while (maxIndex - minIndex > 1)
- if (array[guess = maxIndex + minIndex >> 1] <= val) {
- minIndex = guess;
- } else {
- maxIndex = guess;
- }
- return maxIndex;
- };
- })();
- this.x = x;
- this.y = y;
- this.lastIndex = x.length - 1;
- // Given an x value (x2), return the expected y2 value:
- // (x1,y1) is the known point before given value,
- // (x3,y3) is the known point after given value.
- var i1, i3;
- var l = this.x.length;
-
- this.interpolate = function (x2) {
- if (!x2) return 0;
-
- // Get the indexes of x1 and x3 (the array indexes before and after given x2):
- i3 = binarySearch(this.x, x2);
- i1 = i3 - 1;
-
- // We have our indexes i1 & i3, so we can calculate already:
- // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
- return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];
- };
- },
- //xxx: for now i will just save one spline function to to
- getInterpolateFunction: function(c){
- if(!s.controller.spline) s.controller.spline = s.params.loop ?
- new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :
- new s.controller.LinearSpline(s.snapGrid, c.snapGrid);
- },
- setTranslate: function (translate, byController) {
- var controlled = s.params.control;
- var multiplier, controlledTranslate;
- function setControlledTranslate(c) {
- // this will create an Interpolate function based on the snapGrids
- // x is the Grid of the scrolled scroller and y will be the controlled scroller
- // it makes sense to create this only once and recall it for the interpolation
- // the function does a lot of value caching for performance
- translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;
- if (s.params.controlBy === 'slide') {
- s.controller.getInterpolateFunction(c);
- // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
- // but it did not work out
- controlledTranslate = -s.controller.spline.interpolate(-translate);
- }
-
- if(!controlledTranslate || s.params.controlBy === 'container'){
- multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());
- controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();
- }
-
- if (s.params.controlInverse) {
- controlledTranslate = c.maxTranslate() - controlledTranslate;
- }
- c.updateProgress(controlledTranslate);
- c.setWrapperTranslate(controlledTranslate, false, s);
- c.updateActiveIndex();
- }
- if (Array.isArray(controlled)) {
- for (var i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTranslate(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
-
- setControlledTranslate(controlled);
- }
- },
- setTransition: function (duration, byController) {
- var controlled = s.params.control;
- var i;
- function setControlledTransition(c) {
- c.setWrapperTransition(duration, s);
- if (duration !== 0) {
- c.onTransitionStart();
- c.wrapper.transitionEnd(function(){
- if (!controlled) return;
- if (c.params.loop && s.params.controlBy === 'slide') {
- c.fixLoop();
- }
- c.onTransitionEnd();
-
- });
- }
- }
- if (Array.isArray(controlled)) {
- for (i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTransition(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
- setControlledTransition(controlled);
- }
- }
- };
-
+ // Install Modules
+ swiper.useModules();
- /*=========================
- Hash Navigation
- ===========================*/
- s.hashnav = {
- onHashCange: function (e, a) {
- var newHash = document.location.hash.replace('#', '');
- var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');
- if (newHash !== activeSlideHash) {
- s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash="' + (newHash) + '"]').index());
- }
- },
- attachEvents: function (detach) {
- var action = detach ? 'off' : 'on';
- $(window)[action]('hashchange', s.hashnav.onHashCange);
- },
- setHash: function () {
- if (!s.hashnav.initialized || !s.params.hashnav) return;
- if (s.params.replaceState && window.history && window.history.replaceState) {
- window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));
- } else {
- var slide = s.slides.eq(s.activeIndex);
- var hash = slide.attr('data-hash') || slide.attr('data-history');
- document.location.hash = hash || '';
- }
- },
- init: function () {
- if (!s.params.hashnav || s.params.history) return;
- s.hashnav.initialized = true;
- var hash = document.location.hash.replace('#', '');
- if (hash) {
- var speed = 0;
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideHash = slide.attr('data-hash') || slide.attr('data-history');
- if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, s.params.runCallbacksOnInit, true);
- }
- }
- }
- if (s.params.hashnavWatchState) s.hashnav.attachEvents();
- },
- destroy: function () {
- if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);
- }
- };
-
+ // Init
+ if (swiper.params.init) {
+ swiper.init();
+ }
- /*=========================
- History Api with fallback to Hashnav
- ===========================*/
- s.history = {
- init: function () {
- if (!s.params.history) return;
- if (!window.history || !window.history.pushState) {
- s.params.history = false;
- s.params.hashnav = true;
- return;
- }
- s.history.initialized = true;
- this.paths = this.getPathValues();
- if (!this.paths.key && !this.paths.value) return;
- this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);
- if (!s.params.replaceState) {
- window.addEventListener('popstate', this.setHistoryPopState);
- }
- },
- setHistoryPopState: function() {
- s.history.paths = s.history.getPathValues();
- s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);
- },
- getPathValues: function() {
- var pathArray = window.location.pathname.slice(1).split('/');
- var total = pathArray.length;
- var key = pathArray[total - 2];
- var value = pathArray[total - 1];
- return { key: key, value: value };
- },
- setHistory: function (key, index) {
- if (!s.history.initialized || !s.params.history) return;
- var slide = s.slides.eq(index);
- var value = this.slugify(slide.attr('data-history'));
- if (!window.location.pathname.includes(key)) {
- value = key + '/' + value;
- }
- if (s.params.replaceState) {
- window.history.replaceState(null, null, value);
- } else {
- window.history.pushState(null, null, value);
- }
- },
- slugify: function(text) {
- return text.toString().toLowerCase()
- .replace(/\s+/g, '-')
- .replace(/[^\w\-]+/g, '')
- .replace(/\-\-+/g, '-')
- .replace(/^-+/, '')
- .replace(/-+$/, '');
- },
- scrollToSlide: function(speed, value, runCallbacks) {
- if (value) {
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideHistory = this.slugify(slide.attr('data-history'));
- if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, runCallbacks);
- }
- }
- } else {
- s.slideTo(0, speed, runCallbacks);
- }
- }
- };
-
+ // Return app instance
+ return swiper;
+ }
- /*=========================
- Keyboard Control
- ===========================*/
- function handleKeyboard(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var kc = e.keyCode || e.charCode;
- // Directions locks
- if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {
- return false;
- }
- if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {
- return false;
- }
- if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
- return;
- }
- if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
- return;
- }
- if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {
- var inView = false;
- //Check that swiper should be inside of visible area of window
- if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {
- return;
- }
- var windowScroll = {
- left: window.pageXOffset,
- top: window.pageYOffset
- };
- var windowWidth = window.innerWidth;
- var windowHeight = window.innerHeight;
- var swiperOffset = s.container.offset();
- if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;
- var swiperCoord = [
- [swiperOffset.left, swiperOffset.top],
- [swiperOffset.left + s.width, swiperOffset.top],
- [swiperOffset.left, swiperOffset.top + s.height],
- [swiperOffset.left + s.width, swiperOffset.top + s.height]
- ];
- for (var i = 0; i < swiperCoord.length; i++) {
- var point = swiperCoord[i];
- if (
- point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&
- point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight
- ) {
- inView = true;
- }
-
- }
- if (!inView) return;
- }
- if (s.isHorizontal()) {
- if (kc === 37 || kc === 39) {
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- }
- if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();
- if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();
- }
- else {
- if (kc === 38 || kc === 40) {
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- }
- if (kc === 40) s.slideNext();
- if (kc === 38) s.slidePrev();
- }
- s.emit('onKeyPress', s, kc);
- }
- s.disableKeyboardControl = function () {
- s.params.keyboardControl = false;
- $(document).off('keydown', handleKeyboard);
- };
- s.enableKeyboardControl = function () {
- s.params.keyboardControl = true;
- $(document).on('keydown', handleKeyboard);
- };
-
+ if (SwiperClass$$1) Swiper.__proto__ = SwiperClass$$1;
+ Swiper.prototype = Object.create(
+ SwiperClass$$1 && SwiperClass$$1.prototype
+ );
+ Swiper.prototype.constructor = Swiper;
- /*=========================
- Mousewheel Control
- ===========================*/
- s.mousewheel = {
- event: false,
- lastScrollTime: (new window.Date()).getTime()
- };
- function isEventSupported() {
- var eventName = 'onwheel';
- var isSupported = eventName in document;
-
- if (!isSupported) {
- var element = document.createElement('div');
- element.setAttribute(eventName, 'return;');
- isSupported = typeof element[eventName] === 'function';
- }
-
- if (!isSupported &&
- document.implementation &&
- document.implementation.hasFeature &&
- // always returns true in newer browsers as per the standard.
- // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
- document.implementation.hasFeature('', '') !== true ) {
- // This is the only way to test support for the `wheel` event in IE9+.
- isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
- }
-
- return isSupported;
- }
- /**
- * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is
- * complicated, thus this doc is long and (hopefully) detailed enough to answer
- * your questions.
- *
- * If you need to react to the mouse wheel in a predictable way, this code is
- * like your bestest friend. * hugs *
- *
- * As of today, there are 4 DOM event types you can listen to:
- *
- * 'wheel' -- Chrome(31+), FF(17+), IE(9+)
- * 'mousewheel' -- Chrome, IE(6+), Opera, Safari
- * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!
- * 'DOMMouseScroll' -- FF(0.9.7+) since 2003
- *
- * So what to do? The is the best:
- *
- * normalizeWheel.getEventType();
- *
- * In your event callback, use this code to get sane interpretation of the
- * deltas. This code will return an object with properties:
- *
- * spinX -- normalized spin speed (use for zoom) - x plane
- * spinY -- " - y plane
- * pixelX -- normalized distance (to pixels) - x plane
- * pixelY -- " - y plane
- *
- * Wheel values are provided by the browser assuming you are using the wheel to
- * scroll a web page by a number of lines or pixels (or pages). Values can vary
- * significantly on different platforms and browsers, forgetting that you can
- * scroll at different speeds. Some devices (like trackpads) emit more events
- * at smaller increments with fine granularity, and some emit massive jumps with
- * linear speed or acceleration.
- *
- * This code does its best to normalize the deltas for you:
- *
- * - spin is trying to normalize how far the wheel was spun (or trackpad
- * dragged). This is super useful for zoom support where you want to
- * throw away the chunky scroll steps on the PC and make those equal to
- * the slow and smooth tiny steps on the Mac. Key data: This code tries to
- * resolve a single slow step on a wheel to 1.
- *
- * - pixel is normalizing the desired scroll delta in pixel units. You'll
- * get the crazy differences between browsers, but at least it'll be in
- * pixels!
- *
- * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This
- * should translate to positive value zooming IN, negative zooming OUT.
- * This matches the newer 'wheel' event.
- *
- * Why are there spinX, spinY (or pixels)?
- *
- * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn
- * with a mouse. It results in side-scrolling in the browser by default.
- *
- * - spinY is what you expect -- it's the classic axis of a mouse wheel.
- *
- * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and
- * probably is by browsers in conjunction with fancy 3D controllers .. but
- * you know.
- *
- * Implementation info:
- *
- * Examples of 'wheel' event if you scroll slowly (down) by one step with an
- * average mouse:
- *
- * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)
- * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)
- * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)
- * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)
- * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)
- *
- * On the trackpad:
- *
- * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)
- * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)
- *
- * On other/older browsers.. it's more complicated as there can be multiple and
- * also missing delta values.
- *
- * The 'wheel' event is more standard:
- *
- * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
- *
- * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and
- * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain
- * backward compatibility with older events. Those other values help us
- * better normalize spin speed. Example of what the browsers provide:
- *
- * | event.wheelDelta | event.detail
- * ------------------+------------------+--------------
- * Safari v5/OS X | -120 | 0
- * Safari v5/Win7 | -120 | 0
- * Chrome v17/OS X | -120 | 0
- * Chrome v17/Win7 | -120 | 0
- * IE9/Win7 | -120 | undefined
- * Firefox v4/OS X | undefined | 1
- * Firefox v4/Win7 | undefined | 3
- *
- */
- function normalizeWheel( /*object*/ event ) /*object*/ {
- // Reasonable defaults
- var PIXEL_STEP = 10;
- var LINE_HEIGHT = 40;
- var PAGE_HEIGHT = 800;
-
- var sX = 0, sY = 0, // spinX, spinY
- pX = 0, pY = 0; // pixelX, pixelY
-
- // Legacy
- if( 'detail' in event ) {
- sY = event.detail;
- }
- if( 'wheelDelta' in event ) {
- sY = -event.wheelDelta / 120;
- }
- if( 'wheelDeltaY' in event ) {
- sY = -event.wheelDeltaY / 120;
- }
- if( 'wheelDeltaX' in event ) {
- sX = -event.wheelDeltaX / 120;
- }
-
- // side scrolling on FF with DOMMouseScroll
- if( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {
- sX = sY;
- sY = 0;
- }
-
- pX = sX * PIXEL_STEP;
- pY = sY * PIXEL_STEP;
-
- if( 'deltaY' in event ) {
- pY = event.deltaY;
- }
- if( 'deltaX' in event ) {
- pX = event.deltaX;
- }
-
- if( (pX || pY) && event.deltaMode ) {
- if( event.deltaMode === 1 ) { // delta in LINE units
- pX *= LINE_HEIGHT;
- pY *= LINE_HEIGHT;
- } else { // delta in PAGE units
- pX *= PAGE_HEIGHT;
- pY *= PAGE_HEIGHT;
- }
- }
-
- // Fall-back if spin cannot be determined
- if( pX && !sX ) {
- sX = (pX < 1) ? -1 : 1;
- }
- if( pY && !sY ) {
- sY = (pY < 1) ? -1 : 1;
- }
-
- return {
- spinX: sX,
- spinY: sY,
- pixelX: pX,
- pixelY: pY
- };
- }
- if (s.params.mousewheelControl) {
- /**
- * The best combination if you prefer spinX + spinY normalization. It favors
- * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with
- * 'wheel' event, making spin speed determination impossible.
- */
- s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?
- 'DOMMouseScroll' :
- isEventSupported() ?
- 'wheel' : 'mousewheel';
- }
- function handleMousewheel(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var delta = 0;
- var rtlFactor = s.rtl ? -1 : 1;
-
- var data = normalizeWheel( e );
-
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;
- else return;
- }
- }
- else {
- delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;
- }
-
- if (delta === 0) return;
-
- if (s.params.mousewheelInvert) delta = -delta;
-
- if (!s.params.freeMode) {
- if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {
- if (delta < 0) {
- if ((!s.isEnd || s.params.loop) && !s.animating) {
- s.slideNext();
- s.emit('onScroll', s, e);
- }
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- else {
- if ((!s.isBeginning || s.params.loop) && !s.animating) {
- s.slidePrev();
- s.emit('onScroll', s, e);
- }
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- }
- s.mousewheel.lastScrollTime = (new window.Date()).getTime();
-
- }
- else {
- //Freemode or scrollContainer:
- var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;
- var wasBeginning = s.isBeginning,
- wasEnd = s.isEnd;
-
- if (position >= s.minTranslate()) position = s.minTranslate();
- if (position <= s.maxTranslate()) position = s.maxTranslate();
-
- s.setWrapperTransition(0);
- s.setWrapperTranslate(position);
- s.updateProgress();
- s.updateActiveIndex();
-
- if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {
- s.updateClasses();
- }
-
- if (s.params.freeModeSticky) {
- clearTimeout(s.mousewheel.timeout);
- s.mousewheel.timeout = setTimeout(function () {
- s.slideReset();
- }, 300);
- }
- else {
- if (s.params.lazyLoading && s.lazy) {
- s.lazy.load();
- }
- }
- // Emit event
- s.emit('onScroll', s, e);
-
- // Stop autoplay
- if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();
-
- // Return page scroll on edge positions
- if (position === 0 || position === s.maxTranslate()) return;
- }
-
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- return false;
- }
- s.disableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- var target = s.container;
- if (s.params.mousewheelEventsTarged !== 'container') {
- target = $(s.params.mousewheelEventsTarged);
- }
- target.off(s.mousewheel.event, handleMousewheel);
- s.params.mousewheelControl = false;
- return true;
- };
-
- s.enableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- var target = s.container;
- if (s.params.mousewheelEventsTarged !== 'container') {
- target = $(s.params.mousewheelEventsTarged);
- }
- target.on(s.mousewheel.event, handleMousewheel);
- s.params.mousewheelControl = true;
- return true;
- };
-
-
- /*=========================
- Parallax
- ===========================*/
- function setParallaxTransform(el, progress) {
- el = $(el);
- var p, pX, pY;
- var rtlFactor = s.rtl ? -1 : 1;
-
- p = el.attr('data-swiper-parallax') || '0';
- pX = el.attr('data-swiper-parallax-x');
- pY = el.attr('data-swiper-parallax-y');
- if (pX || pY) {
- pX = pX || '0';
- pY = pY || '0';
- }
- else {
- if (s.isHorizontal()) {
- pX = p;
- pY = '0';
- }
- else {
- pY = p;
- pX = '0';
- }
- }
-
- if ((pX).indexOf('%') >= 0) {
- pX = parseInt(pX, 10) * progress * rtlFactor + '%';
- }
- else {
- pX = pX * progress * rtlFactor + 'px' ;
- }
- if ((pY).indexOf('%') >= 0) {
- pY = parseInt(pY, 10) * progress + '%';
- }
- else {
- pY = pY * progress + 'px' ;
- }
-
- el.transform('translate3d(' + pX + ', ' + pY + ',0px)');
- }
- s.parallax = {
- setTranslate: function () {
- s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){
- setParallaxTransform(this, s.progress);
-
- });
- s.slides.each(function () {
- var slide = $(this);
- slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {
- var progress = Math.min(Math.max(slide[0].progress, -1), 1);
- setParallaxTransform(this, progress);
- });
- });
- },
- setTransition: function (duration) {
- if (typeof duration === 'undefined') duration = s.params.speed;
- s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){
- var el = $(this);
- var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;
- if (duration === 0) parallaxDuration = 0;
- el.transition(parallaxDuration);
- });
- }
- };
-
-
- /*=========================
- Zoom
- ===========================*/
- s.zoom = {
- // "Global" Props
- scale: 1,
- currentScale: 1,
- isScaling: false,
- gesture: {
- slide: undefined,
- slideWidth: undefined,
- slideHeight: undefined,
- image: undefined,
- imageWrap: undefined,
- zoomMax: s.params.zoomMax
- },
- image: {
- isTouched: undefined,
- isMoved: undefined,
- currentX: undefined,
- currentY: undefined,
- minX: undefined,
- minY: undefined,
- maxX: undefined,
- maxY: undefined,
- width: undefined,
- height: undefined,
- startX: undefined,
- startY: undefined,
- touchesStart: {},
- touchesCurrent: {}
- },
- velocity: {
- x: undefined,
- y: undefined,
- prevPositionX: undefined,
- prevPositionY: undefined,
- prevTime: undefined
- },
- // Calc Scale From Multi-touches
- getDistanceBetweenTouches: function (e) {
- if (e.targetTouches.length < 2) return 1;
- var x1 = e.targetTouches[0].pageX,
- y1 = e.targetTouches[0].pageY,
- x2 = e.targetTouches[1].pageX,
- y2 = e.targetTouches[1].pageY;
- var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
- return distance;
- },
- // Events
- onGestureStart: function (e) {
- var z = s.zoom;
- if (!s.support.gestures) {
- if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
- return;
- }
- z.gesture.scaleStart = z.getDistanceBetweenTouches(e);
- }
- if (!z.gesture.slide || !z.gesture.slide.length) {
- z.gesture.slide = $(this);
- if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);
- z.gesture.image = z.gesture.slide.find('img, svg, canvas');
- z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);
- z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;
- if (z.gesture.imageWrap.length === 0) {
- z.gesture.image = undefined;
- return;
- }
- }
- z.gesture.image.transition(0);
- z.isScaling = true;
- },
- onGestureChange: function (e) {
- var z = s.zoom;
- if (!s.support.gestures) {
- if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
- return;
- }
- z.gesture.scaleMove = z.getDistanceBetweenTouches(e);
- }
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- if (s.support.gestures) {
- z.scale = e.scale * z.currentScale;
- }
- else {
- z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;
- }
- if (z.scale > z.gesture.zoomMax) {
- z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);
- }
- if (z.scale < s.params.zoomMin) {
- z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);
- }
- z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');
- },
- onGestureEnd: function (e) {
- var z = s.zoom;
- if (!s.support.gestures) {
- if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {
- return;
- }
- }
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);
- z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');
- z.currentScale = z.scale;
- z.isScaling = false;
- if (z.scale === 1) z.gesture.slide = undefined;
- },
- onTouchStart: function (s, e) {
- var z = s.zoom;
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- if (z.image.isTouched) return;
- if (s.device.os === 'android') e.preventDefault();
- z.image.isTouched = true;
- z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
- z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
- },
- onTouchMove: function (e) {
- var z = s.zoom;
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- s.allowClick = false;
- if (!z.image.isTouched || !z.gesture.slide) return;
-
- if (!z.image.isMoved) {
- z.image.width = z.gesture.image[0].offsetWidth;
- z.image.height = z.gesture.image[0].offsetHeight;
- z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;
- z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;
- z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;
- z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;
- z.gesture.imageWrap.transition(0);
- if (s.rtl) z.image.startX = -z.image.startX;
- if (s.rtl) z.image.startY = -z.image.startY;
- }
- // Define if we need image drag
- var scaledWidth = z.image.width * z.scale;
- var scaledHeight = z.image.height * z.scale;
-
- if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;
-
- z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);
- z.image.maxX = -z.image.minX;
- z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);
- z.image.maxY = -z.image.minY;
-
- z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
-
- if (!z.image.isMoved && !z.isScaling) {
- if (s.isHorizontal() &&
- (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||
- (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)
- ) {
- z.image.isTouched = false;
- return;
- }
- else if (!s.isHorizontal() &&
- (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||
- (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)
- ) {
- z.image.isTouched = false;
- return;
- }
- }
- e.preventDefault();
- e.stopPropagation();
-
- z.image.isMoved = true;
- z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;
- z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;
-
- if (z.image.currentX < z.image.minX) {
- z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);
- }
- if (z.image.currentX > z.image.maxX) {
- z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);
- }
-
- if (z.image.currentY < z.image.minY) {
- z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);
- }
- if (z.image.currentY > z.image.maxY) {
- z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);
- }
-
- //Velocity
- if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;
- if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;
- if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();
- z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;
- z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;
- if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;
- if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;
- z.velocity.prevPositionX = z.image.touchesCurrent.x;
- z.velocity.prevPositionY = z.image.touchesCurrent.y;
- z.velocity.prevTime = Date.now();
-
- z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');
- },
- onTouchEnd: function (s, e) {
- var z = s.zoom;
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- if (!z.image.isTouched || !z.image.isMoved) {
- z.image.isTouched = false;
- z.image.isMoved = false;
- return;
- }
- z.image.isTouched = false;
- z.image.isMoved = false;
- var momentumDurationX = 300;
- var momentumDurationY = 300;
- var momentumDistanceX = z.velocity.x * momentumDurationX;
- var newPositionX = z.image.currentX + momentumDistanceX;
- var momentumDistanceY = z.velocity.y * momentumDurationY;
- var newPositionY = z.image.currentY + momentumDistanceY;
-
- //Fix duration
- if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);
- if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);
- var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
-
- z.image.currentX = newPositionX;
- z.image.currentY = newPositionY;
-
- // Define if we need image drag
- var scaledWidth = z.image.width * z.scale;
- var scaledHeight = z.image.height * z.scale;
- z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);
- z.image.maxX = -z.image.minX;
- z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);
- z.image.maxY = -z.image.minY;
- z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);
- z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);
-
- z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');
- },
- onTransitionEnd: function (s) {
- var z = s.zoom;
- if (z.gesture.slide && s.previousIndex !== s.activeIndex) {
- z.gesture.image.transform('translate3d(0,0,0) scale(1)');
- z.gesture.imageWrap.transform('translate3d(0,0,0)');
- z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;
- z.scale = z.currentScale = 1;
- }
- },
- // Toggle Zoom
- toggleZoom: function (s, e) {
- var z = s.zoom;
- if (!z.gesture.slide) {
- z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);
- z.gesture.image = z.gesture.slide.find('img, svg, canvas');
- z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);
- }
- if (!z.gesture.image || z.gesture.image.length === 0) return;
-
- var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;
-
- if (typeof z.image.touchesStart.x === 'undefined' && e) {
- touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
- touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
- }
- else {
- touchX = z.image.touchesStart.x;
- touchY = z.image.touchesStart.y;
- }
-
- if (z.scale && z.scale !== 1) {
- // Zoom Out
- z.scale = z.currentScale = 1;
- z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');
- z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');
- z.gesture.slide = undefined;
- }
- else {
- // Zoom In
- z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;
- if (e) {
- slideWidth = z.gesture.slide[0].offsetWidth;
- slideHeight = z.gesture.slide[0].offsetHeight;
- offsetX = z.gesture.slide.offset().left;
- offsetY = z.gesture.slide.offset().top;
- diffX = offsetX + slideWidth/2 - touchX;
- diffY = offsetY + slideHeight/2 - touchY;
-
- imageWidth = z.gesture.image[0].offsetWidth;
- imageHeight = z.gesture.image[0].offsetHeight;
- scaledWidth = imageWidth * z.scale;
- scaledHeight = imageHeight * z.scale;
-
- translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0);
- translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0);
- translateMaxX = -translateMinX;
- translateMaxY = -translateMinY;
-
- translateX = diffX * z.scale;
- translateY = diffY * z.scale;
-
- if (translateX < translateMinX) {
- translateX = translateMinX;
- }
- if (translateX > translateMaxX) {
- translateX = translateMaxX;
- }
-
- if (translateY < translateMinY) {
- translateY = translateMinY;
- }
- if (translateY > translateMaxY) {
- translateY = translateMaxY;
- }
- }
- else {
- translateX = 0;
- translateY = 0;
- }
- z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');
- z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');
- }
- },
- // Attach/Detach Events
- attachEvents: function (detach) {
- var action = detach ? 'off' : 'on';
-
- if (s.params.zoom) {
- var target = s.slides;
- var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;
- // Scale image
- if (s.support.gestures) {
- s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);
- s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);
- s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);
- }
- else if (s.touchEvents.start === 'touchstart') {
- s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);
- s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);
- s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);
- }
-
- // Move image
- s[action]('touchStart', s.zoom.onTouchStart);
- s.slides.each(function (index, slide){
- if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {
- $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);
- }
- });
- s[action]('touchEnd', s.zoom.onTouchEnd);
-
- // Scale Out
- s[action]('transitionEnd', s.zoom.onTransitionEnd);
- if (s.params.zoomToggle) {
- s.on('doubleTap', s.zoom.toggleZoom);
- }
- }
- },
- init: function () {
- s.zoom.attachEvents();
- },
- destroy: function () {
- s.zoom.attachEvents(true);
- }
- };
-
-
- /*=========================
- Plugins API. Collect all and init all plugins
- ===========================*/
- s._plugins = [];
- for (var plugin in s.plugins) {
- var p = s.plugins[plugin](s, s.params[plugin]);
- if (p) s._plugins.push(p);
- }
- // Method to call all plugins event/method
- s.callPlugins = function (eventName) {
- for (var i = 0; i < s._plugins.length; i++) {
- if (eventName in s._plugins[i]) {
- s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- }
- };
-
-
- /*=========================
- Events/Callbacks/Plugins Emitter
- ===========================*/
- function normalizeEventName (eventName) {
- if (eventName.indexOf('on') !== 0) {
- if (eventName[0] !== eventName[0].toUpperCase()) {
- eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);
- }
- else {
- eventName = 'on' + eventName;
- }
- }
- return eventName;
- }
- s.emitterEventListeners = {
-
- };
- s.emit = function (eventName) {
- // Trigger callbacks
- if (s.params[eventName]) {
- s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- var i;
- // Trigger events
- if (s.emitterEventListeners[eventName]) {
- for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {
- s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- }
- // Trigger plugins
- if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- };
- s.on = function (eventName, handler) {
- eventName = normalizeEventName(eventName);
- if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];
- s.emitterEventListeners[eventName].push(handler);
- return s;
- };
- s.off = function (eventName, handler) {
- var i;
- eventName = normalizeEventName(eventName);
- if (typeof handler === 'undefined') {
- // Remove all handlers for such event
- s.emitterEventListeners[eventName] = [];
- return s;
- }
- if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;
- for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {
- if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);
- }
- return s;
- };
- s.once = function (eventName, handler) {
- eventName = normalizeEventName(eventName);
- var _handler = function () {
- handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
- s.off(eventName, _handler);
- };
- s.on(eventName, _handler);
- return s;
- };
-
-
- // Accessibility tools
- s.a11y = {
- makeFocusable: function ($el) {
- $el.attr('tabIndex', '0');
- return $el;
- },
- addRole: function ($el, role) {
- $el.attr('role', role);
- return $el;
- },
-
- addLabel: function ($el, label) {
- $el.attr('aria-label', label);
- return $el;
- },
-
- disable: function ($el) {
- $el.attr('aria-disabled', true);
- return $el;
- },
-
- enable: function ($el) {
- $el.attr('aria-disabled', false);
- return $el;
- },
-
- onEnterKey: function (event) {
- if (event.keyCode !== 13) return;
- if ($(event.target).is(s.params.nextButton)) {
- s.onClickNext(event);
- if (s.isEnd) {
- s.a11y.notify(s.params.lastSlideMessage);
- }
- else {
- s.a11y.notify(s.params.nextSlideMessage);
- }
- }
- else if ($(event.target).is(s.params.prevButton)) {
- s.onClickPrev(event);
- if (s.isBeginning) {
- s.a11y.notify(s.params.firstSlideMessage);
- }
- else {
- s.a11y.notify(s.params.prevSlideMessage);
- }
- }
- if ($(event.target).is('.' + s.params.bulletClass)) {
- $(event.target)[0].click();
- }
- },
-
- liveRegion: $(''),
-
- notify: function (message) {
- var notification = s.a11y.liveRegion;
- if (notification.length === 0) return;
- notification.html('');
- notification.html(message);
- },
- init: function () {
- // Setup accessibility
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.a11y.makeFocusable(s.nextButton);
- s.a11y.addRole(s.nextButton, 'button');
- s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.a11y.makeFocusable(s.prevButton);
- s.a11y.addRole(s.prevButton, 'button');
- s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);
- }
-
- $(s.container).append(s.a11y.liveRegion);
- },
- initPagination: function () {
- if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {
- s.bullets.each(function () {
- var bullet = $(this);
- s.a11y.makeFocusable(bullet);
- s.a11y.addRole(bullet, 'button');
- s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));
- });
- }
- },
- destroy: function () {
- if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();
- }
- };
-
-
- /*=========================
- Init/Destroy
- ===========================*/
- s.init = function () {
- if (s.params.loop) s.createLoop();
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updatePagination();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- if (s.params.scrollbarDraggable) {
- s.scrollbar.enableDraggable();
- }
- }
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- if (!s.params.loop) s.updateProgress();
- s.effects[s.params.effect].setTranslate();
- }
- if (s.params.loop) {
- s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);
- }
- else {
- s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);
- if (s.params.initialSlide === 0) {
- if (s.parallax && s.params.parallax) s.parallax.setTranslate();
- if (s.lazy && s.params.lazyLoading) {
- s.lazy.load();
- s.lazy.initialImageLoaded = true;
- }
- }
- }
- s.attachEvents();
- if (s.params.observer && s.support.observer) {
- s.initObservers();
- }
- if (s.params.preloadImages && !s.params.lazyLoading) {
- s.preloadImages();
- }
- if (s.params.zoom && s.zoom) {
- s.zoom.init();
- }
- if (s.params.autoplay) {
- s.startAutoplay();
- }
- if (s.params.keyboardControl) {
- if (s.enableKeyboardControl) s.enableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.enableMousewheelControl) s.enableMousewheelControl();
- }
- // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history
- if (s.params.hashnavReplaceState) {
- s.params.replaceState = s.params.hashnavReplaceState;
- }
- if (s.params.history) {
- if (s.history) s.history.init();
- }
- if (s.params.hashnav) {
- if (s.hashnav) s.hashnav.init();
- }
- if (s.params.a11y && s.a11y) s.a11y.init();
- s.emit('onInit', s);
- };
-
- // Cleanup dynamic styles
- s.cleanupStyles = function () {
- // Container
- s.container.removeClass(s.classNames.join(' ')).removeAttr('style');
-
- // Wrapper
- s.wrapper.removeAttr('style');
-
- // Slides
- if (s.slides && s.slides.length) {
- s.slides
- .removeClass([
- s.params.slideVisibleClass,
- s.params.slideActiveClass,
- s.params.slideNextClass,
- s.params.slidePrevClass
- ].join(' '))
- .removeAttr('style')
- .removeAttr('data-swiper-column')
- .removeAttr('data-swiper-row');
- }
-
- // Pagination/Bullets
- if (s.paginationContainer && s.paginationContainer.length) {
- s.paginationContainer.removeClass(s.params.paginationHiddenClass);
- }
- if (s.bullets && s.bullets.length) {
- s.bullets.removeClass(s.params.bulletActiveClass);
- }
-
- // Buttons
- if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);
- if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);
-
- // Scrollbar
- if (s.params.scrollbar && s.scrollbar) {
- if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');
- if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');
- }
- };
-
- // Destroy
- s.destroy = function (deleteInstance, cleanupStyles) {
- // Detach evebts
- s.detachEvents();
- // Stop autoplay
- s.stopAutoplay();
- // Disable draggable
- if (s.params.scrollbar && s.scrollbar) {
- if (s.params.scrollbarDraggable) {
- s.scrollbar.disableDraggable();
- }
- }
- // Destroy loop
- if (s.params.loop) {
- s.destroyLoop();
- }
- // Cleanup styles
- if (cleanupStyles) {
- s.cleanupStyles();
- }
- // Disconnect observer
- s.disconnectObservers();
-
- // Destroy zoom
- if (s.params.zoom && s.zoom) {
- s.zoom.destroy();
- }
- // Disable keyboard/mousewheel
- if (s.params.keyboardControl) {
- if (s.disableKeyboardControl) s.disableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.disableMousewheelControl) s.disableMousewheelControl();
- }
- // Disable a11y
- if (s.params.a11y && s.a11y) s.a11y.destroy();
- // Delete history popstate
- if (s.params.history && !s.params.replaceState) {
- window.removeEventListener('popstate', s.history.setHistoryPopState);
- }
- if (s.params.hashnav && s.hashnav) {
- s.hashnav.destroy();
- }
- // Destroy callback
- s.emit('onDestroy');
- // Delete instance
- if (deleteInstance !== false) s = null;
- };
-
- s.init();
-
-
-
- // Return swiper instance
- return s;
+ var staticAccessors = {
+ extendedDefaults: { configurable: true },
+ defaults: { configurable: true },
+ Class: { configurable: true },
+ $: { configurable: true }
};
-
-
- /*==================================================
- Prototype
- ====================================================*/
- Swiper.prototype = {
- isSafari: (function () {
- var ua = window.navigator.userAgent.toLowerCase();
- return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
- })(),
- isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),
- isArray: function (arr) {
- return Object.prototype.toString.apply(arr) === '[object Array]';
- },
- /*==================================================
- Browser
- ====================================================*/
- browser: {
- ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,
- ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),
- lteIE9: (function() {
- // create temporary DIV
- var div = document.createElement('div');
- // add content to tmp DIV which is wrapped into the IE HTML conditional statement
- div.innerHTML = '';
- // return true / false value based on what will browser render
- return div.getElementsByTagName('i').length === 1;
- })()
- },
- /*==================================================
- Devices
- ====================================================*/
- device: (function () {
- var ua = window.navigator.userAgent;
- var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
- var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
- var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
- var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
- return {
- ios: ipad || iphone || ipod,
- android: android
- };
- })(),
- /*==================================================
- Feature Detection
- ====================================================*/
- support: {
- touch : (window.Modernizr && Modernizr.touch === true) || (function () {
- return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);
- })(),
-
- transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {
- var div = document.createElement('div').style;
- return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);
- })(),
-
- flexbox: (function () {
- var div = document.createElement('div').style;
- var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');
- for (var i = 0; i < styles.length; i++) {
- if (styles[i] in div) return true;
- }
- })(),
-
- observer: (function () {
- return ('MutationObserver' in window || 'WebkitMutationObserver' in window);
- })(),
-
- passiveListener: (function () {
- var supportsPassive = false;
- try {
- var opts = Object.defineProperty({}, 'passive', {
- get: function() {
- supportsPassive = true;
- }
- });
- window.addEventListener('testPassiveListener', null, opts);
- } catch (e) {}
- return supportsPassive;
- })(),
-
- gestures: (function () {
- return 'ongesturestart' in window;
- })()
- },
- /*==================================================
- Plugins
- ====================================================*/
- plugins: {}
+ 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();
- /*===========================
- Dom7 Library
- ===========================*/
- var Dom7 = (function () {
- var Dom7 = function (arr) {
- var _this = this, i = 0;
- // Create array-like object
- for (i = 0; i < arr.length; i++) {
- _this[i] = arr[i];
- }
- _this.length = arr.length;
- // Return collection with methods
- return this;
- };
- var $ = function (selector, context) {
- var arr = [], i = 0;
- if (selector && !context) {
- if (selector instanceof Dom7) {
- return selector;
- }
- }
- if (selector) {
- // String
- if (typeof selector === 'string') {
- var els, tempParent, html = selector.trim();
- if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
- var toCreate = 'div';
- if (html.indexOf(':~]/)) {
- // Pure ID selector
- els = [document.getElementById(selector.split('#')[1])];
- }
- else {
- // Other selectors
- els = (context || document).querySelectorAll(selector);
- }
- for (i = 0; i < els.length; i++) {
- if (els[i]) arr.push(els[i]);
- }
- }
- }
- // Node/element
- else if (selector.nodeType || selector === window || selector === document) {
- arr.push(selector);
- }
- //Array of elements or instance of Dom
- else if (selector.length > 0 && selector[0].nodeType) {
- for (i = 0; i < selector.length; i++) {
- arr.push(selector[i]);
- }
- }
- }
- return new Dom7(arr);
- };
- Dom7.prototype = {
- // Classes and attriutes
- addClass: function (className) {
- if (typeof className === 'undefined') {
- return this;
- }
- var classes = className.split(' ');
- for (var i = 0; i < classes.length; i++) {
- for (var j = 0; j < this.length; j++) {
- this[j].classList.add(classes[i]);
- }
- }
- return this;
- },
- removeClass: function (className) {
- var classes = className.split(' ');
- for (var i = 0; i < classes.length; i++) {
- for (var j = 0; j < this.length; j++) {
- this[j].classList.remove(classes[i]);
- }
- }
- return this;
- },
- hasClass: function (className) {
- if (!this[0]) return false;
- else return this[0].classList.contains(className);
- },
- toggleClass: function (className) {
- var classes = className.split(' ');
- for (var i = 0; i < classes.length; i++) {
- for (var j = 0; j < this.length; j++) {
- this[j].classList.toggle(classes[i]);
- }
- }
- return this;
- },
- attr: function (attrs, value) {
- if (arguments.length === 1 && typeof attrs === 'string') {
- // Get attr
- if (this[0]) return this[0].getAttribute(attrs);
- else return undefined;
- }
- else {
- // Set attrs
- for (var i = 0; i < this.length; i++) {
- if (arguments.length === 2) {
- // String
- this[i].setAttribute(attrs, value);
- }
- else {
- // Object
- for (var attrName in attrs) {
- this[i][attrName] = attrs[attrName];
- this[i].setAttribute(attrName, attrs[attrName]);
- }
- }
- }
- return this;
- }
- },
- removeAttr: function (attr) {
- for (var i = 0; i < this.length; i++) {
- this[i].removeAttribute(attr);
- }
- return this;
- },
- data: function (key, value) {
- if (typeof value === 'undefined') {
- // Get value
- if (this[0]) {
- var dataKey = this[0].getAttribute('data-' + key);
- if (dataKey) return dataKey;
- else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];
- else return undefined;
- }
- else return undefined;
- }
- else {
- // Set value
- for (var i = 0; i < this.length; i++) {
- var el = this[i];
- if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};
- el.dom7ElementDataStorage[key] = value;
- }
- return this;
- }
- },
- // Transforms
- transform : function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- },
- transition: function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- },
- //Events
- on: function (eventName, targetSelector, listener, capture) {
- function handleLiveEvent(e) {
- var target = e.target;
- if ($(target).is(targetSelector)) listener.call(target, e);
- else {
- var parents = $(target).parents();
- for (var k = 0; k < parents.length; k++) {
- if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);
- }
- }
- }
- var events = eventName.split(' ');
- var i, j;
- for (i = 0; i < this.length; i++) {
- if (typeof targetSelector === 'function' || targetSelector === false) {
- // Usual events
- if (typeof targetSelector === 'function') {
- listener = arguments[1];
- capture = arguments[2] || false;
- }
- for (j = 0; j < events.length; j++) {
- this[i].addEventListener(events[j], listener, capture);
- }
- }
- else {
- //Live events
- for (j = 0; j < events.length; j++) {
- if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];
- this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});
- this[i].addEventListener(events[j], handleLiveEvent, capture);
- }
- }
- }
-
- return this;
- },
- off: function (eventName, targetSelector, listener, capture) {
- var events = eventName.split(' ');
- for (var i = 0; i < events.length; i++) {
- for (var j = 0; j < this.length; j++) {
- if (typeof targetSelector === 'function' || targetSelector === false) {
- // Usual events
- if (typeof targetSelector === 'function') {
- listener = arguments[1];
- capture = arguments[2] || false;
- }
- this[j].removeEventListener(events[i], listener, capture);
- }
- else {
- // Live event
- if (this[j].dom7LiveListeners) {
- for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {
- if (this[j].dom7LiveListeners[k].listener === listener) {
- this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);
- }
- }
- }
- }
- }
- }
- return this;
- },
- once: function (eventName, targetSelector, listener, capture) {
- var dom = this;
- if (typeof targetSelector === 'function') {
- targetSelector = false;
- listener = arguments[1];
- capture = arguments[2];
- }
- function proxy(e) {
- listener(e);
- dom.off(eventName, targetSelector, proxy, capture);
- }
- dom.on(eventName, targetSelector, proxy, capture);
- },
- trigger: function (eventName, eventData) {
- for (var i = 0; i < this.length; i++) {
- var evt;
- try {
- evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});
- }
- catch (e) {
- evt = document.createEvent('Event');
- evt.initEvent(eventName, true, true);
- evt.detail = eventData;
- }
- this[i].dispatchEvent(evt);
- }
- return this;
- },
- transitionEnd: function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- },
- // Sizing/Styles
- width: function () {
- if (this[0] === window) {
- return window.innerWidth;
- }
- else {
- if (this.length > 0) {
- return parseFloat(this.css('width'));
- }
- else {
- return null;
- }
- }
- },
- outerWidth: function (includeMargins) {
- if (this.length > 0) {
- if (includeMargins)
- return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));
- else
- return this[0].offsetWidth;
- }
- else return null;
- },
- height: function () {
- if (this[0] === window) {
- return window.innerHeight;
- }
- else {
- if (this.length > 0) {
- return parseFloat(this.css('height'));
- }
- else {
- return null;
- }
- }
- },
- outerHeight: function (includeMargins) {
- if (this.length > 0) {
- if (includeMargins)
- return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));
- else
- return this[0].offsetHeight;
- }
- else return null;
- },
- offset: function () {
- if (this.length > 0) {
- var el = this[0];
- var box = el.getBoundingClientRect();
- var body = document.body;
- var clientTop = el.clientTop || body.clientTop || 0;
- var clientLeft = el.clientLeft || body.clientLeft || 0;
- var scrollTop = window.pageYOffset || el.scrollTop;
- var scrollLeft = window.pageXOffset || el.scrollLeft;
- return {
- top: box.top + scrollTop - clientTop,
- left: box.left + scrollLeft - clientLeft
- };
- }
- else {
- return null;
- }
- },
- css: function (props, value) {
- var i;
- if (arguments.length === 1) {
- if (typeof props === 'string') {
- if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);
- }
- else {
- for (i = 0; i < this.length; i++) {
- for (var prop in props) {
- this[i].style[prop] = props[prop];
- }
- }
- return this;
- }
- }
- if (arguments.length === 2 && typeof props === 'string') {
- for (i = 0; i < this.length; i++) {
- this[i].style[props] = value;
- }
- return this;
- }
- return this;
- },
-
- //Dom manipulation
- each: function (callback) {
- for (var i = 0; i < this.length; i++) {
- callback.call(this[i], i, this[i]);
- }
- return this;
- },
- html: function (html) {
- if (typeof html === 'undefined') {
- return this[0] ? this[0].innerHTML : undefined;
- }
- else {
- for (var i = 0; i < this.length; i++) {
- this[i].innerHTML = html;
- }
- return this;
- }
- },
- text: function (text) {
- if (typeof text === 'undefined') {
- if (this[0]) {
- return this[0].textContent.trim();
- }
- else return null;
- }
- else {
- for (var i = 0; i < this.length; i++) {
- this[i].textContent = text;
- }
- return this;
- }
- },
- is: function (selector) {
- if (!this[0]) return false;
- var compareWith, i;
- if (typeof selector === 'string') {
- var el = this[0];
- if (el === document) return selector === document;
- if (el === window) return selector === window;
-
- if (el.matches) return el.matches(selector);
- else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);
- else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);
- else if (el.msMatchesSelector) return el.msMatchesSelector(selector);
- else {
- compareWith = $(selector);
- for (i = 0; i < compareWith.length; i++) {
- if (compareWith[i] === this[0]) return true;
- }
- return false;
- }
- }
- else if (selector === document) return this[0] === document;
- else if (selector === window) return this[0] === window;
- else {
- if (selector.nodeType || selector instanceof Dom7) {
- compareWith = selector.nodeType ? [selector] : selector;
- for (i = 0; i < compareWith.length; i++) {
- if (compareWith[i] === this[0]) return true;
- }
- return false;
- }
- return false;
- }
-
- },
- index: function () {
- if (this[0]) {
- var child = this[0];
- var i = 0;
- while ((child = child.previousSibling) !== null) {
- if (child.nodeType === 1) i++;
- }
- return i;
- }
- else return undefined;
- },
- eq: function (index) {
- if (typeof index === 'undefined') return this;
- var length = this.length;
- var returnIndex;
- if (index > length - 1) {
- return new Dom7([]);
- }
- if (index < 0) {
- returnIndex = length + index;
- if (returnIndex < 0) return new Dom7([]);
- else return new Dom7([this[returnIndex]]);
- }
- return new Dom7([this[index]]);
- },
- append: function (newChild) {
- var i, j;
- for (i = 0; i < this.length; i++) {
- if (typeof newChild === 'string') {
- var tempDiv = document.createElement('div');
- tempDiv.innerHTML = newChild;
- while (tempDiv.firstChild) {
- this[i].appendChild(tempDiv.firstChild);
- }
- }
- else if (newChild instanceof Dom7) {
- for (j = 0; j < newChild.length; j++) {
- this[i].appendChild(newChild[j]);
- }
- }
- else {
- this[i].appendChild(newChild);
- }
- }
- return this;
- },
- prepend: function (newChild) {
- var i, j;
- for (i = 0; i < this.length; i++) {
- if (typeof newChild === 'string') {
- var tempDiv = document.createElement('div');
- tempDiv.innerHTML = newChild;
- for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {
- this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
- }
- // this[i].insertAdjacentHTML('afterbegin', newChild);
- }
- else if (newChild instanceof Dom7) {
- for (j = 0; j < newChild.length; j++) {
- this[i].insertBefore(newChild[j], this[i].childNodes[0]);
- }
- }
- else {
- this[i].insertBefore(newChild, this[i].childNodes[0]);
- }
- }
- return this;
- },
- insertBefore: function (selector) {
- var before = $(selector);
- for (var i = 0; i < this.length; i++) {
- if (before.length === 1) {
- before[0].parentNode.insertBefore(this[i], before[0]);
- }
- else if (before.length > 1) {
- for (var j = 0; j < before.length; j++) {
- before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);
- }
- }
- }
- },
- insertAfter: function (selector) {
- var after = $(selector);
- for (var i = 0; i < this.length; i++) {
- if (after.length === 1) {
- after[0].parentNode.insertBefore(this[i], after[0].nextSibling);
- }
- else if (after.length > 1) {
- for (var j = 0; j < after.length; j++) {
- after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);
- }
- }
- }
- },
- next: function (selector) {
- if (this.length > 0) {
- if (selector) {
- if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);
- else return new Dom7([]);
- }
- else {
- if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);
- else return new Dom7([]);
- }
- }
- else return new Dom7([]);
- },
- nextAll: function (selector) {
- var nextEls = [];
- var el = this[0];
- if (!el) return new Dom7([]);
- while (el.nextElementSibling) {
- var next = el.nextElementSibling;
- if (selector) {
- if($(next).is(selector)) nextEls.push(next);
- }
- else nextEls.push(next);
- el = next;
- }
- return new Dom7(nextEls);
- },
- prev: function (selector) {
- if (this.length > 0) {
- if (selector) {
- if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);
- else return new Dom7([]);
- }
- else {
- if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);
- else return new Dom7([]);
- }
- }
- else return new Dom7([]);
- },
- prevAll: function (selector) {
- var prevEls = [];
- var el = this[0];
- if (!el) return new Dom7([]);
- while (el.previousElementSibling) {
- var prev = el.previousElementSibling;
- if (selector) {
- if($(prev).is(selector)) prevEls.push(prev);
- }
- else prevEls.push(prev);
- el = prev;
- }
- return new Dom7(prevEls);
- },
- parent: function (selector) {
- var parents = [];
- for (var i = 0; i < this.length; i++) {
- if (selector) {
- if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
- }
- else {
- parents.push(this[i].parentNode);
- }
- }
- return $($.unique(parents));
- },
- parents: function (selector) {
- var parents = [];
- for (var i = 0; i < this.length; i++) {
- var parent = this[i].parentNode;
- while (parent) {
- if (selector) {
- if ($(parent).is(selector)) parents.push(parent);
- }
- else {
- parents.push(parent);
- }
- parent = parent.parentNode;
- }
- }
- return $($.unique(parents));
- },
- find : function (selector) {
- var foundElements = [];
- for (var i = 0; i < this.length; i++) {
- var found = this[i].querySelectorAll(selector);
- for (var j = 0; j < found.length; j++) {
- foundElements.push(found[j]);
- }
- }
- return new Dom7(foundElements);
- },
- children: function (selector) {
- var children = [];
- for (var i = 0; i < this.length; i++) {
- var childNodes = this[i].childNodes;
-
- for (var j = 0; j < childNodes.length; j++) {
- if (!selector) {
- if (childNodes[j].nodeType === 1) children.push(childNodes[j]);
- }
- else {
- if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);
- }
- }
- }
- return new Dom7($.unique(children));
- },
- remove: function () {
- for (var i = 0; i < this.length; i++) {
- if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
- }
- return this;
- },
- add: function () {
- var dom = this;
- var i, j;
- for (i = 0; i < arguments.length; i++) {
- var toAdd = $(arguments[i]);
- for (j = 0; j < toAdd.length; j++) {
- dom[dom.length] = toAdd[j];
- dom.length++;
- }
- }
- return dom;
- }
- };
- $.fn = Dom7.prototype;
- $.unique = function (arr) {
- var unique = [];
- for (var i = 0; i < arr.length; i++) {
- if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);
- }
- return unique;
- };
-
- return $;
- })();
-
+ 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;
+ }
- /*===========================
- Get Dom libraries
- ===========================*/
- var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];
- for (var i = 0; i < swiperDomPlugins.length; i++) {
- if (window[swiperDomPlugins[i]]) {
- addLibraryPlugin(window[swiperDomPlugins[i]]);
- }
- }
- // Required DOM Plugins
- var domLib;
- if (typeof Dom7 === 'undefined') {
- domLib = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- domLib = Dom7;
- }
-
+ swiper.emit('beforeInit');
- /*===========================
- Add .swiper plugin from Dom libraries
- ===========================*/
- function addLibraryPlugin(lib) {
- lib.fn.swiper = function (params) {
- var firstInstance;
- lib(this).each(function () {
- var s = new Swiper(this, params);
- if (!firstInstance) firstInstance = s;
- });
- return firstInstance;
- };
+ // 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
}
-
- if (domLib) {
- if (!('transitionEnd' in domLib.fn)) {
- domLib.fn.transitionEnd = function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- };
+ };
+
+ 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');
+ }
}
- if (!('transform' in domLib.fn)) {
- domLib.fn.transform = function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- };
+ });
+ },
+ 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) {
+ mutations.forEach(function(mutation) {
+ swiper.emit('observerUpdate', mutation);
+ });
+ });
+
+ observer.observe(target, {
+ attributes:
+ typeof options.attributes === 'undefined' ? true : options.attributes,
+ childList:
+ typeof options.childList === 'undefined' ? true : options.childList,
+ characterData:
+ typeof options.characterData === 'undefined'
+ ? true
+ : options.characterData
+ });
+
+ 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]);
}
- if (!('transition' in domLib.fn)) {
- domLib.fn.transition = function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- };
+ }
+ // 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: []
}
- if (!('outerWidth' in domLib.fn)) {
- domLib.fn.outerWidth = function (includeMargins) {
- if (this.length > 0) {
- if (includeMargins)
- return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));
- else
- return this[0].offsetWidth;
- }
- else return null;
- };
+ });
+ },
+ 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.virtual;
+ var previousFrom = ref$1.from;
+ var previousTo = ref$1.to;
+ var slides = ref$1.slides;
+ var previousSlidesGrid = ref$1.slidesGrid;
+ var renderSlide = ref$1.renderSlide;
+ var previousOffset = ref$1.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;
+ slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup;
+ } else {
+ slidesAfter = slidesPerView + (slidesPerGroup - 1);
+ slidesBefore = slidesPerGroup;
+ }
+ 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
+ }
+ },
+ 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.stopAutoplay();
+ }
+ // 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(current + 1);
+ $el.find('.' + params.totalClass).text(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 +
+ '">' +
+ params.bulletElement +
+ '>';
+ }
+ }
+ $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,
+ 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.passiveListener
+ ? { passive: false, capture: false }
+ : false;
+ var passiveListener =
+ Support.passiveListener && params.passiveListener
+ ? { 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.passiveListener
+ ? { passive: false, capture: false }
+ : false;
+ var passiveListener =
+ Support.passiveListener && params.passiveListener
+ ? { 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;
+ },
+ 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;
+ } else 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();
+ 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) {
+ swiper.slideTo(
+ swiper.$wrapperEl
+ .children(
+ '.' + swiper.params.slideClass + '[data-hash="' + newHash + '"]'
+ )
+ .index()
+ );
+ }
+ },
+ 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);
+ }
+ }
+ };
+
+ // 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
+ ];
+
+ if (typeof Swiper.use === 'undefined') {
+ Swiper.use = Swiper.Class.use;
+ Swiper.installModule = Swiper.Class.installModule;
+ }
+
+ Swiper.use(components);
+
+ return Swiper;
})();
export { Swiper };