diff --git a/dashboard-ui/bower_components/Swiper/.bower.json b/dashboard-ui/bower_components/Swiper/.bower.json
index 27cc89b597..53f7c464e3 100644
--- a/dashboard-ui/bower_components/Swiper/.bower.json
+++ b/dashboard-ui/bower_components/Swiper/.bower.json
@@ -51,7 +51,7 @@
"tag": "v3.3.1",
"commit": "33101a659e579146f5462e4a9d6a7fdfd7436c35"
},
- "_source": "git://github.com/nolimits4web/Swiper.git",
+ "_source": "https://github.com/nolimits4web/Swiper.git",
"_target": "~3.3.0",
"_originalSource": "swiper"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/css/swiper.css b/dashboard-ui/bower_components/Swiper/dist/css/swiper.css
deleted file mode 100644
index 96633d6542..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/css/swiper.css
+++ /dev/null
@@ -1,547 +0,0 @@
-/**
- * Swiper 3.3.1
- * Most modern mobile touch slider and framework with hardware accelerated transitions
- *
- * http://www.idangero.us/swiper/
- *
- * Copyright 2016, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
- *
- * Licensed under MIT
- *
- * Released on: February 7, 2016
- */
-.swiper-container {
- margin: 0 auto;
- position: relative;
- overflow: hidden;
- /* Fix of Webkit flickering */
- z-index: 1;
-}
-.swiper-container-no-flexbox .swiper-slide {
- float: left;
-}
-.swiper-container-vertical > .swiper-wrapper {
- -webkit-box-orient: vertical;
- -moz-box-orient: vertical;
- -ms-flex-direction: column;
- -webkit-flex-direction: column;
- flex-direction: column;
-}
-.swiper-wrapper {
- position: relative;
- width: 100%;
- height: 100%;
- z-index: 1;
- display: -webkit-box;
- display: -moz-box;
- display: -ms-flexbox;
- display: -webkit-flex;
- display: flex;
- -webkit-transition-property: -webkit-transform;
- -moz-transition-property: -moz-transform;
- -o-transition-property: -o-transform;
- -ms-transition-property: -ms-transform;
- transition-property: transform;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-.swiper-container-android .swiper-slide,
-.swiper-wrapper {
- -webkit-transform: translate3d(0px, 0, 0);
- -moz-transform: translate3d(0px, 0, 0);
- -o-transform: translate(0px, 0px);
- -ms-transform: translate3d(0px, 0, 0);
- transform: translate3d(0px, 0, 0);
-}
-.swiper-container-multirow > .swiper-wrapper {
- -webkit-box-lines: multiple;
- -moz-box-lines: multiple;
- -ms-flex-wrap: wrap;
- -webkit-flex-wrap: wrap;
- flex-wrap: wrap;
-}
-.swiper-container-free-mode > .swiper-wrapper {
- -webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
- -o-transition-timing-function: ease-out;
- transition-timing-function: ease-out;
- margin: 0 auto;
-}
-.swiper-slide {
- -webkit-flex-shrink: 0;
- -ms-flex: 0 0 auto;
- flex-shrink: 0;
- width: 100%;
- height: 100%;
- position: relative;
-}
-/* Auto Height */
-.swiper-container-autoheight,
-.swiper-container-autoheight .swiper-slide {
- height: auto;
-}
-.swiper-container-autoheight .swiper-wrapper {
- -webkit-box-align: start;
- -ms-flex-align: start;
- -webkit-align-items: flex-start;
- align-items: flex-start;
- -webkit-transition-property: -webkit-transform, height;
- -moz-transition-property: -moz-transform;
- -o-transition-property: -o-transform;
- -ms-transition-property: -ms-transform;
- transition-property: transform, height;
-}
-/* a11y */
-.swiper-container .swiper-notification {
- position: absolute;
- left: 0;
- top: 0;
- pointer-events: none;
- opacity: 0;
- z-index: -1000;
-}
-/* IE10 Windows Phone 8 Fixes */
-.swiper-wp8-horizontal {
- -ms-touch-action: pan-y;
- touch-action: pan-y;
-}
-.swiper-wp8-vertical {
- -ms-touch-action: pan-x;
- touch-action: pan-x;
-}
-/* Arrows */
-.swiper-button-prev,
-.swiper-button-next {
- position: absolute;
- top: 50%;
- width: 27px;
- height: 44px;
- margin-top: -22px;
- z-index: 10;
- cursor: pointer;
- -moz-background-size: 27px 44px;
- -webkit-background-size: 27px 44px;
- background-size: 27px 44px;
- background-position: center;
- background-repeat: no-repeat;
-}
-.swiper-button-prev.swiper-button-disabled,
-.swiper-button-next.swiper-button-disabled {
- opacity: 0.35;
- cursor: auto;
- pointer-events: none;
-}
-.swiper-button-prev,
-.swiper-container-rtl .swiper-button-next {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
- left: 10px;
- right: auto;
-}
-.swiper-button-prev.swiper-button-black,
-.swiper-container-rtl .swiper-button-next.swiper-button-black {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
-}
-.swiper-button-prev.swiper-button-white,
-.swiper-container-rtl .swiper-button-next.swiper-button-white {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
-}
-.swiper-button-next,
-.swiper-container-rtl .swiper-button-prev {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
- right: 10px;
- left: auto;
-}
-.swiper-button-next.swiper-button-black,
-.swiper-container-rtl .swiper-button-prev.swiper-button-black {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
-}
-.swiper-button-next.swiper-button-white,
-.swiper-container-rtl .swiper-button-prev.swiper-button-white {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
-}
-/* Pagination Styles */
-.swiper-pagination {
- position: absolute;
- text-align: center;
- -webkit-transition: 300ms;
- -moz-transition: 300ms;
- -o-transition: 300ms;
- transition: 300ms;
- -webkit-transform: translate3d(0, 0, 0);
- -ms-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- z-index: 10;
-}
-.swiper-pagination.swiper-pagination-hidden {
- opacity: 0;
-}
-/* Common Styles */
-.swiper-pagination-fraction,
-.swiper-pagination-custom,
-.swiper-container-horizontal > .swiper-pagination-bullets {
- bottom: 10px;
- left: 0;
- width: 100%;
-}
-/* Bullets */
-.swiper-pagination-bullet {
- width: 8px;
- height: 8px;
- display: inline-block;
- border-radius: 100%;
- background: #000;
- opacity: 0.2;
-}
-button.swiper-pagination-bullet {
- border: none;
- margin: 0;
- padding: 0;
- box-shadow: none;
- -moz-appearance: none;
- -ms-appearance: none;
- -webkit-appearance: none;
- appearance: none;
-}
-.swiper-pagination-clickable .swiper-pagination-bullet {
- cursor: pointer;
-}
-.swiper-pagination-white .swiper-pagination-bullet {
- background: #fff;
-}
-.swiper-pagination-bullet-active {
- opacity: 1;
- background: #007aff;
-}
-.swiper-pagination-white .swiper-pagination-bullet-active {
- background: #fff;
-}
-.swiper-pagination-black .swiper-pagination-bullet-active {
- background: #000;
-}
-.swiper-container-vertical > .swiper-pagination-bullets {
- right: 10px;
- top: 50%;
- -webkit-transform: translate3d(0px, -50%, 0);
- -moz-transform: translate3d(0px, -50%, 0);
- -o-transform: translate(0px, -50%);
- -ms-transform: translate3d(0px, -50%, 0);
- transform: translate3d(0px, -50%, 0);
-}
-.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
- margin: 5px 0;
- display: block;
-}
-.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
- margin: 0 5px;
-}
-/* Progress */
-.swiper-pagination-progress {
- background: rgba(0, 0, 0, 0.25);
- position: absolute;
-}
-.swiper-pagination-progress .swiper-pagination-progressbar {
- background: #007aff;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- -webkit-transform: scale(0);
- -ms-transform: scale(0);
- -o-transform: scale(0);
- transform: scale(0);
- -webkit-transform-origin: left top;
- -moz-transform-origin: left top;
- -ms-transform-origin: left top;
- -o-transform-origin: left top;
- transform-origin: left top;
-}
-.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
- -webkit-transform-origin: right top;
- -moz-transform-origin: right top;
- -ms-transform-origin: right top;
- -o-transform-origin: right top;
- transform-origin: right top;
-}
-.swiper-container-horizontal > .swiper-pagination-progress {
- width: 100%;
- height: 4px;
- left: 0;
- top: 0;
-}
-.swiper-container-vertical > .swiper-pagination-progress {
- width: 4px;
- height: 100%;
- left: 0;
- top: 0;
-}
-.swiper-pagination-progress.swiper-pagination-white {
- background: rgba(255, 255, 255, 0.5);
-}
-.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
- background: #fff;
-}
-.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
- background: #000;
-}
-/* 3D Container */
-.swiper-container-3d {
- -webkit-perspective: 1200px;
- -moz-perspective: 1200px;
- -o-perspective: 1200px;
- perspective: 1200px;
-}
-.swiper-container-3d .swiper-wrapper,
-.swiper-container-3d .swiper-slide,
-.swiper-container-3d .swiper-slide-shadow-left,
-.swiper-container-3d .swiper-slide-shadow-right,
-.swiper-container-3d .swiper-slide-shadow-top,
-.swiper-container-3d .swiper-slide-shadow-bottom,
-.swiper-container-3d .swiper-cube-shadow {
- -webkit-transform-style: preserve-3d;
- -moz-transform-style: preserve-3d;
- -ms-transform-style: preserve-3d;
- transform-style: preserve-3d;
-}
-.swiper-container-3d .swiper-slide-shadow-left,
-.swiper-container-3d .swiper-slide-shadow-right,
-.swiper-container-3d .swiper-slide-shadow-top,
-.swiper-container-3d .swiper-slide-shadow-bottom {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- pointer-events: none;
- z-index: 10;
-}
-.swiper-container-3d .swiper-slide-shadow-left {
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
-}
-.swiper-container-3d .swiper-slide-shadow-right {
- background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
-}
-.swiper-container-3d .swiper-slide-shadow-top {
- background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
-}
-.swiper-container-3d .swiper-slide-shadow-bottom {
- background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
- /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Opera 11.10-12.00 */
- background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
- /* Firefox 16+, IE10, Opera 12.50+ */
-}
-/* Coverflow */
-.swiper-container-coverflow .swiper-wrapper,
-.swiper-container-flip .swiper-wrapper {
- /* Windows 8 IE 10 fix */
- -ms-perspective: 1200px;
-}
-/* Cube + Flip */
-.swiper-container-cube,
-.swiper-container-flip {
- overflow: visible;
-}
-.swiper-container-cube .swiper-slide,
-.swiper-container-flip .swiper-slide {
- pointer-events: none;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
- z-index: 1;
-}
-.swiper-container-cube .swiper-slide .swiper-slide,
-.swiper-container-flip .swiper-slide .swiper-slide {
- pointer-events: none;
-}
-.swiper-container-cube .swiper-slide-active,
-.swiper-container-flip .swiper-slide-active,
-.swiper-container-cube .swiper-slide-active .swiper-slide-active,
-.swiper-container-flip .swiper-slide-active .swiper-slide-active {
- pointer-events: auto;
-}
-.swiper-container-cube .swiper-slide-shadow-top,
-.swiper-container-flip .swiper-slide-shadow-top,
-.swiper-container-cube .swiper-slide-shadow-bottom,
-.swiper-container-flip .swiper-slide-shadow-bottom,
-.swiper-container-cube .swiper-slide-shadow-left,
-.swiper-container-flip .swiper-slide-shadow-left,
-.swiper-container-cube .swiper-slide-shadow-right,
-.swiper-container-flip .swiper-slide-shadow-right {
- z-index: 0;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-/* Cube */
-.swiper-container-cube .swiper-slide {
- visibility: hidden;
- -webkit-transform-origin: 0 0;
- -moz-transform-origin: 0 0;
- -ms-transform-origin: 0 0;
- transform-origin: 0 0;
- width: 100%;
- height: 100%;
-}
-.swiper-container-cube.swiper-container-rtl .swiper-slide {
- -webkit-transform-origin: 100% 0;
- -moz-transform-origin: 100% 0;
- -ms-transform-origin: 100% 0;
- transform-origin: 100% 0;
-}
-.swiper-container-cube .swiper-slide-active,
-.swiper-container-cube .swiper-slide-next,
-.swiper-container-cube .swiper-slide-prev,
-.swiper-container-cube .swiper-slide-next + .swiper-slide {
- pointer-events: auto;
- visibility: visible;
-}
-.swiper-container-cube .swiper-cube-shadow {
- position: absolute;
- left: 0;
- bottom: 0px;
- width: 100%;
- height: 100%;
- background: #000;
- opacity: 0.6;
- -webkit-filter: blur(50px);
- filter: blur(50px);
- z-index: 0;
-}
-/* Fade */
-.swiper-container-fade.swiper-container-free-mode .swiper-slide {
- -webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
- -o-transition-timing-function: ease-out;
- transition-timing-function: ease-out;
-}
-.swiper-container-fade .swiper-slide {
- pointer-events: none;
- -webkit-transition-property: opacity;
- -moz-transition-property: opacity;
- -o-transition-property: opacity;
- transition-property: opacity;
-}
-.swiper-container-fade .swiper-slide .swiper-slide {
- pointer-events: none;
-}
-.swiper-container-fade .swiper-slide-active,
-.swiper-container-fade .swiper-slide-active .swiper-slide-active {
- pointer-events: auto;
-}
-/* Scrollbar */
-.swiper-scrollbar {
- border-radius: 10px;
- position: relative;
- -ms-touch-action: none;
- background: rgba(0, 0, 0, 0.1);
-}
-.swiper-container-horizontal > .swiper-scrollbar {
- position: absolute;
- left: 1%;
- bottom: 3px;
- z-index: 50;
- height: 5px;
- width: 98%;
-}
-.swiper-container-vertical > .swiper-scrollbar {
- position: absolute;
- right: 3px;
- top: 1%;
- z-index: 50;
- width: 5px;
- height: 98%;
-}
-.swiper-scrollbar-drag {
- height: 100%;
- width: 100%;
- position: relative;
- background: rgba(0, 0, 0, 0.5);
- border-radius: 10px;
- left: 0;
- top: 0;
-}
-.swiper-scrollbar-cursor-drag {
- cursor: move;
-}
-/* Preloader */
-.swiper-lazy-preloader {
- width: 42px;
- height: 42px;
- position: absolute;
- left: 50%;
- top: 50%;
- margin-left: -21px;
- margin-top: -21px;
- z-index: 10;
- -webkit-transform-origin: 50%;
- -moz-transform-origin: 50%;
- transform-origin: 50%;
- -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
- -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
- animation: swiper-preloader-spin 1s steps(12, end) infinite;
-}
-.swiper-lazy-preloader:after {
- display: block;
- content: "";
- width: 100%;
- height: 100%;
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
- background-position: 50%;
- -webkit-background-size: 100%;
- background-size: 100%;
- background-repeat: no-repeat;
-}
-.swiper-lazy-preloader-white:after {
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
-}
-@-webkit-keyframes swiper-preloader-spin {
- 100% {
- -webkit-transform: rotate(360deg);
- }
-}
-@keyframes swiper-preloader-spin {
- 100% {
- transform: rotate(360deg);
- }
-}
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.min.js.map b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.min.js.map
deleted file mode 100644
index 5ef390442e..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["swiper.jquery.js"],"names":["addLibraryPlugin","lib","fn","swiper","params","firstInstance","this","each","s","Swiper","$","container","round","a","Math","floor","autoplay","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","handleMousewheel","we","mousewheel","event","delta","rtlFactor","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","detail","deltaX","deltaY","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","timeout","slideReset","lazyLoading","lazy","load","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","pX","pY","attr","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","hashnav","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","swipeHandler","noSwiping","noSwipingClass","slideClass","slideActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slidePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","unlockSwipeToPrev","unlockSwipes","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","slide","slides","eq","activeIndex","newHeight","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","ceil","max","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","margin-top","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","activeSlide","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","translated","controller","spline","slideTo","forceUpdatePagination","slideChangedBySlideTo","desktopEvents","navigator","pointerEnabled","msPointerEnabled","touchEvents","start","move","end","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","realIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","ieTouch","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","hasClass","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","j","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","setHash","clientLeft","_slidePrev","duration","byController","effects","setTransition","x","y","z","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","spv","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","lastIndex","i1","i3","interpolate","x2","binarySearch","guess","array","val","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","isArray","setControlledTransition","init","initialized","hash","location","slideHash","disableKeyboardControl","enableKeyboardControl","WheelEvent","onmousewheel","disableMousewheelControl","enableMousewheelControl","parallaxDuration","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","destroy","cleanupStyles","deleteInstance","prototype","ua","userAgent","test","arr","Object","apply","msMaxTouchPoints","maxTouchPoints","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","div","createElement","styles","swiperDomPlugins","domLib","fireCallBack","call","events","dom","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","module","exports","define","amd"],"mappings":"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","file":"swiper.jquery.min.js","sourcesContent":["/**\n * Swiper 3.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2016, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: February 7, 2016\n */\n(function () {\n 'use strict';\n var $;\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n // Hash Navigation\n hashnav: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // NS\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push('swiper-container-' + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push('swiper-container-free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push('swiper-container-no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push('swiper-container-autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push('swiper-container-3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push('swiper-container-' + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n s.params.setWrapperSize = false;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n s.params.setWrapperSize = false;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass('swiper-pagination-clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push('swiper-container-rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push('swiper-container-multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push('swiper-container-android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, s.params.autoplay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n // Update Height\n var slide = s.slides.eq(s.activeIndex)[0];\n if (typeof slide !== 'undefined') {\n var newHeight = slide.offsetHeight;\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n }\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n 'order': newSlideOrderIndex\n });\n }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css({\n 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n })\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n s.slides.eq(0).addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n s.slides.eq(-1).addClass(s.params.slidePrevClass);\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">' + s.params.paginationElement + '>';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n function forceSetTranslate() {\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated, newTranslate;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];\n if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];\n else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n if (params.simulateTouch && !s.device.ios && !s.device.android) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - s.params.slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined' && s.browser.ieTouch) {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving && s.browser.ieTouch) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grabbing';\n s.container[0].style.cursor = '-moz-grabbin';\n s.container[0].style.cursor = 'grabbing';\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n if (!s.params.followFinger) return;\n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n \n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\n });\n \n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');\n if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass('swiper-lazy-loading');\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset');\n s.loadImage(_img[0], (src || background), srcset, false, function () {\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');\n slide.find('.swiper-lazy-preloader, .preloader').remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (s.params.slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = s.params.slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(s.touchEvents.start, sb.dragStart);\n $(target).on(s.touchEvents.move, sb.dragMove);\n $(target).on(s.touchEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(s.touchEvents.start, sb.dragStart);\n $(target).off(s.touchEvents.move, sb.dragMove);\n $(target).off(s.touchEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n \n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (s.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (s.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n init: function () {\n if (!s.params.hashnav) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (!hash) return;\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';\n }\n };\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n if (s.params.mousewheelControl) {\n try {\n new window.WheelEvent('wheel');\n s.mousewheel.event = 'wheel';\n } catch (e) {\n if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {\n s.mousewheel.event = 'wheel';\n }\n }\n if (!s.mousewheel.event && window.WheelEvent) {\n \n }\n if (!s.mousewheel.event && document.onmousewheel !== undefined) {\n s.mousewheel.event = 'mousewheel';\n }\n if (!s.mousewheel.event) {\n s.mousewheel.event = 'DOMMouseScroll';\n }\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var we = s.mousewheel.event;\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n //WebKits\n if (we === 'mousewheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;\n }\n }\n //Old FireFox\n else if (we === 'DOMMouseScroll') delta = -e.detail;\n //New FireFox\n else if (we === 'wheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;\n }\n }\n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n if (s.params.autoplay) s.stopAutoplay();\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.off(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.on(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1)\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n }\n\n window.Swiper = Swiper;\n})();\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n//# sourceMappingURL=maps/swiper.jquery.js.map\n"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.umd.min.js.map b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.umd.min.js.map
deleted file mode 100644
index 5c3ffbe9cf..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.umd.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["swiper.jquery.umd.js"],"names":["root","factory","define","amd","exports","module","require","Swiper","jQuery","this","$","addLibraryPlugin","lib","fn","swiper","params","firstInstance","each","s","container","round","a","Math","floor","autoplay","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","handleMousewheel","we","mousewheel","event","delta","rtlFactor","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","detail","deltaX","deltaY","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","timeout","slideReset","lazyLoading","lazy","load","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","pX","pY","attr","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","hashnav","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","swipeHandler","noSwiping","noSwipingClass","slideClass","slideActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slidePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","unlockSwipeToPrev","unlockSwipes","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","slide","slides","eq","activeIndex","newHeight","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","ceil","max","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","margin-top","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","activeSlide","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","translated","controller","spline","slideTo","forceUpdatePagination","slideChangedBySlideTo","desktopEvents","navigator","pointerEnabled","msPointerEnabled","touchEvents","start","move","end","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","realIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","ieTouch","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","hasClass","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","j","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","setHash","clientLeft","_slidePrev","duration","byController","effects","setTransition","x","y","z","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","spv","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","lastIndex","i1","i3","interpolate","x2","binarySearch","guess","array","val","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","isArray","setControlledTransition","init","initialized","hash","location","slideHash","disableKeyboardControl","enableKeyboardControl","WheelEvent","onmousewheel","disableMousewheelControl","enableMousewheelControl","parallaxDuration","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","destroy","cleanupStyles","deleteInstance","prototype","ua","userAgent","test","arr","Object","apply","msMaxTouchPoints","maxTouchPoints","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","div","createElement","styles","domLib","fireCallBack","call","events","dom","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,SAAUA,EAAMC,GAChB,YAEsB,mBAAXC,SAAyBA,OAAOC,IAE1CD,QAAQ,UAAWD,GACU,gBAAZG,SAIjBC,OAAOD,QAAUH,EAAQK,QAAQ,WAGjCN,EAAKO,OAASN,EAAQD,EAAKQ,SAE3BC,KAAM,SAAUC,GACjB,YAkmHG,SAASC,GAAiBC,GACtBA,EAAIC,GAAGC,OAAS,SAAUC,GACtB,GAAIC,EAKJ,OAJAJ,GAAIH,MAAMQ,KAAK,WACX,GAAIC,GAAI,GAAIX,GAAOE,KAAMM,EACpBC,KAAeA,EAAgBE,KAEjCF,GApmHf,GAAIT,GAAS,SAAUY,EAAWJ,GAqd9B,QAASK,GAAMC,GACX,MAAOC,MAAKC,MAAMF,GA8DtB,QAASG,KACLN,EAAEO,kBAAoBC,WAAW,WACzBR,EAAEH,OAAOY,MACTT,EAAEU,UACFV,EAAEW,aACFX,EAAEY,KAAK,aAAcZ,IAGhBA,EAAEa,MAKEhB,EAAOiB,mBAKRd,EAAEe,gBAJFf,EAAEgB,SAAS,GACXhB,EAAEY,KAAK,aAAcZ,KANzBA,EAAEW,aACFX,EAAEY,KAAK,aAAcZ,KAY9BA,EAAEH,OAAOS,UA6rBhB,QAASW,GAAmBC,EAAGC,GAC3B,GAAIC,GAAK5B,EAAE0B,EAAEG,OACb,KAAKD,EAAGE,GAAGH,GACP,GAAwB,gBAAbA,GACPC,EAAKA,EAAGG,QAAQJ,OAEf,IAAIA,EAASK,SAAU,CACxB,GAAIC,EAIJ,OAHAL,GAAGG,UAAUxB,KAAK,SAAU2B,EAAOC,GAC3BA,IAAQR,IAAUM,EAAQN,KAE7BM,EACON,EADA,OAIpB,GAAkB,IAAdC,EAAGQ,OAGP,MAAOR,GAAG,GA8zBd,QAASS,GAAaR,EAAQS,GAC1BA,EAAUA,KAEV,IAAIC,GAAeC,OAAOC,kBAAoBD,OAAOE,uBACjDC,EAAW,GAAIJ,GAAa,SAAUK,GACtCA,EAAUC,QAAQ,SAAUC,GACxBtC,EAAEuC,UAAS,GACXvC,EAAEY,KAAK,mBAAoBZ,EAAGsC,MAItCH,GAASK,QAAQnB,GACboB,WAA0C,mBAAvBX,GAAQW,YAA6B,EAAOX,EAAQW,WACvEC,UAAwC,mBAAtBZ,GAAQY,WAA4B,EAAOZ,EAAQY,UACrEC,cAAgD,mBAA1Bb,GAAQa,eAAgC,EAAOb,EAAQa,gBAGjF3C,EAAE4C,UAAUC,KAAKV,GA63BrB,QAASW,GAAe5B,GAChBA,EAAE6B,gBAAe7B,EAAIA,EAAE6B,cAC3B,IAAIC,GAAK9B,EAAE+B,SAAW/B,EAAEgC,QAExB,KAAKlD,EAAEH,OAAOsD,mBAAqBnD,EAAEoD,gBAAyB,KAAPJ,IAAchD,EAAEoD,gBAAyB,KAAPJ,GACrF,OAAO,CAEX,KAAKhD,EAAEH,OAAOwD,mBAAqBrD,EAAEoD,gBAAyB,KAAPJ,IAAchD,EAAEoD,gBAAyB,KAAPJ,GACrF,OAAO,CAEX,MAAI9B,EAAEoC,UAAYpC,EAAEqC,QAAUrC,EAAEsC,SAAWtC,EAAEuC,SAGzCC,SAASC,eAAiBD,SAASC,cAAcC,WAA+D,UAAlDF,SAASC,cAAcC,SAASC,eAA+E,aAAlDH,SAASC,cAAcC,SAASC,gBAA/J,CAGA,GAAW,KAAPb,GAAoB,KAAPA,GAAoB,KAAPA,GAAoB,KAAPA,EAAW,CAClD,GAAIc,IAAS,CAEb,IAAI9D,EAAEC,UAAUsB,QAAQ,iBAAiBK,OAAS,GAA4D,IAAvD5B,EAAEC,UAAUsB,QAAQ,wBAAwBK,OAC/F,MAEJ,IAAImC,IACAC,KAAMhC,OAAOiC,YACbC,IAAKlC,OAAOmC,aAEZC,EAAcpC,OAAOqC,WACrBC,EAAetC,OAAOuC,YACtBC,EAAexE,EAAEC,UAAUwE,QAC3BzE,GAAE0E,MAAKF,EAAaR,KAAOQ,EAAaR,KAAOhE,EAAEC,UAAU,GAAG0E,WAOlE,KAAK,GANDC,KACCJ,EAAaR,KAAMQ,EAAaN,MAChCM,EAAaR,KAAOhE,EAAE6E,MAAOL,EAAaN,MAC1CM,EAAaR,KAAMQ,EAAaN,IAAMlE,EAAE8E,SACxCN,EAAaR,KAAOhE,EAAE6E,MAAOL,EAAaN,IAAMlE,EAAE8E,SAE9CC,EAAI,EAAGA,EAAIH,EAAYhD,OAAQmD,IAAK,CACzC,GAAIC,GAAQJ,EAAYG,EAEpBC,GAAM,IAAMjB,EAAaC,MAAQgB,EAAM,IAAMjB,EAAaC,KAAOI,GACjEY,EAAM,IAAMjB,EAAaG,KAAOc,EAAM,IAAMjB,EAAaG,IAAMI,IAE/DR,GAAS,GAIjB,IAAKA,EAAQ,OAEb9D,EAAEoD,iBACS,KAAPJ,GAAoB,KAAPA,KACT9B,EAAE+D,eAAgB/D,EAAE+D,iBACnB/D,EAAEgE,aAAc,IAEb,KAAPlC,IAAchD,EAAE0E,KAAgB,KAAP1B,GAAahD,EAAE0E,MAAM1E,EAAEmF,aACzC,KAAPnC,IAAchD,EAAE0E,KAAgB,KAAP1B,GAAahD,EAAE0E,MAAM1E,EAAEoF,eAG1C,KAAPpC,GAAoB,KAAPA,KACT9B,EAAE+D,eAAgB/D,EAAE+D,iBACnB/D,EAAEgE,aAAc,GAEd,KAAPlC,GAAWhD,EAAEmF,YACN,KAAPnC,GAAWhD,EAAEoF,cAuCzB,QAASC,GAAiBnE,GAClBA,EAAE6B,gBAAe7B,EAAIA,EAAE6B,cAC3B,IAAIuC,GAAKtF,EAAEuF,WAAWC,MAClBC,EAAQ,EACRC,EAAY1F,EAAE0E,IAAM,GAAK,CAG7B,IAAW,eAAPY,EACA,GAAItF,EAAEH,OAAO8F,sBACT,GAAI3F,EAAEoD,eAAgB,CAClB,KAAIhD,KAAKwF,IAAI1E,EAAE2E,aAAezF,KAAKwF,IAAI1E,EAAE4E,cACpC,MADkDL,GAAQvE,EAAE2E,YAAcH,MAG9E,CACD,KAAItF,KAAKwF,IAAI1E,EAAE4E,aAAe1F,KAAKwF,IAAI1E,EAAE2E,cACpC,MADkDJ,GAAQvE,EAAE4E,gBAKrEL,GAAQrF,KAAKwF,IAAI1E,EAAE2E,aAAezF,KAAKwF,IAAI1E,EAAE4E,cAAiB5E,EAAE2E,YAAcH,GAAcxE,EAAE4E,gBAIjG,IAAW,mBAAPR,EAAyBG,GAASvE,EAAE6E,WAExC,IAAW,UAAPT,EACL,GAAItF,EAAEH,OAAO8F,sBACT,GAAI3F,EAAEoD,eAAgB,CAClB,KAAIhD,KAAKwF,IAAI1E,EAAE8E,QAAU5F,KAAKwF,IAAI1E,EAAE+E,SAC/B,MADwCR,IAASvE,EAAE8E,OAASN,MAGhE,CACD,KAAItF,KAAKwF,IAAI1E,EAAE+E,QAAU7F,KAAKwF,IAAI1E,EAAE8E,SAC/B,MADwCP,IAASvE,EAAE+E,WAK5DR,GAAQrF,KAAKwF,IAAI1E,EAAE8E,QAAU5F,KAAKwF,IAAI1E,EAAE+E,SAAY/E,EAAE8E,OAASN,GAAcxE,EAAE+E,MAGvF,IAAc,IAAVR,EAAJ,CAIA,GAFIzF,EAAEH,OAAOqG,mBAAkBT,GAASA,GAEnCzF,EAAEH,OAAOsG,SAcT,CAED,GAAIC,GAAWpG,EAAEqG,sBAAwBZ,EAAQzF,EAAEH,OAAOyG,sBACtDC,EAAevG,EAAEwG,YACjBC,EAASzG,EAAEa,KA2Bf,IAzBIuF,GAAYpG,EAAE0G,iBAAgBN,EAAWpG,EAAE0G,gBAC3CN,GAAYpG,EAAE2G,iBAAgBP,EAAWpG,EAAE2G,gBAE/C3G,EAAE4G,qBAAqB,GACvB5G,EAAE6G,oBAAoBT,GACtBpG,EAAE8G,iBACF9G,EAAE+G,sBAEGR,GAAgBvG,EAAEwG,cAAgBC,GAAUzG,EAAEa,QAC/Cb,EAAEgH,gBAGFhH,EAAEH,OAAOoH,gBACTC,aAAalH,EAAEuF,WAAW4B,SAC1BnH,EAAEuF,WAAW4B,QAAU3G,WAAW,WAC9BR,EAAEoH,cACH,MAGCpH,EAAEH,OAAOwH,aAAerH,EAAEsH,MAC1BtH,EAAEsH,KAAKC,OAKE,IAAbnB,GAAkBA,IAAapG,EAAE2G,eAAgB,WA7CjC,CACpB,IAAI,GAAK3E,QAAOwF,MAAQC,UAAYzH,EAAEuF,WAAWmC,eAAiB,GAC9D,GAAY,EAARjC,EACA,GAAMzF,EAAEa,QAASb,EAAEH,OAAOY,MAAUT,EAAE2H,WACjC,GAAI3H,EAAEH,OAAO+H,yBAA0B,OAAO,MADF5H,GAAEmF,gBAInD,IAAMnF,EAAEwG,cAAexG,EAAEH,OAAOY,MAAUT,EAAE2H,WACvC,GAAI3H,EAAEH,OAAO+H,yBAA0B,OAAO,MADI5H,GAAEoF,WAIjEpF,GAAEuF,WAAWmC,gBAAiB,GAAK1F,QAAOwF,MAAQC,UAwCtD,MAJIzH,GAAEH,OAAOS,UAAUN,EAAEe,eAErBG,EAAE+D,eAAgB/D,EAAE+D,iBACnB/D,EAAEgE,aAAc,GACd,GAkBX,QAAS2C,GAAqBzG,EAAI0G,GAC9B1G,EAAK5B,EAAE4B,EACP,IAAI2G,GAAGC,EAAIC,EACPvC,EAAY1F,EAAE0E,IAAM,GAAK,CAE7BqD,GAAI3G,EAAG8G,KAAK,yBAA2B,IACvCF,EAAK5G,EAAG8G,KAAK,0BACbD,EAAK7G,EAAG8G,KAAK,0BACTF,GAAMC,GACND,EAAKA,GAAM,IACXC,EAAKA,GAAM,KAGPjI,EAAEoD,gBACF4E,EAAKD,EACLE,EAAK,MAGLA,EAAKF,EACLC,EAAK,KAKTA,EADA,EAAKG,QAAQ,MAAQ,EAChBC,SAASJ,EAAI,IAAMF,EAAWpC,EAAY,IAG1CsC,EAAKF,EAAWpC,EAAY,KAGjCuC,EADA,EAAKE,QAAQ,MAAQ,EAChBC,SAASH,EAAI,IAAMH,EAAW,IAG9BG,EAAKH,EAAW,KAGzB1G,EAAGiH,UAAU,eAAiBL,EAAK,KAAOC,EAAK,SAgDnD,QAASK,GAAoBC,GASzB,MARgC,KAA5BA,EAAUJ,QAAQ,QAEdI,EADAA,EAAU,KAAOA,EAAU,GAAGC,cAClB,KAAOD,EAAU,GAAGC,cAAgBD,EAAUE,UAAU,GAGxD,KAAOF,GAGpBA,EAvvGX,KAAMhJ,eAAgBF,IAAS,MAAO,IAAIA,GAAOY,EAAWJ,EAE5D,IAAI6I,IACAC,UAAW,aACXC,kBAAmB,YACnBC,aAAc,EACdC,MAAO,IAEPxI,UAAU,EACVyI,8BAA8B,EAC9BjI,oBAAoB,EAEpBkI,uBAAuB,EACvBC,sBAAuB,GAEvB9C,UAAU,EACV+C,kBAAkB,EAClBC,sBAAuB,EACvBC,wBAAwB,EACxBC,4BAA6B,EAC7BpC,gBAAgB,EAChBqC,wBAAyB,IAEzBC,YAAY,EAEZC,gBAAgB,EAEhBC,kBAAkB,EAElBC,OAAQ,QACRC,WACIC,OAAQ,GACRC,QAAS,EACTC,MAAO,IACPC,SAAU,EACVC,cAAe,GAEnBC,MACID,cAAe,EACfE,eAAe,GAEnBC,MACIH,cAAc,EACdI,QAAQ,EACRC,aAAc,GACdC,YAAa,KAEjBC,MACIC,WAAW,GAGfC,UAAU,EAEVC,UAAW,KACXC,eAAe,EACfC,oBAAoB,EACpBC,wBAAwB,EAExBC,iBAAiB,EACjBC,mBAAmB,EACnBnD,0BAA0B,EAC1B1B,kBAAkB,EAClBP,uBAAuB,EACvBW,sBAAuB,EAEvB0E,SAAS,EAETC,YAAaC,OAEbC,aAAc,EACdC,cAAe,EACfC,gBAAiB,EACjBC,oBAAqB,SACrBC,eAAgB,EAChBC,gBAAgB,EAChBC,mBAAoB,EACpBC,kBAAmB,EAEnBC,cAAc,EAEdC,WAAY,EACZC,WAAY,GACZC,eAAe,EACfC,aAAa,EACbC,YAAY,EACZC,gBAAiB,GACjBC,aAAc,IACdC,cAAc,EACdC,cAAc,EACdC,UAAW,EACXC,0BAA0B,EAE1BC,mBAAmB,EAEnBC,WAAY,KACZC,kBAAmB,OACnBC,qBAAqB,EACrBC,gBAAgB,EAChBC,uBAAwB,KACxBC,yBAA0B,KAC1BC,yBAA0B,KAC1BC,uBAAwB,KACxBC,eAAgB,UAEhBC,YAAY,EACZC,gBAAiB,IAEjBC,WAAY,KACZC,WAAY,KAEZC,qBAAqB,EACrBC,uBAAuB,EAEvBC,YAAY,EAEZC,eAAe,EACfC,0BAA0B,EAC1BC,qBAAqB,EAErBrG,aAAa,EACbsG,uBAAuB,EACvBC,4BAA6B,EAC7BC,8BAA8B,EAE9BC,eAAe,EACfC,qBAAqB,EAErBtN,MAAM,EACNuN,qBAAsB,EACtBC,aAAc,KAEdC,QAAShD,OACTiD,gBAAgB,EAChBC,UAAW,QAEX/K,kBAAkB,EAClBF,kBAAkB,EAClBkL,aAAc,KACdC,WAAW,EACXC,eAAgB,oBAEhBC,WAAY,eACZC,iBAAkB,sBAClBC,kBAAmB,uBACnBC,oBAAqB,yBACrBC,eAAgB,oBAChBC,eAAgB,oBAChBC,aAAc,iBACdC,YAAa,2BACbC,kBAAmB,kCACnBC,oBAAqB,yBACrBC,uBAAwB,4BACxBC,qBAAsB,0BACtBC,sBAAuB,2BACvBC,2BAA4B,gCAE5BlN,UAAU,EACVmN,gBAAgB,EAEhBC,MAAM,EACNC,iBAAkB,iBAClBC,iBAAkB,aAClBC,kBAAmB,0BACnBC,iBAAkB,yBAClBC,wBAAyB,wBAEzBC,oBAAoB,GA8BpBC,EAA0BjQ,GAAUA,EAAO4J,gBAE/C5J,GAASA,KACT,IAAIkQ,KACJ,KAAK,GAAIC,KAASnQ,GACd,GAA6B,gBAAlBA,GAAOmQ,IAAyC,OAAlBnQ,EAAOmQ,KAAqBnQ,EAAOmQ,GAAOxO,UAAY3B,EAAOmQ,KAAWhO,QAAUnC,EAAOmQ,KAAWtM,UAA6B,mBAATuM,OAAwBpQ,EAAOmQ,YAAkBC,OAA4B,mBAAX3Q,SAA0BO,EAAOmQ,YAAkB1Q,SAOlRyQ,EAAeC,GAASnQ,EAAOmQ,OAP6P,CAC5RD,EAAeC,KACf,KAAK,GAAIE,KAAarQ,GAAOmQ,GACzBD,EAAeC,GAAOE,GAAarQ,EAAOmQ,GAAOE,GAO7D,IAAK,GAAIC,KAAOzH,GACZ,GAA2B,mBAAhB7I,GAAOsQ,GACdtQ,EAAOsQ,GAAOzH,EAASyH,OAEtB,IAA2B,gBAAhBtQ,GAAOsQ,GACnB,IAAK,GAAIC,KAAW1H,GAASyH,GACW,mBAAzBtQ,GAAOsQ,GAAKC,KACnBvQ,EAAOsQ,GAAKC,GAAW1H,EAASyH,GAAKC,GAOrD,IAAIpQ,GAAIT,IAcR,IAXAS,EAAEH,OAASA,EACXG,EAAE+P,eAAiBA,EAGnB/P,EAAEqQ,cAIe,mBAAN7Q,IAAqC,mBAATyQ,QACnCzQ,EAAIyQ,OAES,mBAANzQ,KAEHA,EADgB,mBAATyQ,MACHjO,OAAOiO,MAAQjO,OAAOsO,OAAStO,OAAO1C,OAGtC2Q,SAKZjQ,EAAER,EAAIA,EAKNQ,EAAEuQ,kBAAoBrF,OACtBlL,EAAEwQ,oBAAsB,WAEpB,IAAKxQ,EAAEH,OAAOoL,YAAa,OAAO,CAClC,IACiBjG,GADbyL,GAAa,EACbC,IACJ,KAAM1L,IAAShF,GAAEH,OAAOoL,YAChBjL,EAAEH,OAAOoL,YAAY0F,eAAe3L,IACpC0L,EAAO7N,KAAKmC,EAGpB0L,GAAOE,KAAK,SAAUzQ,EAAG0Q,GACrB,MAAOzI,UAASjI,EAAG,IAAMiI,SAASyI,EAAG,KAEzC,KAAK,GAAI9L,GAAI,EAAGA,EAAI2L,EAAO9O,OAAQmD,IAC/BC,EAAQ0L,EAAO3L,GACXC,GAAShD,OAAOqC,aAAeoM,IAC/BA,EAAazL,EAGrB,OAAOyL,IAAc,OAEzBzQ,EAAE8Q,cAAgB,WAEd,GAAIL,GAAazQ,EAAEwQ,qBACnB,IAAIC,GAAczQ,EAAEuQ,oBAAsBE,EAAY,CAClD,GAAIM,GAAoBN,IAAczQ,GAAEH,OAAOoL,YAAcjL,EAAEH,OAAOoL,YAAYwF,GAAczQ,EAAE+P,eAC9FiB,EAAchR,EAAEH,OAAOY,MAASsQ,EAAkB3F,gBAAkBpL,EAAEH,OAAOuL,aACjF,KAAM,GAAI4E,KAASe,GACf/Q,EAAEH,OAAOmQ,GAASe,EAAkBf,EAExChQ,GAAEuQ,kBAAoBE,EACnBO,GAAehR,EAAEiR,aAChBjR,EAAEkR,QAAO,KAKjBlR,EAAEH,OAAOoL,aACTjL,EAAE8Q,gBAMN9Q,EAAEC,UAAYT,EAAES,GACW,IAAvBD,EAAEC,UAAU2B,QAAhB,CACA,GAAI5B,EAAEC,UAAU2B,OAAS,EAAG,CACxB,GAAIuP,KAKJ,OAJAnR,GAAEC,UAAUF,KAAK,WAEboR,EAAQtO,KAAK,GAAIxD,GAAOE,KAAMM,MAE3BsR,EAIXnR,EAAEC,UAAU,GAAGL,OAASI,EACxBA,EAAEC,UAAUmR,KAAK,SAAUpR,GAE3BA,EAAEqQ,WAAWxN,KAAK,oBAAsB7C,EAAEH,OAAO8I,WAE7C3I,EAAEH,OAAOsG,UACTnG,EAAEqQ,WAAWxN,KAAK,8BAEjB7C,EAAEqR,QAAQC,UACXtR,EAAEqQ,WAAWxN,KAAK,+BAClB7C,EAAEH,OAAOwL,gBAAkB,GAE3BrL,EAAEH,OAAO0J,YACTvJ,EAAEqQ,WAAWxN,KAAK,gCAGlB7C,EAAEH,OAAO4K,UAAYzK,EAAEH,OAAOyN,yBAC9BtN,EAAEH,OAAOwN,qBAAsB,IAG9B,OAAQ,YAAa,QAAQlF,QAAQnI,EAAEH,OAAO6J,SAAW,IACtD1J,EAAEqR,QAAQE,cACVvR,EAAEH,OAAOwN,qBAAsB,EAC/BrN,EAAEqQ,WAAWxN,KAAK,wBAGlB7C,EAAEH,OAAO6J,OAAS,SAGF,UAApB1J,EAAEH,OAAO6J,QACT1J,EAAEqQ,WAAWxN,KAAK,oBAAsB7C,EAAEH,OAAO6J,QAE7B,SAApB1J,EAAEH,OAAO6J,SACT1J,EAAEH,OAAOqN,gBAAkB,EAC3BlN,EAAEH,OAAOuL,cAAgB,EACzBpL,EAAEH,OAAOwL,gBAAkB,EAC3BrL,EAAEH,OAAO0L,eAAiB,EAC1BvL,EAAEH,OAAO2L,gBAAiB,EAC1BxL,EAAEH,OAAOsL,aAAe,EACxBnL,EAAEH,OAAO4J,kBAAmB,EAC5BzJ,EAAEH,OAAO2J,gBAAiB,IAEN,SAApBxJ,EAAEH,OAAO6J,QAAyC,SAApB1J,EAAEH,OAAO6J,UACvC1J,EAAEH,OAAOuL,cAAgB,EACzBpL,EAAEH,OAAOwL,gBAAkB,EAC3BrL,EAAEH,OAAO0L,eAAiB,EAC1BvL,EAAEH,OAAOwN,qBAAsB,EAC/BrN,EAAEH,OAAOsL,aAAe,EACxBnL,EAAEH,OAAO2J,gBAAiB,EACa,mBAA5BsG,KACP9P,EAAEH,OAAO4J,kBAAmB,IAKhCzJ,EAAEH,OAAO0N,YAAcvN,EAAEqR,QAAQG,QACjCxR,EAAEH,OAAO0N,YAAa,GAI1BvN,EAAEyR,QAAUzR,EAAEC,UAAUyR,SAAS,IAAM1R,EAAEH,OAAOiP,cAG5C9O,EAAEH,OAAO2M,aACTxM,EAAE2R,oBAAsBnS,EAAEQ,EAAEH,OAAO2M,YAC/BxM,EAAEH,OAAO0M,mBAAoD,gBAAxBvM,GAAEH,OAAO2M,YAA2BxM,EAAE2R,oBAAoB/P,OAAS,GAAsD,IAAjD5B,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAO2M,YAAY5K,SACnJ5B,EAAE2R,oBAAsB3R,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAO2M,aAGtB,YAA5BxM,EAAEH,OAAOmN,gBAAgChN,EAAEH,OAAO6M,oBAClD1M,EAAE2R,oBAAoBE,SAAS,+BAG/B7R,EAAEH,OAAO6M,qBAAsB,EAEnC1M,EAAE2R,oBAAoBE,SAAS,qBAAuB7R,EAAEH,OAAOmN,kBAG/DhN,EAAEH,OAAOsN,YAAcnN,EAAEH,OAAOuN,cAC5BpN,EAAEH,OAAOsN,aACTnN,EAAEmN,WAAa3N,EAAEQ,EAAEH,OAAOsN,YACtBnN,EAAEH,OAAO0M,mBAAoD,gBAAxBvM,GAAEH,OAAOsN,YAA2BnN,EAAEmN,WAAWvL,OAAS,GAAsD,IAAjD5B,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAOsN,YAAYvL,SAC1I5B,EAAEmN,WAAanN,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAOsN,cAG7CnN,EAAEH,OAAOuN,aACTpN,EAAEoN,WAAa5N,EAAEQ,EAAEH,OAAOuN,YACtBpN,EAAEH,OAAO0M,mBAAoD,gBAAxBvM,GAAEH,OAAOuN,YAA2BpN,EAAEoN,WAAWxL,OAAS,GAAsD,IAAjD5B,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAOuN,YAAYxL,SAC1I5B,EAAEoN,WAAapN,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAOuN,eAMrDpN,EAAEoD,aAAe,WACb,MAA8B,eAAvBpD,EAAEH,OAAO8I,WAKpB3I,EAAE0E,IAAM1E,EAAEoD,iBAAwD,QAArCpD,EAAEC,UAAU,GAAG6R,IAAIjO,eAA4D,QAAjC7D,EAAEC,UAAU8R,IAAI,cACvF/R,EAAE0E,KACF1E,EAAEqQ,WAAWxN,KAAK,wBAIlB7C,EAAE0E,MACF1E,EAAEgS,SAAwC,gBAA7BhS,EAAEyR,QAAQM,IAAI,YAI3B/R,EAAEH,OAAOwL,gBAAkB,GAC3BrL,EAAEqQ,WAAWxN,KAAK,6BAIlB7C,EAAEiS,OAAOC,SACTlS,EAAEqQ,WAAWxN,KAAK,4BAItB7C,EAAEC,UAAU4R,SAAS7R,EAAEqQ,WAAW8B,KAAK,MAGvCnS,EAAEoS,UAAY,EAGdpS,EAAE8H,SAAW,EAGb9H,EAAEqS,SAAW,EAKbrS,EAAEsS,gBAAkB,WAChBtS,EAAEH,OAAOsD,kBAAmB,GAEhCnD,EAAEuS,gBAAkB,WAChBvS,EAAEH,OAAOwD,kBAAmB,GAEhCrD,EAAEwS,WAAa,WACXxS,EAAEH,OAAOsD,iBAAmBnD,EAAEH,OAAOwD,kBAAmB,GAE5DrD,EAAEyS,kBAAoB,WAClBzS,EAAEH,OAAOsD,kBAAmB,GAEhCnD,EAAE0S,kBAAoB,WAClB1S,EAAEH,OAAOwD,kBAAmB,GAEhCrD,EAAE2S,aAAe,WACb3S,EAAEH,OAAOsD,iBAAmBnD,EAAEH,OAAOwD,kBAAmB,GAYxDrD,EAAEH,OAAO0N,aACTvN,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,OAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,eAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,YAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,QAKlC7S,EAAE8S,gBACF9S,EAAE+S,aAAe,EAEjB/S,EAAEgT,UAAY,SAAUC,EAAYC,EAAKC,EAAQC,EAAkBC,GAE/D,QAASC,KACDD,GAAUA,IAFlB,GAAIE,EAICN,GAAWO,UAAaJ,EAgBzBE,IAfIJ,GACAK,EAAQ,GAAIvR,QAAOyR,MACnBF,EAAMG,OAASJ,EACfC,EAAMI,QAAUL,EACZH,IACAI,EAAMJ,OAASA,GAEfD,IACAK,EAAML,IAAMA,IAGhBI,KAOZtT,EAAE8N,cAAgB,WAEd,QAAS8F,KACY,mBAAN5T,IAA2B,OAANA,IACTkL,SAAnBlL,EAAE+S,cAA4B/S,EAAE+S,eAChC/S,EAAE+S,eAAiB/S,EAAE8S,aAAalR,SAC9B5B,EAAEH,OAAOkO,qBAAqB/N,EAAE6T,SACpC7T,EAAEY,KAAK,gBAAiBZ,KANhCA,EAAE8S,aAAe9S,EAAEC,UAAU2R,KAAK,MASlC,KAAK,GAAI7M,GAAI,EAAGA,EAAI/E,EAAE8S,aAAalR,OAAQmD,IACvC/E,EAAEgT,UAAUhT,EAAE8S,aAAa/N,GAAK/E,EAAE8S,aAAa/N,GAAG+O,YAAc9T,EAAE8S,aAAa/N,GAAGgP,aAAa,OAAU/T,EAAE8S,aAAa/N,GAAGoO,QAAUnT,EAAE8S,aAAa/N,GAAGgP,aAAa,WAAY,EAAMH,IAO9L5T,EAAEO,kBAAoB2K,OACtBlL,EAAEgU,aAAc,EAChBhU,EAAEiU,gBAAiB,EAyBnBjU,EAAEkU,cAAgB,WACd,MAAmC,mBAAxBlU,GAAEO,mBAA0C,EAClDP,EAAEH,OAAOS,SACVN,EAAEgU,aAAoB,GAC1BhU,EAAEgU,aAAc,EAChBhU,EAAEY,KAAK,kBAAmBZ,OAC1BM,OAJ+B,GAMnCN,EAAEe,aAAe,SAAUoT,GAClBnU,EAAEO,oBACHP,EAAEO,mBAAmB2G,aAAalH,EAAEO,mBACxCP,EAAEgU,aAAc,EAChBhU,EAAEO,kBAAoB2K,OACtBlL,EAAEY,KAAK,iBAAkBZ,KAE7BA,EAAEoU,cAAgB,SAAUtL,GACpB9I,EAAEiU,iBACFjU,EAAEO,mBAAmB2G,aAAalH,EAAEO,mBACxCP,EAAEiU,gBAAiB,EACL,IAAVnL,GACA9I,EAAEiU,gBAAiB,EACnB3T,KAGAN,EAAEyR,QAAQ4C,cAAc,WACfrU,IACLA,EAAEiU,gBAAiB,EACdjU,EAAEgU,YAIH1T,IAHAN,EAAEe,oBAWlBf,EAAE0G,aAAe,WACb,OAAS1G,EAAEsU,SAAS,IAExBtU,EAAE2G,aAAe,WACb,OAAS3G,EAAEsU,SAAStU,EAAEsU,SAAS1S,OAAS,IAK5C5B,EAAEuU,iBAAmB,WAEjB,GAAIC,GAAQxU,EAAEyU,OAAOC,GAAG1U,EAAE2U,aAAa,EACvC,IAAqB,mBAAVH,GAAuB,CAC9B,GAAII,GAAYJ,EAAMK,YAClBD,IAAW5U,EAAEyR,QAAQM,IAAI,SAAU6C,EAAY,QAG3D5U,EAAE8U,oBAAsB,WACpB,GAAIjQ,GAAOC,CAEPD,GAD0B,mBAAnB7E,GAAEH,OAAOgF,MACR7E,EAAEH,OAAOgF,MAGT7E,EAAEC,UAAU,GAAG8U,YAGvBjQ,EAD2B,mBAApB9E,GAAEH,OAAOiF,OACP9E,EAAEH,OAAOiF,OAGT9E,EAAEC,UAAU,GAAG+U,aAEd,IAAVnQ,GAAe7E,EAAEoD,gBAA6B,IAAX0B,IAAiB9E,EAAEoD,iBAK1DyB,EAAQA,EAAQuD,SAASpI,EAAEC,UAAU8R,IAAI,gBAAiB,IAAM3J,SAASpI,EAAEC,UAAU8R,IAAI,iBAAkB,IAC3GjN,EAASA,EAASsD,SAASpI,EAAEC,UAAU8R,IAAI,eAAgB,IAAM3J,SAASpI,EAAEC,UAAU8R,IAAI,kBAAmB,IAG7G/R,EAAE6E,MAAQA,EACV7E,EAAE8E,OAASA,EACX9E,EAAEiV,KAAOjV,EAAEoD,eAAiBpD,EAAE6E,MAAQ7E,EAAE8E,SAG5C9E,EAAEkV,iBAAmB,WACjBlV,EAAEyU,OAASzU,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,YAC7CxO,EAAEsU,YACFtU,EAAEmV,cACFnV,EAAEoV,kBAEF,IAEIrQ,GAFAoG,EAAenL,EAAEH,OAAOsL,aACxBkK,GAAiBrV,EAAEH,OAAO4L,mBAE1B6J,EAAgB,EAChB5T,EAAQ,CACZ,IAAsB,mBAAX1B,GAAEiV,KAAb,CAC4B,gBAAjB9J,IAA6BA,EAAahD,QAAQ,MAAQ,IACjEgD,EAAeoK,WAAWpK,EAAaqK,QAAQ,IAAK,KAAO,IAAMxV,EAAEiV,MAGvEjV,EAAEyV,aAAetK,EAEbnL,EAAE0E,IAAK1E,EAAEyU,OAAO1C,KAAK2D,WAAY,GAAIC,UAAW,KAC/C3V,EAAEyU,OAAO1C,KAAK6D,YAAa,GAAIC,aAAc,IAElD,IAAIC,EACA9V,GAAEH,OAAOwL,gBAAkB,IAEvByK,EADA1V,KAAKC,MAAML,EAAEyU,OAAO7S,OAAS5B,EAAEH,OAAOwL,mBAAqBrL,EAAEyU,OAAO7S,OAAS5B,EAAEH,OAAOwL,gBAC7DrL,EAAEyU,OAAO7S,OAGTxB,KAAK2V,KAAK/V,EAAEyU,OAAO7S,OAAS5B,EAAEH,OAAOwL,iBAAmBrL,EAAEH,OAAOwL,gBAE/D,SAA3BrL,EAAEH,OAAOuL,eAA6D,QAAjCpL,EAAEH,OAAOyL,sBAC9CwK,EAAyB1V,KAAK4V,IAAIF,EAAwB9V,EAAEH,OAAOuL,cAAgBpL,EAAEH,OAAOwL,kBAKpG,IAAI4K,GACA5K,EAAkBrL,EAAEH,OAAOwL,gBAC3B6K,EAAeJ,EAAyBzK,EACxC8K,EAAiBD,GAAgBlW,EAAEH,OAAOwL,gBAAkB6K,EAAelW,EAAEyU,OAAO7S,OACxF,KAAKmD,EAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IAAK,CAClCkR,EAAY,CACZ,IAAIzB,GAAQxU,EAAEyU,OAAOC,GAAG3P,EACxB,IAAI/E,EAAEH,OAAOwL,gBAAkB,EAAG,CAE9B,GAAI+K,GACAC,EAAQC,CACyB,YAAjCtW,EAAEH,OAAOyL,qBACT+K,EAASjW,KAAKC,MAAM0E,EAAIsG,GACxBiL,EAAMvR,EAAIsR,EAAShL,GACfgL,EAASF,GAAmBE,IAAWF,GAAkBG,IAAQjL,EAAgB,MAC3EiL,GAAOjL,IACTiL,EAAM,EACND,KAGRD,EAAqBC,EAASC,EAAMR,EAAyBzK,EAC7DmJ,EACKzC,KACGwE,4BAA6BH,EAC7BI,yBAA0BJ,EAC1BK,iBAAkBL,EAClBM,gBAAiBN,EACjBO,MAASP,MAIjBE,EAAMlW,KAAKC,MAAM0E,EAAImR,GACrBG,EAAStR,EAAIuR,EAAMJ,GAEvB1B,EACKzC,KACG6E,aAAuB,IAARN,GAAatW,EAAEH,OAAOsL,cAAkBnL,EAAEH,OAAOsL,aAAe,OAElFjD,KAAK,qBAAsBmO,GAC3BnO,KAAK,kBAAmBoO,GAGJ,SAAzB9B,EAAMzC,IAAI,aACiB,SAA3B/R,EAAEH,OAAOuL,eACT6K,EAAYjW,EAAEoD,eAAiBoR,EAAMqC,YAAW,GAAQrC,EAAMsC,aAAY,GACtE9W,EAAEH,OAAO8L,eAAcsK,EAAY/V,EAAM+V,MAG7CA,GAAajW,EAAEiV,MAAQjV,EAAEH,OAAOuL,cAAgB,GAAKD,GAAgBnL,EAAEH,OAAOuL,cAC1EpL,EAAEH,OAAO8L,eAAcsK,EAAY/V,EAAM+V,IAEzCjW,EAAEoD,eACFpD,EAAEyU,OAAO1P,GAAG6N,MAAM/N,MAAQoR,EAAY,KAGtCjW,EAAEyU,OAAO1P,GAAG6N,MAAM9N,OAASmR,EAAY,MAG/CjW,EAAEyU,OAAO1P,GAAGgS,gBAAkBd,EAC9BjW,EAAEoV,gBAAgBvS,KAAKoT,GAGnBjW,EAAEH,OAAO2L,gBACT6J,EAAgBA,EAAgBY,EAAY,EAAIX,EAAgB,EAAInK,EAC1D,IAANpG,IAASsQ,EAAgBA,EAAgBrV,EAAEiV,KAAO,EAAI9J,GACtD/K,KAAKwF,IAAIyP,GAAiB,OAAUA,EAAgB,GACpD,EAAUrV,EAAEH,OAAO0L,iBAAmB,GAAGvL,EAAEsU,SAASzR,KAAKwS,GAC7DrV,EAAEmV,WAAWtS,KAAKwS,KAGd,EAAUrV,EAAEH,OAAO0L,iBAAmB,GAAGvL,EAAEsU,SAASzR,KAAKwS,GAC7DrV,EAAEmV,WAAWtS,KAAKwS,GAClBA,EAAgBA,EAAgBY,EAAY9K,GAGhDnL,EAAEyV,aAAeQ,EAAY9K,EAE7BmK,EAAgBW,EAEhBvU,KAEJ1B,EAAEyV,YAAcrV,KAAK4V,IAAIhW,EAAEyV,YAAazV,EAAEiV,MAAQjV,EAAEH,OAAO6L,iBAC3D,IAAIsL,EAWJ,IARIhX,EAAE0E,KAAO1E,EAAEgS,WAAiC,UAApBhS,EAAEH,OAAO6J,QAA0C,cAApB1J,EAAEH,OAAO6J,SAChE1J,EAAEyR,QAAQM,KAAKlN,MAAO7E,EAAEyV,YAAczV,EAAEH,OAAOsL,aAAe,SAE7DnL,EAAEqR,QAAQC,SAAWtR,EAAEH,OAAO2J,kBAC3BxJ,EAAEoD,eAAgBpD,EAAEyR,QAAQM,KAAKlN,MAAO7E,EAAEyV,YAAczV,EAAEH,OAAOsL,aAAe,OAC/EnL,EAAEyR,QAAQM,KAAKjN,OAAQ9E,EAAEyV,YAAczV,EAAEH,OAAOsL,aAAe,QAGpEnL,EAAEH,OAAOwL,gBAAkB,IAC3BrL,EAAEyV,aAAeQ,EAAYjW,EAAEH,OAAOsL,cAAgB2K,EACtD9V,EAAEyV,YAAcrV,KAAK2V,KAAK/V,EAAEyV,YAAczV,EAAEH,OAAOwL,iBAAmBrL,EAAEH,OAAOsL,aAC/EnL,EAAEyR,QAAQM,KAAKlN,MAAO7E,EAAEyV,YAAczV,EAAEH,OAAOsL,aAAe,OAC1DnL,EAAEH,OAAO2L,gBAAgB,CAEzB,IADAwL,KACKjS,EAAI,EAAGA,EAAI/E,EAAEsU,SAAS1S,OAAQmD,IAC3B/E,EAAEsU,SAASvP,GAAK/E,EAAEyV,YAAczV,EAAEsU,SAAS,IAAI0C,EAAcnU,KAAK7C,EAAEsU,SAASvP,GAErF/E,GAAEsU,SAAW0C,EAKrB,IAAKhX,EAAEH,OAAO2L,eAAgB,CAE1B,IADAwL,KACKjS,EAAI,EAAGA,EAAI/E,EAAEsU,SAAS1S,OAAQmD,IAC3B/E,EAAEsU,SAASvP,IAAM/E,EAAEyV,YAAczV,EAAEiV,MACnC+B,EAAcnU,KAAK7C,EAAEsU,SAASvP,GAGtC/E,GAAEsU,SAAW0C,EACT5W,KAAKC,MAAML,EAAEyV,YAAczV,EAAEiV,MAAQ7U,KAAKC,MAAML,EAAEsU,SAAStU,EAAEsU,SAAS1S,OAAS,IAAM,GACrF5B,EAAEsU,SAASzR,KAAK7C,EAAEyV,YAAczV,EAAEiV,MAGhB,IAAtBjV,EAAEsU,SAAS1S,SAAc5B,EAAEsU,UAAY,IAEb,IAA1BtU,EAAEH,OAAOsL,eACLnL,EAAEoD,eACEpD,EAAE0E,IAAK1E,EAAEyU,OAAO1C,KAAK2D,WAAYvK,EAAe,OAC/CnL,EAAEyU,OAAO1C,KAAK6D,YAAazK,EAAe,OAE9CnL,EAAEyU,OAAO1C,KAAK8D,aAAc1K,EAAe,QAEhDnL,EAAEH,OAAOwN,qBACTrN,EAAEiX,uBAGVjX,EAAEiX,mBAAqB,WACnB,IAAK,GAAIlS,GAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IACjC/E,EAAEyU,OAAO1P,GAAGmS,kBAAoBlX,EAAEoD,eAAiBpD,EAAEyU,OAAO1P,GAAGoS,WAAanX,EAAEyU,OAAO1P,GAAGqS,WAOhGpX,EAAEqX,qBAAuB,SAAUjF,GAI/B,GAHyB,mBAAdA,KACPA,EAAYpS,EAAEoS,WAAa,GAEP,IAApBpS,EAAEyU,OAAO7S,OAAb,CAC6C,mBAAlC5B,GAAEyU,OAAO,GAAGyC,mBAAmClX,EAAEiX,oBAE5D,IAAIK,IAAgBlF,CAChBpS,GAAE0E,MAAK4S,EAAelF,GAG1BpS,EAAEyU,OAAO8C,YAAYvX,EAAEH,OAAO6O,kBAC9B,KAAK,GAAI3J,GAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IAAK,CACtC,GAAIyP,GAAQxU,EAAEyU,OAAO1P,GACjByS,GAAiBF,EAAe9C,EAAM0C,oBAAsB1C,EAAMuC,gBAAkB/W,EAAEH,OAAOsL,aACjG,IAAInL,EAAEH,OAAOyN,sBAAuB,CAChC,GAAImK,KAAgBH,EAAe9C,EAAM0C,mBACrCQ,EAAaD,EAAczX,EAAEoV,gBAAgBrQ,GAC7C4S,EACCF,GAAe,GAAKA,EAAczX,EAAEiV,MACpCyC,EAAa,GAAKA,GAAc1X,EAAEiV,MACnB,GAAfwC,GAAoBC,GAAc1X,EAAEiV,IACrC0C,IACA3X,EAAEyU,OAAOC,GAAG3P,GAAG8M,SAAS7R,EAAEH,OAAO6O,mBAGzC8F,EAAM1M,SAAW9H,EAAE0E,KAAO8S,EAAgBA,KAGlDxX,EAAE8G,eAAiB,SAAUsL,GACA,mBAAdA,KACPA,EAAYpS,EAAEoS,WAAa,EAE/B,IAAIwF,GAAiB5X,EAAE2G,eAAiB3G,EAAE0G,eACtCH,EAAevG,EAAEwG,YACjBC,EAASzG,EAAEa,KACQ,KAAnB+W,GACA5X,EAAE8H,SAAW,EACb9H,EAAEwG,YAAcxG,EAAEa,OAAQ,IAG1Bb,EAAE8H,UAAYsK,EAAYpS,EAAE0G,gBAAkB,EAC9C1G,EAAEwG,YAAcxG,EAAE8H,UAAY,EAC9B9H,EAAEa,MAAQb,EAAE8H,UAAY,GAExB9H,EAAEwG,cAAgBD,GAAcvG,EAAEY,KAAK,mBAAoBZ,GAC3DA,EAAEa,QAAU4F,GAAQzG,EAAEY,KAAK,aAAcZ,GAEzCA,EAAEH,OAAOwN,qBAAqBrN,EAAEqX,qBAAqBjF,GACzDpS,EAAEY,KAAK,aAAcZ,EAAGA,EAAE8H,WAE9B9H,EAAE+G,kBAAoB,WAClB,GACI8Q,GAAgB9S,EAAG+S,EADnB1F,EAAYpS,EAAE0E,IAAM1E,EAAEoS,WAAapS,EAAEoS,SAEzC,KAAKrN,EAAI,EAAGA,EAAI/E,EAAEmV,WAAWvT,OAAQmD,IACE,mBAAxB/E,GAAEmV,WAAWpQ,EAAI,GACpBqN,GAAapS,EAAEmV,WAAWpQ,IAAMqN,EAAYpS,EAAEmV,WAAWpQ,EAAI,IAAM/E,EAAEmV,WAAWpQ,EAAI,GAAK/E,EAAEmV,WAAWpQ,IAAM,EAC5G8S,EAAiB9S,EAEZqN,GAAapS,EAAEmV,WAAWpQ,IAAMqN,EAAYpS,EAAEmV,WAAWpQ,EAAI,KAClE8S,EAAiB9S,EAAI,GAIrBqN,GAAapS,EAAEmV,WAAWpQ,KAC1B8S,EAAiB9S,IAKR,EAAjB8S,GAAgD,mBAAnBA,MAAgCA,EAAiB,GAMlFC,EAAY1X,KAAKC,MAAMwX,EAAiB7X,EAAEH,OAAO0L,gBAC7CuM,GAAa9X,EAAEsU,SAAS1S,SAAQkW,EAAY9X,EAAEsU,SAAS1S,OAAS,GAEhEiW,IAAmB7X,EAAE2U,cAGzB3U,EAAE8X,UAAYA,EACd9X,EAAE+X,cAAgB/X,EAAE2U,YACpB3U,EAAE2U,YAAckD,EAChB7X,EAAEgH,kBAMNhH,EAAEgH,cAAgB,WACdhH,EAAEyU,OAAO8C,YAAYvX,EAAEH,OAAO4O,iBAAmB,IAAMzO,EAAEH,OAAO+O,eAAiB,IAAM5O,EAAEH,OAAOgP,eAChG,IAAImJ,GAAchY,EAAEyU,OAAOC,GAAG1U,EAAE2U,YAEhCqD,GAAYnG,SAAS7R,EAAEH,OAAO4O,iBAE9B,IAAIwJ,GAAYD,EAAYE,KAAK,IAAMlY,EAAEH,OAAO2O,YAAYqD,SAAS7R,EAAEH,OAAO+O,eAC1E5O,GAAEH,OAAOY,MAA6B,IAArBwX,EAAUrW,QAC3B5B,EAAEyU,OAAOC,GAAG,GAAG7C,SAAS7R,EAAEH,OAAO+O,eAGrC,IAAIuJ,GAAYH,EAAYI,KAAK,IAAMpY,EAAEH,OAAO2O,YAAYqD,SAAS7R,EAAEH,OAAOgP,eAM9E,IALI7O,EAAEH,OAAOY,MAA6B,IAArB0X,EAAUvW,QAC3B5B,EAAEyU,OAAOC,GAAG,IAAI7C,SAAS7R,EAAEH,OAAOgP,gBAIlC7O,EAAE2R,qBAAuB3R,EAAE2R,oBAAoB/P,OAAS,EAAG,CAE3D,GAAIyW,GACAC,EAAQtY,EAAEH,OAAOY,KAAOL,KAAK2V,MAAM/V,EAAEyU,OAAO7S,OAA0B,EAAjB5B,EAAEiO,cAAoBjO,EAAEH,OAAO0L,gBAAkBvL,EAAEsU,SAAS1S,MAiCrH,IAhCI5B,EAAEH,OAAOY,MACT4X,EAAUjY,KAAK2V,MAAM/V,EAAE2U,YAAc3U,EAAEiO,cAAcjO,EAAEH,OAAO0L,gBAC1D8M,EAAUrY,EAAEyU,OAAO7S,OAAS,EAAqB,EAAjB5B,EAAEiO,eAClCoK,GAAqBrY,EAAEyU,OAAO7S,OAA0B,EAAjB5B,EAAEiO,cAEzCoK,EAAUC,EAAQ,IAAGD,GAAoBC,GAC/B,EAAVD,GAA2C,YAA5BrY,EAAEH,OAAOmN,iBAA8BqL,EAAUC,EAAQD,IAIxEA,EADuB,mBAAhBrY,GAAE8X,UACC9X,EAAE8X,UAGF9X,EAAE2U,aAAe,EAIH,YAA5B3U,EAAEH,OAAOmN,gBAAgChN,EAAEuY,SAAWvY,EAAEuY,QAAQ3W,OAAS,IACzE5B,EAAEuY,QAAQhB,YAAYvX,EAAEH,OAAOmP,mBAC3BhP,EAAE2R,oBAAoB/P,OAAS,EAC/B5B,EAAEuY,QAAQxY,KAAK,WACPP,EAAED,MAAMmC,UAAY2W,GAAS7Y,EAAED,MAAMsS,SAAS7R,EAAEH,OAAOmP,qBAI/DhP,EAAEuY,QAAQ7D,GAAG2D,GAASxG,SAAS7R,EAAEH,OAAOmP,oBAGhB,aAA5BhP,EAAEH,OAAOmN,iBACThN,EAAE2R,oBAAoBC,KAAK,IAAM5R,EAAEH,OAAOqP,wBAAwBsJ,KAAKH,EAAU,GACjFrY,EAAE2R,oBAAoBC,KAAK,IAAM5R,EAAEH,OAAOsP,sBAAsBqJ,KAAKF,IAEzC,aAA5BtY,EAAEH,OAAOmN,eAA+B,CACxC,GAAIyL,IAASJ,EAAU,GAAKC,EACxBI,EAASD,EACTE,EAAS,CACR3Y,GAAEoD,iBACHuV,EAASF,EACTC,EAAS,GAEb1Y,EAAE2R,oBAAoBC,KAAK,IAAM5R,EAAEH,OAAOwP,4BAA4BhH,UAAU,6BAA+BqQ,EAAS,YAAcC,EAAS,KAAKC,WAAW5Y,EAAEH,OAAOiJ,OAE5I,WAA5B9I,EAAEH,OAAOmN,gBAA+BhN,EAAEH,OAAOkN,yBACjD/M,EAAE2R,oBAAoBkH,KAAK7Y,EAAEH,OAAOkN,uBAAuB/M,EAAGqY,EAAU,EAAGC,IAC3EtY,EAAEY,KAAK,uBAAwBZ,EAAGA,EAAE2R,oBAAoB,KAK3D3R,EAAEH,OAAOY,OACNT,EAAEH,OAAOuN,YAAcpN,EAAEoN,YAAcpN,EAAEoN,WAAWxL,OAAS,IACzD5B,EAAEwG,aACFxG,EAAEoN,WAAWyE,SAAS7R,EAAEH,OAAOoP,qBAC3BjP,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEuP,KAAKuJ,QAAQ9Y,EAAEoN,cAG9CpN,EAAEoN,WAAWmK,YAAYvX,EAAEH,OAAOoP,qBAC9BjP,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEuP,KAAKwJ,OAAO/Y,EAAEoN,cAGjDpN,EAAEH,OAAOsN,YAAcnN,EAAEmN,YAAcnN,EAAEmN,WAAWvL,OAAS,IACzD5B,EAAEa,OACFb,EAAEmN,WAAW0E,SAAS7R,EAAEH,OAAOoP,qBAC3BjP,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEuP,KAAKuJ,QAAQ9Y,EAAEmN,cAG9CnN,EAAEmN,WAAWoK,YAAYvX,EAAEH,OAAOoP,qBAC9BjP,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEuP,KAAKwJ,OAAO/Y,EAAEmN,gBAS7DnN,EAAEgZ,iBAAmB,WACjB,GAAKhZ,EAAEH,OAAO2M,YACVxM,EAAE2R,qBAAuB3R,EAAE2R,oBAAoB/P,OAAS,EAAG,CAC3D,GAAIqX,GAAiB,EACrB,IAAgC,YAA5BjZ,EAAEH,OAAOmN,eAA8B,CAEvC,IAAK,GADDkM,GAAkBlZ,EAAEH,OAAOY,KAAOL,KAAK2V,MAAM/V,EAAEyU,OAAO7S,OAA0B,EAAjB5B,EAAEiO,cAAoBjO,EAAEH,OAAO0L,gBAAkBvL,EAAEsU,SAAS1S,OACtHmD,EAAI,EAAOmU,EAAJnU,EAAqBA,IAE7BkU,GADAjZ,EAAEH,OAAO+M,uBACS5M,EAAEH,OAAO+M,uBAAuB7H,EAAG/E,EAAEH,OAAOkP,aAG5C,IAAM/O,EAAEH,OAAO4M,kBAAkB,WAAazM,EAAEH,OAAOkP,YAAc,OAAS/O,EAAEH,OAAO4M,kBAAoB,GAGrIzM,GAAE2R,oBAAoBkH,KAAKI,GAC3BjZ,EAAEuY,QAAUvY,EAAE2R,oBAAoBC,KAAK,IAAM5R,EAAEH,OAAOkP,aAClD/O,EAAEH,OAAO6M,qBAAuB1M,EAAEH,OAAO0P,MAAQvP,EAAEuP,MACnDvP,EAAEuP,KAAK4J,iBAGiB,aAA5BnZ,EAAEH,OAAOmN,iBAELiM,EADAjZ,EAAEH,OAAOiN,yBACQ9M,EAAEH,OAAOiN,yBAAyB9M,EAAGA,EAAEH,OAAOqP,uBAAwBlP,EAAEH,OAAOsP,sBAI5F,gBAAkBnP,EAAEH,OAAOqP,uBAAyB,4BAElClP,EAAEH,OAAOsP,qBAAqB,YAExDnP,EAAE2R,oBAAoBkH,KAAKI,IAEC,aAA5BjZ,EAAEH,OAAOmN,iBAELiM,EADAjZ,EAAEH,OAAOgN,yBACQ7M,EAAEH,OAAOgN,yBAAyB7M,EAAGA,EAAEH,OAAOwP,4BAG9C,gBAAkBrP,EAAEH,OAAOwP,2BAA6B,YAE7ErP,EAAE2R,oBAAoBkH,KAAKI,IAEC,WAA5BjZ,EAAEH,OAAOmN,gBACThN,EAAEY,KAAK,uBAAwBZ,EAAGA,EAAE2R,oBAAoB,MAOpE3R,EAAE6T,OAAS,SAAUuF,GASjB,QAASC,KACLC,EAAelZ,KAAKmZ,IAAInZ,KAAK4V,IAAIhW,EAAEoS,UAAWpS,EAAE2G,gBAAiB3G,EAAE0G,gBACnE1G,EAAE6G,oBAAoByS,GACtBtZ,EAAE+G,oBACF/G,EAAEgH,gBAEN,GAdAhH,EAAE8U,sBACF9U,EAAEkV,mBACFlV,EAAE8G,iBACF9G,EAAEgZ,mBACFhZ,EAAEgH,gBACEhH,EAAEH,OAAO6K,WAAa1K,EAAE0K,WACxB1K,EAAE0K,UAAU8O,MAQZJ,EAAiB,CACjB,GAAIK,GAAYH,CACZtZ,GAAE0Z,YAAc1Z,EAAE0Z,WAAWC,SAC7B3Z,EAAE0Z,WAAWC,OAASzO,QAEtBlL,EAAEH,OAAOsG,UACTkT,IACIrZ,EAAEH,OAAO0J,YACTvJ,EAAEuU,qBAKFkF,GAD4B,SAA3BzZ,EAAEH,OAAOuL,eAA4BpL,EAAEH,OAAOuL,cAAgB,IAAMpL,EAAEa,QAAUb,EAAEH,OAAO2L,eAC7ExL,EAAE4Z,QAAQ5Z,EAAEyU,OAAO7S,OAAS,EAAG,GAAG,GAAO,GAGzC5B,EAAE4Z,QAAQ5Z,EAAE2U,YAAa,GAAG,GAAO,GAE/C8E,GACDJ,SAIHrZ,GAAEH,OAAO0J,YACdvJ,EAAEuU,oBAOVvU,EAAEuC,SAAW,SAAUsX,GAEf7Z,EAAEH,OAAOoL,aACTjL,EAAE8Q,eAIN,IAAIzN,GAAmBrD,EAAEH,OAAOwD,iBAC5BF,EAAmBnD,EAAEH,OAAOsD,gBAChCnD,GAAEH,OAAOwD,iBAAmBrD,EAAEH,OAAOsD,kBAAmB,EAExDnD,EAAE8U,sBACF9U,EAAEkV,oBAC6B,SAA3BlV,EAAEH,OAAOuL,eAA4BpL,EAAEH,OAAOsG,UAAY0T,IAAuB7Z,EAAEgZ,mBACnFhZ,EAAEH,OAAO6K,WAAa1K,EAAE0K,WACxB1K,EAAE0K,UAAU8O,MAEZxZ,EAAE0Z,YAAc1Z,EAAE0Z,WAAWC,SAC7B3Z,EAAE0Z,WAAWC,OAASzO,OAE1B,IAAI4O,IAAwB,CAC5B,IAAI9Z,EAAEH,OAAOsG,SAAU,CACnB,GAAImT,GAAelZ,KAAKmZ,IAAInZ,KAAK4V,IAAIhW,EAAEoS,UAAWpS,EAAE2G,gBAAiB3G,EAAE0G,eACvE1G,GAAE6G,oBAAoByS,GACtBtZ,EAAE+G,oBACF/G,EAAEgH,gBAEEhH,EAAEH,OAAO0J,YACTvJ,EAAEuU,uBAINvU,GAAEgH,gBAEE8S,GAD4B,SAA3B9Z,EAAEH,OAAOuL,eAA4BpL,EAAEH,OAAOuL,cAAgB,IAAMpL,EAAEa,QAAUb,EAAEH,OAAO2L,eAClExL,EAAE4Z,QAAQ5Z,EAAEyU,OAAO7S,OAAS,EAAG,GAAG,GAAO,GAGzC5B,EAAE4Z,QAAQ5Z,EAAE2U,YAAa,GAAG,GAAO,EAG/D3U,GAAEH,OAAOwH,cAAgByS,GAAyB9Z,EAAEsH,MACpDtH,EAAEsH,KAAKC,OAGXvH,EAAEH,OAAOwD,iBAAmBA,EAC5BrD,EAAEH,OAAOsD,iBAAmBA,EAQhC,IAAI4W,IAAiB,YAAa,YAAa,UAC3C/X,QAAOgY,UAAUC,eAAgBF,GAAiB,cAAe,cAAe,aAC3E/X,OAAOgY,UAAUE,mBAAkBH,GAAiB,gBAAiB,gBAAiB,gBAC/F/Z,EAAEma,aACEC,MAAQpa,EAAEqR,QAAQG,QAAUxR,EAAEH,OAAOiM,cAAiB,aAAeiO,EAAc,GACnFM,KAAOra,EAAEqR,QAAQG,QAAUxR,EAAEH,OAAOiM,cAAgB,YAAciO,EAAc,GAChFO,IAAMta,EAAEqR,QAAQG,QAAUxR,EAAEH,OAAOiM,cAAgB,WAAaiO,EAAc,KAK9E/X,OAAOgY,UAAUC,gBAAkBjY,OAAOgY,UAAUE,oBACpB,cAA/Bla,EAAEH,OAAO+I,kBAAoC5I,EAAEC,UAAYD,EAAEyR,SAASI,SAAS,cAAgB7R,EAAEH,OAAO8I,WAI7G3I,EAAEua,WAAa,SAAUC,GACrB,GAAIC,GAAYD,EAAS,MAAQ,KAC7BE,EAASF,EAAS,sBAAwB,mBAC1C5R,EAAmD,cAA/B5I,EAAEH,OAAO+I,kBAAoC5I,EAAEC,UAAU,GAAKD,EAAEyR,QAAQ,GAC5FpQ,EAASrB,EAAEqR,QAAQG,MAAQ5I,EAAoBlF,SAE/CiX,EAAc3a,EAAEH,OAAO+a,QAAS,GAAO,CAGvC5a,GAAE6a,QAAQC,IACVlS,EAAkB8R,GAAQ1a,EAAEma,YAAYC,MAAOpa,EAAE+a,cAAc,GAC/D1Z,EAAOqZ,GAAQ1a,EAAEma,YAAYE,KAAMra,EAAEgb,YAAaL,GAClDtZ,EAAOqZ,GAAQ1a,EAAEma,YAAYG,IAAKta,EAAEib,YAAY,KAG5Cjb,EAAEqR,QAAQG,QACV5I,EAAkB8R,GAAQ1a,EAAEma,YAAYC,MAAOpa,EAAE+a,cAAc,GAC/DnS,EAAkB8R,GAAQ1a,EAAEma,YAAYE,KAAMra,EAAEgb,YAAaL,GAC7D/R,EAAkB8R,GAAQ1a,EAAEma,YAAYG,IAAKta,EAAEib,YAAY,KAE3Dpb,EAAOiM,eAAkB9L,EAAEiS,OAAOiJ,KAAQlb,EAAEiS,OAAOC,UACnDtJ,EAAkB8R,GAAQ,YAAa1a,EAAE+a,cAAc,GACvDrX,SAASgX,GAAQ,YAAa1a,EAAEgb,YAAaL,GAC7CjX,SAASgX,GAAQ,UAAW1a,EAAEib,YAAY,KAGlDjZ,OAAO0Y,GAAQ,SAAU1a,EAAEuC,UAGvBvC,EAAEH,OAAOsN,YAAcnN,EAAEmN,YAAcnN,EAAEmN,WAAWvL,OAAS,IAC7D5B,EAAEmN,WAAWsN,GAAW,QAASza,EAAEmb,aAC/Bnb,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEmN,WAAWsN,GAAW,UAAWza,EAAEuP,KAAK6L,aAEvEpb,EAAEH,OAAOuN,YAAcpN,EAAEoN,YAAcpN,EAAEoN,WAAWxL,OAAS,IAC7D5B,EAAEoN,WAAWqN,GAAW,QAASza,EAAEqb,aAC/Brb,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEoN,WAAWqN,GAAW,UAAWza,EAAEuP,KAAK6L,aAEvEpb,EAAEH,OAAO2M,YAAcxM,EAAEH,OAAO6M,sBAChC1M,EAAE2R,oBAAoB8I,GAAW,QAAS,IAAMza,EAAEH,OAAOkP,YAAa/O,EAAEsb,cACpEtb,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAE2R,oBAAoB8I,GAAW,UAAW,IAAMza,EAAEH,OAAOkP,YAAa/O,EAAEuP,KAAK6L,cAI5Gpb,EAAEH,OAAO2N,eAAiBxN,EAAEH,OAAO4N,2BAA0B7E,EAAkB8R,GAAQ,QAAS1a,EAAEwN,eAAe,IAEzHxN,EAAEub,aAAe,WACbvb,EAAEua,cAENva,EAAEwb,aAAe,WACbxb,EAAEua,YAAW,IAOjBva,EAAEyb,YAAa,EACfzb,EAAEwN,cAAgB,SAAUtM,GACnBlB,EAAEyb,aACCzb,EAAEH,OAAO2N,eAAetM,EAAE+D,iBAC1BjF,EAAEH,OAAO4N,0BAA4BzN,EAAE2H,YACvCzG,EAAEwa,kBACFxa,EAAEya,8BAKd3b,EAAEmb,YAAc,SAAUja,GACtBA,EAAE+D,mBACEjF,EAAEa,OAAUb,EAAEH,OAAOY,OACzBT,EAAEmF,aAENnF,EAAEqb,YAAc,SAAUna,GACtBA,EAAE+D,mBACEjF,EAAEwG,aAAgBxG,EAAEH,OAAOY,OAC/BT,EAAEoF,aAENpF,EAAEsb,aAAe,SAAUpa,GACvBA,EAAE+D,gBACF,IAAIvD,GAAQlC,EAAED,MAAMmC,QAAU1B,EAAEH,OAAO0L,cACnCvL,GAAEH,OAAOY,OAAMiB,GAAgB1B,EAAEiO,cACrCjO,EAAE4Z,QAAQlY,IA0Bd1B,EAAE4b,mBAAqB,SAAU1a,GAC7B,GAAIsT,GAAQvT,EAAmBC,EAAG,IAAMlB,EAAEH,OAAO2O,YAC7CqN,GAAa,CACjB,IAAIrH,EACA,IAAK,GAAIzP,GAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IAC7B/E,EAAEyU,OAAO1P,KAAOyP,IAAOqH,GAAa,EAIhD,KAAIrH,IAASqH,EAOT,MAFA7b,GAAE8b,aAAe5Q,YACjBlL,EAAE+b,aAAe7Q,OAGrB,IARIlL,EAAE8b,aAAetH,EACjBxU,EAAE+b,aAAevc,EAAEgV,GAAO9S,QAO1B1B,EAAEH,OAAO6N,qBAA0CxC,SAAnBlL,EAAE+b,cAA8B/b,EAAE+b,eAAiB/b,EAAE2U,YAAa,CAClG,GACIqH,GADAC,EAAejc,EAAE+b,YAGrB,IAAI/b,EAAEH,OAAOY,KAAM,CACf,GAAIT,EAAE2H,UAAW,MACjBqU,GAAYxc,EAAEQ,EAAE8b,cAAc5T,KAAK,2BAC/BlI,EAAEH,OAAO2L,eACJyQ,EAAejc,EAAEiO,aAAejO,EAAEH,OAAOuL,cAAc,GAAO6Q,EAAejc,EAAEyU,OAAO7S,OAAS5B,EAAEiO,aAAejO,EAAEH,OAAOuL,cAAc,GACxIpL,EAAEU,UACFub,EAAejc,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,WAAa,6BAA+BwN,EAAY,mCAAmCtH,GAAG,GAAGhT,QAClJlB,WAAW,WACPR,EAAE4Z,QAAQqC,IACX,IAGHjc,EAAE4Z,QAAQqC,GAIVA,EAAejc,EAAEyU,OAAO7S,OAAS5B,EAAEH,OAAOuL,eAC1CpL,EAAEU,UACFub,EAAejc,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,WAAa,6BAA+BwN,EAAY,mCAAmCtH,GAAG,GAAGhT,QAClJlB,WAAW,WACPR,EAAE4Z,QAAQqC,IACX,IAGHjc,EAAE4Z,QAAQqC,OAKlBjc,GAAE4Z,QAAQqC,IAKtB,IAAIC,GACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAI4BC,EAG5BC,EALAC,EAAe,kCAEfC,EAAgBrV,KAAKsV,MAErBC,IAIJ/c,GAAE2H,WAAY,EAGd3H,EAAEgd,SACEC,OAAQ,EACRC,OAAQ,EACRC,SAAU,EACVC,SAAU,EACVC,KAAM,EAIV,IAAIC,GAAcC,CAusDlB,IAtsDAvd,EAAE+a,aAAe,SAAU7Z,GAGvB,GAFIA,EAAE6B,gBAAe7B,EAAIA,EAAE6B,eAC3Bua,EAA0B,eAAXpc,EAAEsc,KACZF,KAAgB,SAAWpc,KAAiB,IAAZA,EAAEuc,MAAvC,CACA,GAAIzd,EAAEH,OAAOyO,WAAarN,EAAmBC,EAAG,IAAMlB,EAAEH,OAAO0O,gBAE3D,YADAvO,EAAEyb,YAAa,EAGnB,KAAIzb,EAAEH,OAAOwO,cACJpN,EAAmBC,EAAGlB,EAAEH,OAAOwO,cADxC,CAIA,GAAI4O,GAASjd,EAAEgd,QAAQG,SAAsB,eAAXjc,EAAEsc,KAAwBtc,EAAEwc,cAAc,GAAGC,MAAQzc,EAAEyc,MACrFT,EAASld,EAAEgd,QAAQI,SAAsB,eAAXlc,EAAEsc,KAAwBtc,EAAEwc,cAAc,GAAGE,MAAQ1c,EAAE0c,KAGzF,MAAG5d,EAAEiS,OAAOiJ,KAAOlb,EAAEH,OAAOmJ,uBAAyBiU,GAAUjd,EAAEH,OAAOoJ,uBAAxE,CAgBA,GAZAiT,GAAY,EACZC,GAAU,EACVC,GAAsB,EACtBE,EAAcpR,OACdqS,EAAcrS,OACdlL,EAAEgd,QAAQC,OAASA,EACnBjd,EAAEgd,QAAQE,OAASA,EACnBb,EAAiB7U,KAAKsV,MACtB9c,EAAEyb,YAAa,EACfzb,EAAE8U,sBACF9U,EAAE6d,eAAiB3S,OACflL,EAAEH,OAAOwM,UAAY,IAAGoQ,GAAqB,GAClC,eAAXvb,EAAEsc,KAAuB,CACzB,GAAIvY,IAAiB,CACjBzF,GAAE0B,EAAEG,QAAQC,GAAGsb,KAAe3X,GAAiB,GAC/CvB,SAASC,eAAiBnE,EAAEkE,SAASC,eAAerC,GAAGsb,IACvDlZ,SAASC,cAAcma,OAEvB7Y,GACA/D,EAAE+D,iBAGVjF,EAAEY,KAAK,eAAgBZ,EAAGkB,OAG9BlB,EAAEgb,YAAc,SAAU9Z,GAEtB,GADIA,EAAE6B,gBAAe7B,EAAIA,EAAE6B,gBACvBua,GAA2B,cAAXpc,EAAEsc,KAAtB,CACA,GAAItc,EAAE6c,wBAGF,MAFA/d,GAAEgd,QAAQC,OAAoB,cAAX/b,EAAEsc,KAAuBtc,EAAEwc,cAAc,GAAGC,MAAQzc,EAAEyc,WACzE3d,EAAEgd,QAAQE,OAAoB,cAAXhc,EAAEsc,KAAuBtc,EAAEwc,cAAc,GAAGE,MAAQ1c,EAAE0c,MAG7E,IAAI5d,EAAEH,OAAOuM,aAQT,MANApM,GAAEyb,YAAa,OACXS,IACAlc,EAAEgd,QAAQC,OAASjd,EAAEgd,QAAQG,SAAsB,cAAXjc,EAAEsc,KAAuBtc,EAAEwc,cAAc,GAAGC,MAAQzc,EAAEyc,MAC9F3d,EAAEgd,QAAQE,OAASld,EAAEgd,QAAQI,SAAsB,cAAXlc,EAAEsc,KAAuBtc,EAAEwc,cAAc,GAAGE,MAAQ1c,EAAE0c,MAC9FvB,EAAiB7U,KAAKsV,OAI9B,IAAIQ,GAAgB5Z,SAASC,eACrBzC,EAAEG,SAAWqC,SAASC,eAAiBnE,EAAE0B,EAAEG,QAAQC,GAAGsb,GAGtD,MAFAT,IAAU,OACVnc,EAAEyb,YAAa,EAOvB,IAHIW,GACApc,EAAEY,KAAK,cAAeZ,EAAGkB,KAEzBA,EAAEwc,eAAiBxc,EAAEwc,cAAc9b,OAAS,GAAhD,CAKA,GAHA5B,EAAEgd,QAAQG,SAAsB,cAAXjc,EAAEsc,KAAuBtc,EAAEwc,cAAc,GAAGC,MAAQzc,EAAEyc,MAC3E3d,EAAEgd,QAAQI,SAAsB,cAAXlc,EAAEsc,KAAuBtc,EAAEwc,cAAc,GAAGE,MAAQ1c,EAAE0c,MAEhD,mBAAhBtB,GAA6B,CACpC,GAAIzQ,GAA4H,IAA/GzL,KAAK4d,MAAM5d,KAAKwF,IAAI5F,EAAEgd,QAAQI,SAAWpd,EAAEgd,QAAQE,QAAS9c,KAAKwF,IAAI5F,EAAEgd,QAAQG,SAAWnd,EAAEgd,QAAQC,SAAiB7c,KAAK6d,EAC3I3B,GAActc,EAAEoD,eAAiByI,EAAa7L,EAAEH,OAAOgM,WAAc,GAAKA,EAAa7L,EAAEH,OAAOgM,WAUpG,GARIyQ,GACAtc,EAAEY,KAAK,sBAAuBZ,EAAGkB,GAEV,mBAAhBqc,IAA+Bvd,EAAE6a,QAAQqD,UAC5Cle,EAAEgd,QAAQG,WAAand,EAAEgd,QAAQC,QAAUjd,EAAEgd,QAAQI,WAAapd,EAAEgd,QAAQE,UAC5EK,GAAc,GAGjBrB,EAAL,CACA,GAAII,EAEA,YADAJ,GAAY,EAGhB,IAAKqB,IAAevd,EAAE6a,QAAQqD,QAA9B,CAGAle,EAAEyb,YAAa,EACfzb,EAAEY,KAAK,eAAgBZ,EAAGkB,GAC1BA,EAAE+D,iBACEjF,EAAEH,OAAOyM,2BAA6BtM,EAAEH,OAAO+a,QAC/C1Z,EAAEwa,kBAGDS,IACGtc,EAAOY,MACPT,EAAEU,UAEN8b,EAAiBxc,EAAEqG,sBACnBrG,EAAE4G,qBAAqB,GACnB5G,EAAE2H,WACF3H,EAAEyR,QAAQ0M,QAAQ,oFAElBne,EAAEH,OAAOS,UAAYN,EAAEgU,cACnBhU,EAAEH,OAAOkJ,6BACT/I,EAAEe,eAGFf,EAAEoU,iBAGVuI,GAAsB,EAElB3c,EAAEH,OAAO0N,aACTvN,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,OAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,mBAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,eAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,aAGtCsJ,GAAU,CAEV,IAAIkB,GAAOrd,EAAEgd,QAAQK,KAAOrd,EAAEoD,eAAiBpD,EAAEgd,QAAQG,SAAWnd,EAAEgd,QAAQC,OAASjd,EAAEgd,QAAQI,SAAWpd,EAAEgd,QAAQE,MAEtHG,IAAcrd,EAAEH,OAAO+L,WACnB5L,EAAE0E,MAAK2Y,GAAQA,GAEnBrd,EAAE6d,eAAiBR,EAAO,EAAI,OAAS,OACvCd,EAAmBc,EAAOb,CAE1B,IAAI4B,IAAsB,CAsB1B,IArBKf,EAAO,GAAKd,EAAmBvc,EAAE0G,gBAClC0X,GAAsB;AAClBpe,EAAEH,OAAOoN,aAAYsP,EAAmBvc,EAAE0G,eAAiB,EAAItG,KAAKie,KAAKre,EAAE0G,eAAiB8V,EAAiBa,EAAMrd,EAAEH,OAAOqN,mBAEpH,EAAPmQ,GAAYd,EAAmBvc,EAAE2G,iBACtCyX,GAAsB,EAClBpe,EAAEH,OAAOoN,aAAYsP,EAAmBvc,EAAE2G,eAAiB,EAAIvG,KAAKie,IAAIre,EAAE2G,eAAiB6V,EAAiBa,EAAMrd,EAAEH,OAAOqN,mBAG/HkR,IACAld,EAAE6c,yBAA0B,IAI3B/d,EAAEH,OAAOsD,kBAAyC,SAArBnD,EAAE6d,gBAAgDrB,EAAnBD,IAC7DA,EAAmBC,IAElBxc,EAAEH,OAAOwD,kBAAyC,SAArBrD,EAAE6d,gBAA6BtB,EAAmBC,IAChFD,EAAmBC,GAGlBxc,EAAEH,OAAOsM,aAAd,CAGA,GAAInM,EAAEH,OAAOwM,UAAY,EAAG,CACxB,KAAIjM,KAAKwF,IAAIyX,GAAQrd,EAAEH,OAAOwM,WAAaoQ,GAYvC,YADAF,EAAmBC,EAVnB,KAAKC,EAMD,MALAA,IAAqB,EACrBzc,EAAEgd,QAAQC,OAASjd,EAAEgd,QAAQG,SAC7Bnd,EAAEgd,QAAQE,OAASld,EAAEgd,QAAQI,SAC7Bb,EAAmBC,OACnBxc,EAAEgd,QAAQK,KAAOrd,EAAEoD,eAAiBpD,EAAEgd,QAAQG,SAAWnd,EAAEgd,QAAQC,OAASjd,EAAEgd,QAAQI,SAAWpd,EAAEgd,QAAQE,SAUnHld,EAAEH,OAAOsG,UAAYnG,EAAEH,OAAOwN,sBAC9BrN,EAAE+G,oBAEF/G,EAAEH,OAAOsG,WAEiB,IAAtB4W,EAAWnb,QACXmb,EAAWla,MACPuD,SAAUpG,EAAEgd,QAAQhd,EAAEoD,eAAiB,SAAW,UAClDkb,KAAMjC,IAGdU,EAAWla,MACPuD,SAAUpG,EAAEgd,QAAQhd,EAAEoD,eAAiB,WAAa,YACpDkb,MAAM,GAAKtc,QAAOwF,MAAQC,aAIlCzH,EAAE8G,eAAeyV,GAEjBvc,EAAE6G,oBAAoB0V,SAE1Bvc,EAAEib,WAAa,SAAU/Z,GAMrB,GALIA,EAAE6B,gBAAe7B,EAAIA,EAAE6B,eACvBqZ,GACApc,EAAEY,KAAK,aAAcZ,EAAGkB,GAE5Bkb,GAAsB,EACjBF,EAAL,CAEIlc,EAAEH,OAAO0N,YAAc4O,GAAWD,IAClClc,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,OAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,eAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,YAC9B7S,EAAEC,UAAU,GAAG2S,MAAMC,OAAS,OAIlC,IAAI0L,GAAe/W,KAAKsV,MACpB0B,EAAWD,EAAelC,CA4B9B,IAzBIrc,EAAEyb,aACFzb,EAAE4b,mBAAmB1a,GACrBlB,EAAEY,KAAK,QAASZ,EAAGkB,GACJ,IAAXsd,GAAmBD,EAAe1B,EAAiB,MAC/CH,GAAcxV,aAAawV,GAC/BA,EAAelc,WAAW,WACjBR,IACDA,EAAEH,OAAO8M,gBAAkB3M,EAAE2R,oBAAoB/P,OAAS,IAAMpC,EAAE0B,EAAEG,QAAQod,SAASze,EAAEH,OAAOkP,cAC9F/O,EAAE2R,oBAAoB+M,YAAY1e,EAAEH,OAAOuP,uBAE/CpP,EAAEY,KAAK,UAAWZ,EAAGkB,KACtB,MAGQ,IAAXsd,GAAmD,IAAhCD,EAAe1B,IAC9BH,GAAcxV,aAAawV,GAC/B1c,EAAEY,KAAK,cAAeZ,EAAGkB,KAIjC2b,EAAgBrV,KAAKsV,MACrBtc,WAAW,WACHR,IAAGA,EAAEyb,YAAa,IACvB,IAEES,IAAcC,IAAYnc,EAAE6d,gBAAqC,IAAnB7d,EAAEgd,QAAQK,MAAcd,IAAqBC,EAE5F,YADAN,EAAYC,GAAU,EAG1BD,GAAYC,GAAU,CAEtB,IAAIwC,EAOJ,IALIA,EADA3e,EAAEH,OAAOsM,aACInM,EAAE0E,IAAM1E,EAAEoS,WAAapS,EAAEoS,WAGxBmK,EAEdvc,EAAEH,OAAOsG,SAAU,CACnB,GAAIwY,GAAc3e,EAAE0G,eAEhB,WADA1G,GAAE4Z,QAAQ5Z,EAAE2U,YAGX,IAAIgK,GAAc3e,EAAE2G,eAOrB,YANI3G,EAAEyU,OAAO7S,OAAS5B,EAAEsU,SAAS1S,OAC7B5B,EAAE4Z,QAAQ5Z,EAAEsU,SAAS1S,OAAS,GAG9B5B,EAAE4Z,QAAQ5Z,EAAEyU,OAAO7S,OAAS,GAKpC,IAAI5B,EAAEH,OAAOqJ,iBAAkB,CAC3B,GAAI6T,EAAWnb,OAAS,EAAG,CACvB,GAAIgd,GAAgB7B,EAAW8B,MAAOC,EAAgB/B,EAAW8B,MAE7DE,EAAWH,EAAcxY,SAAW0Y,EAAc1Y,SAClDkY,EAAOM,EAAcN,KAAOQ,EAAcR,IAC9Cte,GAAEqS,SAAW0M,EAAWT,EACxBte,EAAEqS,SAAWrS,EAAEqS,SAAW,EACtBjS,KAAKwF,IAAI5F,EAAEqS,UAAYrS,EAAEH,OAAOyJ,0BAChCtJ,EAAEqS,SAAW,IAIbiM,EAAO,MAAQ,GAAItc,QAAOwF,MAAOC,UAAYmX,EAAcN,KAAQ,OACnEte,EAAEqS,SAAW,OAGjBrS,GAAEqS,SAAW,CAGjB0K,GAAWnb,OAAS,CACpB,IAAIod,GAAmB,IAAOhf,EAAEH,OAAOsJ,sBACnC8V,EAAmBjf,EAAEqS,SAAW2M,EAEhCE,EAAclf,EAAEoS,UAAY6M,CAC5Bjf,GAAE0E,MAAKwa,GAAgBA,EAC3B,IACIC,GADAC,GAAW,EAEXC,EAAsC,GAAvBjf,KAAKwF,IAAI5F,EAAEqS,UAAiBrS,EAAEH,OAAOwJ,2BACxD,IAAI6V,EAAclf,EAAE2G,eACZ3G,EAAEH,OAAOuJ,wBACL8V,EAAclf,EAAE2G,gBAAkB0Y,IAClCH,EAAclf,EAAE2G,eAAiB0Y,GAErCF,EAAsBnf,EAAE2G,eACxByY,GAAW,EACXzC,GAAsB,GAGtBuC,EAAclf,EAAE2G,mBAGnB,IAAIuY,EAAclf,EAAE0G,eACjB1G,EAAEH,OAAOuJ,wBACL8V,EAAclf,EAAE0G,eAAiB2Y,IACjCH,EAAclf,EAAE0G,eAAiB2Y,GAErCF,EAAsBnf,EAAE0G,eACxB0Y,GAAW,EACXzC,GAAsB,GAGtBuC,EAAclf,EAAE0G,mBAGnB,IAAI1G,EAAEH,OAAOoH,eAAgB,CAC9B,GACIgR,GADAqH,EAAI,CAER,KAAKA,EAAI,EAAGA,EAAItf,EAAEsU,SAAS1S,OAAQ0d,GAAK,EACpC,GAAItf,EAAEsU,SAASgL,IAAMJ,EAAa,CAC9BjH,EAAYqH,CACZ,OAKJJ,EADA9e,KAAKwF,IAAI5F,EAAEsU,SAAS2D,GAAaiH,GAAe9e,KAAKwF,IAAI5F,EAAEsU,SAAS2D,EAAY,GAAKiH,IAAqC,SAArBlf,EAAE6d,eACzF7d,EAAEsU,SAAS2D,GAEXjY,EAAEsU,SAAS2D,EAAY,GAEpCjY,EAAE0E,MAAKwa,GAAgBA,GAGhC,GAAmB,IAAflf,EAAEqS,SAEE2M,EADAhf,EAAE0E,IACiBtE,KAAKwF,MAAMsZ,EAAclf,EAAEoS,WAAapS,EAAEqS,UAG1CjS,KAAKwF,KAAKsZ,EAAclf,EAAEoS,WAAapS,EAAEqS,cAG/D,IAAIrS,EAAEH,OAAOoH,eAEd,WADAjH,GAAEoH,YAIFpH,GAAEH,OAAOuJ,wBAA0BgW,GACnCpf,EAAE8G,eAAeqY,GACjBnf,EAAE4G,qBAAqBoY,GACvBhf,EAAE6G,oBAAoBqY,GACtBlf,EAAEuf,oBACFvf,EAAE2H,WAAY,EACd3H,EAAEyR,QAAQ4C,cAAc,WACfrU,GAAM2c,IACX3c,EAAEY,KAAK,mBAAoBZ,GAE3BA,EAAE4G,qBAAqB5G,EAAEH,OAAOiJ,OAChC9I,EAAE6G,oBAAoBsY,GACtBnf,EAAEyR,QAAQ4C,cAAc,WACfrU,GACLA,EAAEwf,wBAGHxf,EAAEqS,UACTrS,EAAE8G,eAAeoY,GACjBlf,EAAE4G,qBAAqBoY,GACvBhf,EAAE6G,oBAAoBqY,GACtBlf,EAAEuf,oBACGvf,EAAE2H,YACH3H,EAAE2H,WAAY,EACd3H,EAAEyR,QAAQ4C,cAAc,WACfrU,GACLA,EAAEwf,sBAKVxf,EAAE8G,eAAeoY,GAGrBlf,EAAE+G,oBAMN,cAJK/G,EAAEH,OAAOqJ,kBAAoBsV,GAAYxe,EAAEH,OAAOqM,gBACnDlM,EAAE8G,iBACF9G,EAAE+G,sBAMV,GAAIhC,GAAG0a,EAAY,EAAGC,EAAY1f,EAAEoV,gBAAgB,EACpD,KAAKrQ,EAAI,EAAGA,EAAI/E,EAAEmV,WAAWvT,OAAQmD,GAAK/E,EAAEH,OAAO0L,eACU,mBAA9CvL,GAAEmV,WAAWpQ,EAAI/E,EAAEH,OAAO0L,gBAC7BoT,GAAc3e,EAAEmV,WAAWpQ,IAAM4Z,EAAa3e,EAAEmV,WAAWpQ,EAAI/E,EAAEH,OAAO0L,kBACxEkU,EAAY1a,EACZ2a,EAAY1f,EAAEmV,WAAWpQ,EAAI/E,EAAEH,OAAO0L,gBAAkBvL,EAAEmV,WAAWpQ,IAIrE4Z,GAAc3e,EAAEmV,WAAWpQ,KAC3B0a,EAAY1a,EACZ2a,EAAY1f,EAAEmV,WAAWnV,EAAEmV,WAAWvT,OAAS,GAAK5B,EAAEmV,WAAWnV,EAAEmV,WAAWvT,OAAS,GAMnG,IAAI+d,IAAShB,EAAa3e,EAAEmV,WAAWsK,IAAcC,CAErD,IAAIlB,EAAWxe,EAAEH,OAAOqM,aAAc,CAElC,IAAKlM,EAAEH,OAAOmM,WAEV,WADAhM,GAAE4Z,QAAQ5Z,EAAE2U,YAGS,UAArB3U,EAAE6d,iBACE8B,GAAS3f,EAAEH,OAAOoM,gBAAiBjM,EAAE4Z,QAAQ6F,EAAYzf,EAAEH,OAAO0L,gBACjEvL,EAAE4Z,QAAQ6F,IAGM,SAArBzf,EAAE6d,iBACE8B,EAAS,EAAI3f,EAAEH,OAAOoM,gBAAkBjM,EAAE4Z,QAAQ6F,EAAYzf,EAAEH,OAAO0L,gBACtEvL,EAAE4Z,QAAQ6F,QAGlB,CAED,IAAKzf,EAAEH,OAAOkM,YAEV,WADA/L,GAAE4Z,QAAQ5Z,EAAE2U,YAGS,UAArB3U,EAAE6d,gBACF7d,EAAE4Z,QAAQ6F,EAAYzf,EAAEH,OAAO0L,gBAGV,SAArBvL,EAAE6d,gBACF7d,EAAE4Z,QAAQ6F,MAOtBzf,EAAEgB,SAAW,SAAU4e,EAAY9W,GAC/B,MAAO9I,GAAE4Z,QAAQgG,EAAY9W,GAAO,GAAM,IAE9C9I,EAAE4Z,QAAU,SAAUgG,EAAY9W,EAAO+W,EAAc1L,GACvB,mBAAjB0L,KAA8BA,GAAe,GAC9B,mBAAfD,KAA4BA,EAAa,GACnC,EAAbA,IAAgBA,EAAa,GACjC5f,EAAE8X,UAAY1X,KAAKC,MAAMuf,EAAa5f,EAAEH,OAAO0L,gBAC3CvL,EAAE8X,WAAa9X,EAAEsU,SAAS1S,SAAQ5B,EAAE8X,UAAY9X,EAAEsU,SAAS1S,OAAS,EAExE,IAAIwQ,IAAcpS,EAAEsU,SAAStU,EAAE8X,UAE3B9X,GAAEH,OAAOS,UAAYN,EAAEgU,cACnBG,IAAanU,EAAEH,OAAOkJ,6BACtB/I,EAAEoU,cAActL,GAGhB9I,EAAEe,gBAIVf,EAAE8G,eAAesL,EAGjB,KAAK,GAAIrN,GAAI,EAAGA,EAAI/E,EAAEmV,WAAWvT,OAAQmD,KAC/B3E,KAAKC,MAAkB,IAAZ+R,IAAoBhS,KAAKC,MAAwB,IAAlBL,EAAEmV,WAAWpQ,MACzD6a,EAAa7a,EAKrB,QAAK/E,EAAEH,OAAOsD,kBAAoBiP,EAAYpS,EAAEoS,WAAaA,EAAYpS,EAAE0G,gBAChE,GAEN1G,EAAEH,OAAOwD,kBAAoB+O,EAAYpS,EAAEoS,WAAaA,EAAYpS,EAAE2G,iBAClE3G,EAAE2U,aAAe,KAAOiL,GAAoB,GAIhC,mBAAV9W,KAAuBA,EAAQ9I,EAAEH,OAAOiJ,OACnD9I,EAAE+X,cAAgB/X,EAAE2U,aAAe,EACnC3U,EAAE2U,YAAciL,EAEX5f,EAAE0E,MAAQ0N,IAAcpS,EAAEoS,YAAgBpS,EAAE0E,KAAO0N,IAAcpS,EAAEoS,WAEhEpS,EAAEH,OAAO0J,YACTvJ,EAAEuU,mBAENvU,EAAEgH,gBACsB,UAApBhH,EAAEH,OAAO6J,QACT1J,EAAE6G,oBAAoBuL,IAEnB,IAEXpS,EAAEgH,gBACFhH,EAAEuf,kBAAkBM,GAEN,IAAV/W,GACA9I,EAAE6G,oBAAoBuL,GACtBpS,EAAE4G,qBAAqB,GACvB5G,EAAEwf,gBAAgBK,KAGlB7f,EAAE6G,oBAAoBuL,GACtBpS,EAAE4G,qBAAqBkC,GAClB9I,EAAE2H,YACH3H,EAAE2H,WAAY,EACd3H,EAAEyR,QAAQ4C,cAAc,WACfrU,GACLA,EAAEwf,gBAAgBK,QAMvB,KAGX7f,EAAEuf,kBAAoB,SAAUM,GACA,mBAAjBA,KAA8BA,GAAe,GACpD7f,EAAEH,OAAO0J,YACTvJ,EAAEuU,mBAEFvU,EAAEsH,MAAMtH,EAAEsH,KAAKiY,oBACfM,IACA7f,EAAEY,KAAK,oBAAqBZ,GACxBA,EAAE2U,cAAgB3U,EAAE+X,gBACpB/X,EAAEY,KAAK,qBAAsBZ,GACzBA,EAAE2U,YAAc3U,EAAE+X,cAClB/X,EAAEY,KAAK,mBAAoBZ,GAG3BA,EAAEY,KAAK,mBAAoBZ,MAM3CA,EAAEwf,gBAAkB,SAAUK,GAC1B7f,EAAE2H,WAAY,EACd3H,EAAE4G,qBAAqB,GACK,mBAAjBiZ,KAA8BA,GAAe,GACpD7f,EAAEsH,MAAMtH,EAAEsH,KAAKkY,kBACfK,IACA7f,EAAEY,KAAK,kBAAmBZ,GACtBA,EAAE2U,cAAgB3U,EAAE+X,gBACpB/X,EAAEY,KAAK,mBAAoBZ,GACvBA,EAAE2U,YAAc3U,EAAE+X,cAClB/X,EAAEY,KAAK,iBAAkBZ,GAGzBA,EAAEY,KAAK,iBAAkBZ,KAIjCA,EAAEH,OAAOmL,SAAWhL,EAAEgL,SACtBhL,EAAEgL,QAAQ8U,WAIlB9f,EAAEmF,UAAY,SAAU0a,EAAc/W,EAAOqL,GACzC,GAAInU,EAAEH,OAAOY,KAAM,CACf,GAAIT,EAAE2H,UAAW,OAAO,CACxB3H,GAAEU,SACeV,GAAEC,UAAU,GAAG8f,UAChC,OAAO/f,GAAE4Z,QAAQ5Z,EAAE2U,YAAc3U,EAAEH,OAAO0L,eAAgBzC,EAAO+W,EAAc1L,GAE9E,MAAOnU,GAAE4Z,QAAQ5Z,EAAE2U,YAAc3U,EAAEH,OAAO0L,eAAgBzC,EAAO+W,EAAc1L,IAExFnU,EAAEW,WAAa,SAAUmI,GACrB,MAAO9I,GAAEmF,WAAU,EAAM2D,GAAO,IAEpC9I,EAAEoF,UAAY,SAAUya,EAAc/W,EAAOqL,GACzC,GAAInU,EAAEH,OAAOY,KAAM,CACf,GAAIT,EAAE2H,UAAW,OAAO,CACxB3H,GAAEU,SACeV,GAAEC,UAAU,GAAG8f,UAChC,OAAO/f,GAAE4Z,QAAQ5Z,EAAE2U,YAAc,EAAG7L,EAAO+W,EAAc1L,GAExD,MAAOnU,GAAE4Z,QAAQ5Z,EAAE2U,YAAc,EAAG7L,EAAO+W,EAAc1L,IAElEnU,EAAEggB,WAAa,SAAUlX,GACrB,MAAO9I,GAAEoF,WAAU,EAAM0D,GAAO,IAEpC9I,EAAEoH,WAAa,SAAUyY,EAAc/W,EAAOqL,GAC1C,MAAOnU,GAAE4Z,QAAQ5Z,EAAE2U,YAAa7L,EAAO+W,IAM3C7f,EAAE4G,qBAAuB,SAAUqZ,EAAUC,GACzClgB,EAAEyR,QAAQmH,WAAWqH,GACG,UAApBjgB,EAAEH,OAAO6J,QAAsB1J,EAAEmgB,QAAQngB,EAAEH,OAAO6J,SAClD1J,EAAEmgB,QAAQngB,EAAEH,OAAO6J,QAAQ0W,cAAcH,GAEzCjgB,EAAEH,OAAO4K,UAAYzK,EAAEyK,UACvBzK,EAAEyK,SAAS2V,cAAcH,GAEzBjgB,EAAEH,OAAO6K,WAAa1K,EAAE0K,WACxB1K,EAAE0K,UAAU0V,cAAcH,GAE1BjgB,EAAEH,OAAOqO,SAAWlO,EAAE0Z,YACtB1Z,EAAE0Z,WAAW0G,cAAcH,EAAUC,GAEzClgB,EAAEY,KAAK,kBAAmBZ,EAAGigB,IAEjCjgB,EAAE6G,oBAAsB,SAAUuL,EAAWrL,EAAmBmZ,GAC5D,GAAIG,GAAI,EAAGC,EAAI,EAAGC,EAAI,CAClBvgB,GAAEoD,eACFid,EAAIrgB,EAAE0E,KAAO0N,EAAYA,EAGzBkO,EAAIlO,EAGJpS,EAAEH,OAAO8L,eACT0U,EAAIngB,EAAMmgB,GACVC,EAAIpgB,EAAMogB,IAGTtgB,EAAEH,OAAO4J,mBACNzJ,EAAEqR,QAAQE,aAAcvR,EAAEyR,QAAQpJ,UAAU,eAAiBgY,EAAI,OAASC,EAAI,OAASC,EAAI,OAC1FvgB,EAAEyR,QAAQpJ,UAAU,aAAegY,EAAI,OAASC,EAAI,QAG7DtgB,EAAEoS,UAAYpS,EAAEoD,eAAiBid,EAAIC,CAGrC,IAAIxY,GACA8P,EAAiB5X,EAAE2G,eAAiB3G,EAAE0G,cAEtCoB,GADmB,IAAnB8P,EACW,GAGCxF,EAAYpS,EAAE0G,gBAAkB,EAE5CoB,IAAa9H,EAAE8H,UACf9H,EAAE8G,eAAesL,GAGjBrL,GAAmB/G,EAAE+G,oBACD,UAApB/G,EAAEH,OAAO6J,QAAsB1J,EAAEmgB,QAAQngB,EAAEH,OAAO6J,SAClD1J,EAAEmgB,QAAQngB,EAAEH,OAAO6J,QAAQ8W,aAAaxgB,EAAEoS,WAE1CpS,EAAEH,OAAO4K,UAAYzK,EAAEyK,UACvBzK,EAAEyK,SAAS+V,aAAaxgB,EAAEoS,WAE1BpS,EAAEH,OAAO6K,WAAa1K,EAAE0K,WACxB1K,EAAE0K,UAAU8V,aAAaxgB,EAAEoS,WAE3BpS,EAAEH,OAAOqO,SAAWlO,EAAE0Z,YACtB1Z,EAAE0Z,WAAW8G,aAAaxgB,EAAEoS,UAAW8N,GAE3ClgB,EAAEY,KAAK,iBAAkBZ,EAAGA,EAAEoS,YAGlCpS,EAAEygB,aAAe,SAAUrf,EAAIsf,GAC3B,GAAIC,GAAQC,EAAcC,EAAUC,CAOpC,OAJoB,mBAATJ,KACPA,EAAO,KAGP1gB,EAAEH,OAAO4J,iBACFzJ,EAAE0E,KAAO1E,EAAEoS,UAAYpS,EAAEoS,WAGpCyO,EAAW7e,OAAO+e,iBAAiB3f,EAAI,MACnCY,OAAOgf,iBACPJ,EAAeC,EAASxY,WAAawY,EAASI,gBAC1CL,EAAaM,MAAM,KAAKtf,OAAS,IACjCgf,EAAeA,EAAaM,MAAM,MAAMC,IAAI,SAAShhB,GACjD,MAAOA,GAAEqV,QAAQ,IAAI,OACtBrD,KAAK,OAIZ2O,EAAkB,GAAI9e,QAAOgf,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAG5EE,EAAkBD,EAASO,cAAgBP,EAASQ,YAAcR,EAASS,aAAeT,EAASU,aAAgBV,EAASxY,WAAawY,EAASW,iBAAiB,aAAahM,QAAQ,aAAc,sBACtMmL,EAASG,EAAgBW,WAAWP,MAAM,MAGjC,MAATR,IAGIE,EADA5e,OAAOgf,gBACQF,EAAgBY,IAER,KAAlBf,EAAO/e,OACG2T,WAAWoL,EAAO,KAGlBpL,WAAWoL,EAAO,KAE5B,MAATD,IAGIE,EADA5e,OAAOgf,gBACQF,EAAgBa,IAER,KAAlBhB,EAAO/e,OACG2T,WAAWoL,EAAO,KAGlBpL,WAAWoL,EAAO,KAErC3gB,EAAE0E,KAAOkc,IAAcA,GAAgBA,GACpCA,GAAgB,IAE3B5gB,EAAEqG,oBAAsB,SAAUqa,GAI9B,MAHoB,mBAATA,KACPA,EAAO1gB,EAAEoD,eAAiB,IAAM,KAE7BpD,EAAEygB,aAAazgB,EAAEyR,QAAQ,GAAIiP,IAMxC1gB,EAAE4C,aAoBF5C,EAAE4hB,cAAgB,WACd,GAAI5hB,EAAEH,OAAOyP,eAET,IAAK,GADDuS,GAAmB7hB,EAAEC,UAAUsB,UAC1BwD,EAAI,EAAGA,EAAI8c,EAAiBjgB,OAAQmD,IACzClD,EAAaggB,EAAiB9c,GAKtClD,GAAa7B,EAAEC,UAAU,IAAKyC,WAAW,IAGzCb,EAAa7B,EAAEyR,QAAQ,IAAKhP,YAAY,KAE5CzC,EAAE8hB,oBAAsB,WACpB,IAAK,GAAI/c,GAAI,EAAGA,EAAI/E,EAAE4C,UAAUhB,OAAQmD,IACpC/E,EAAE4C,UAAUmC,GAAGgd,YAEnB/hB,GAAE4C,cAMN5C,EAAEgiB,WAAa,WAEXhiB,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,WAAa,IAAMxO,EAAEH,OAAO8O,qBAAqBsT,QAEnF,IAAIxN,GAASzU,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,WAEjB,UAA3BxO,EAAEH,OAAOuL,eAA6BpL,EAAEH,OAAOoO,eAAcjO,EAAEH,OAAOoO,aAAewG,EAAO7S,QAE/F5B,EAAEiO,aAAe7F,SAASpI,EAAEH,OAAOoO,cAAgBjO,EAAEH,OAAOuL,cAAe,IAC3EpL,EAAEiO,aAAejO,EAAEiO,aAAejO,EAAEH,OAAOmO,qBACvChO,EAAEiO,aAAewG,EAAO7S,SACxB5B,EAAEiO,aAAewG,EAAO7S,OAG5B,IAA2CmD,GAAvCmd,KAAoBC,IAOxB,KANA1N,EAAO1U,KAAK,SAAU2B,EAAON,GACzB,GAAIoT,GAAQhV,EAAED,KACVmC,GAAQ1B,EAAEiO,cAAckU,EAAatf,KAAKzB,GAC1CM,EAAQ+S,EAAO7S,QAAUF,GAAS+S,EAAO7S,OAAS5B,EAAEiO,cAAciU,EAAcrf,KAAKzB,GACzFoT,EAAMtM,KAAK,0BAA2BxG,KAErCqD,EAAI,EAAGA,EAAIod,EAAavgB,OAAQmD,IACjC/E,EAAEyR,QAAQ2Q,OAAO5iB,EAAE2iB,EAAapd,GAAGsd,WAAU,IAAOxQ,SAAS7R,EAAEH,OAAO8O,qBAE1E,KAAK5J,EAAImd,EAActgB,OAAS,EAAGmD,GAAK,EAAGA,IACvC/E,EAAEyR,QAAQ6Q,QAAQ9iB,EAAE0iB,EAAcnd,GAAGsd,WAAU,IAAOxQ,SAAS7R,EAAEH,OAAO8O,uBAGhF3O,EAAEiR,YAAc,WACZjR,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,WAAa,IAAMxO,EAAEH,OAAO8O,qBAAqBsT,SACnFjiB,EAAEyU,OAAO8N,WAAW,4BAExBviB,EAAEkR,OAAS,SAAUsR,GACjB,GAAIC,GAAWziB,EAAE2U,YAAc3U,EAAEiO,YACjCjO,GAAEiR,cACFjR,EAAEgiB,aACFhiB,EAAEkV,mBACEsN,GACAxiB,EAAE4Z,QAAQ6I,EAAWziB,EAAEiO,aAAc,GAAG,IAIhDjO,EAAEU,QAAU,WACR,GAAIgiB,EAEA1iB,GAAE2U,YAAc3U,EAAEiO,cAClByU,EAAW1iB,EAAEyU,OAAO7S,OAA0B,EAAjB5B,EAAEiO,aAAmBjO,EAAE2U,YACpD+N,GAAsB1iB,EAAEiO,aACxBjO,EAAE4Z,QAAQ8I,EAAU,GAAG,GAAO,KAGG,SAA3B1iB,EAAEH,OAAOuL,eAA4BpL,EAAE2U,aAAgC,EAAjB3U,EAAEiO,cAAsBjO,EAAE2U,YAAc3U,EAAEyU,OAAO7S,OAAkC,EAAzB5B,EAAEH,OAAOuL,iBAC/HsX,GAAY1iB,EAAEyU,OAAO7S,OAAS5B,EAAE2U,YAAc3U,EAAEiO,aAChDyU,GAAsB1iB,EAAEiO,aACxBjO,EAAE4Z,QAAQ8I,EAAU,GAAG,GAAO,KAMtC1iB,EAAE2iB,YAAc,SAAUlO,GAItB,GAHIzU,EAAEH,OAAOY,MACTT,EAAEiR,cAEgB,gBAAXwD,IAAuBA,EAAO7S,OACrC,IAAK,GAAImD,GAAI,EAAGA,EAAI0P,EAAO7S,OAAQmD,IAC3B0P,EAAO1P,IAAI/E,EAAEyR,QAAQ2Q,OAAO3N,EAAO1P,QAI3C/E,GAAEyR,QAAQ2Q,OAAO3N,EAEjBzU,GAAEH,OAAOY,MACTT,EAAEgiB,aAEAhiB,EAAEH,OAAOsC,UAAYnC,EAAEqR,QAAQlP,UACjCnC,EAAE6T,QAAO,IAGjB7T,EAAE4iB,aAAe,SAAUnO,GACnBzU,EAAEH,OAAOY,MACTT,EAAEiR,aAEN,IAAI4G,GAAiB7X,EAAE2U,YAAc,CACrC,IAAsB,gBAAXF,IAAuBA,EAAO7S,OAAQ,CAC7C,IAAK,GAAImD,GAAI,EAAGA,EAAI0P,EAAO7S,OAAQmD,IAC3B0P,EAAO1P,IAAI/E,EAAEyR,QAAQ6Q,QAAQ7N,EAAO1P,GAE5C8S,GAAiB7X,EAAE2U,YAAcF,EAAO7S,WAGxC5B,GAAEyR,QAAQ6Q,QAAQ7N,EAElBzU,GAAEH,OAAOY,MACTT,EAAEgiB,aAEAhiB,EAAEH,OAAOsC,UAAYnC,EAAEqR,QAAQlP,UACjCnC,EAAE6T,QAAO,GAEb7T,EAAE4Z,QAAQ/B,EAAgB,GAAG,IAEjC7X,EAAE6iB,YAAc,SAAUC,GAClB9iB,EAAEH,OAAOY,OACTT,EAAEiR,cACFjR,EAAEyU,OAASzU,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO2O,YAEjD,IACIuU,GADAlL,EAAiB7X,EAAE2U,WAEvB,IAA6B,gBAAlBmO,IAA8BA,EAAclhB,OAAQ,CAC3D,IAAK,GAAImD,GAAI,EAAGA,EAAI+d,EAAclhB,OAAQmD,IACtCge,EAAgBD,EAAc/d,GAC1B/E,EAAEyU,OAAOsO,IAAgB/iB,EAAEyU,OAAOC,GAAGqO,GAAed,SACpCpK,EAAhBkL,GAAgClL,GAExCA,GAAiBzX,KAAK4V,IAAI6B,EAAgB,OAG1CkL,GAAgBD,EACZ9iB,EAAEyU,OAAOsO,IAAgB/iB,EAAEyU,OAAOC,GAAGqO,GAAed,SACpCpK,EAAhBkL,GAAgClL,IACpCA,EAAiBzX,KAAK4V,IAAI6B,EAAgB,EAG1C7X,GAAEH,OAAOY,MACTT,EAAEgiB,aAGAhiB,EAAEH,OAAOsC,UAAYnC,EAAEqR,QAAQlP,UACjCnC,EAAE6T,QAAO,GAET7T,EAAEH,OAAOY,KACTT,EAAE4Z,QAAQ/B,EAAiB7X,EAAEiO,aAAc,GAAG,GAG9CjO,EAAE4Z,QAAQ/B,EAAgB,GAAG,IAIrC7X,EAAEgjB,gBAAkB,WAEhB,IAAK,GADDF,MACK/d,EAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IACjC+d,EAAcjgB,KAAKkC,EAEvB/E,GAAE6iB,YAAYC,IAOlB9iB,EAAEmgB,SACE5V,MACIiW,aAAc,WACV,IAAK,GAAIzb,GAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IAAK,CACtC,GAAIyP,GAAQxU,EAAEyU,OAAOC,GAAG3P,GACpBN,EAAS+P,EAAM,GAAG0C,kBAClB+L,GAAMxe,CACLzE,GAAEH,OAAO4J,mBAAkBwZ,GAAUjjB,EAAEoS,UAC5C,IAAI8Q,GAAK,CACJljB,GAAEoD,iBACH8f,EAAKD,EACLA,EAAK,EAET,IAAIE,GAAenjB,EAAEH,OAAO0K,KAAKC,UACzBpK,KAAK4V,IAAI,EAAI5V,KAAKwF,IAAI4O,EAAM,GAAG1M,UAAW,GAC1C,EAAI1H,KAAKmZ,IAAInZ,KAAK4V,IAAIxB,EAAM,GAAG1M,SAAU,IAAK,EACtD0M,GACKzC,KACGqR,QAASD,IAEZ9a,UAAU,eAAiB4a,EAAK,OAASC,EAAK,cAK3D9C,cAAe,SAAUH,GAErB,GADAjgB,EAAEyU,OAAOmE,WAAWqH,GAChBjgB,EAAEH,OAAO4J,kBAAiC,IAAbwW,EAAgB,CAC7C,GAAIoD,IAAiB,CACrBrjB,GAAEyU,OAAOJ,cAAc,WACnB,IAAIgP,GACCrjB,EAAL,CACAqjB,GAAiB,EACjBrjB,EAAE2H,WAAY,CAEd,KAAK,GADD2b,IAAiB,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACzFve,EAAI,EAAGA,EAAIue,EAAc1hB,OAAQmD,IACtC/E,EAAEyR,QAAQ0M,QAAQmF,EAAcve,UAMpDkF,MACIuW,aAAc,WACV,IAAK,GAAIzb,GAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IAAK,CACtC,GAAIyP,GAAQxU,EAAEyU,OAAOC,GAAG3P,GACpB+C,EAAW0M,EAAM,GAAG1M,QACpB9H,GAAEH,OAAOoK,KAAKC,gBACdpC,EAAW1H,KAAK4V,IAAI5V,KAAKmZ,IAAI/E,EAAM,GAAG1M,SAAU,GAAI,IAExD,IAAIrD,GAAS+P,EAAM,GAAG0C,kBAClBtN,EAAS,KAAO9B,EAChByb,EAAU3Z,EACV4Z,EAAU,EACVP,GAAMxe,EACNye,EAAK,CAaT,IAZKljB,EAAEoD,eAMEpD,EAAE0E,MACP6e,GAAWA,IANXL,EAAKD,EACLA,EAAK,EACLO,GAAWD,EACXA,EAAU,GAMd/O,EAAM,GAAG5B,MAAM6Q,QAAUrjB,KAAKwF,IAAIxF,KAAKF,MAAM4H,IAAa9H,EAAEyU,OAAO7S,OAE/D5B,EAAEH,OAAOoK,KAAKD,aAAc,CAE5B,GAAI0Z,GAAe1jB,EAAEoD,eAAiBoR,EAAM5C,KAAK,6BAA+B4C,EAAM5C,KAAK,4BACvF+R,EAAc3jB,EAAEoD,eAAiBoR,EAAM5C,KAAK,8BAAgC4C,EAAM5C,KAAK,8BAC/D,KAAxB8R,EAAa9hB,SACb8hB,EAAelkB,EAAE,oCAAsCQ,EAAEoD,eAAiB,OAAS,OAAS,YAC5FoR,EAAM4N,OAAOsB,IAEU,IAAvBC,EAAY/hB,SACZ+hB,EAAcnkB,EAAE,oCAAsCQ,EAAEoD,eAAiB,QAAU,UAAY,YAC/FoR,EAAM4N,OAAOuB,IAEbD,EAAa9hB,SAAQ8hB,EAAa,GAAG9Q,MAAMwQ,QAAUhjB,KAAK4V,KAAKlO,EAAU,IACzE6b,EAAY/hB,SAAQ+hB,EAAY,GAAG/Q,MAAMwQ,QAAUhjB,KAAK4V,IAAIlO,EAAU,IAG9E0M,EACKnM,UAAU,eAAiB4a,EAAK,OAASC,EAAK,oBAAsBM,EAAU,gBAAkBD,EAAU,UAGvHnD,cAAe,SAAUH,GAErB,GADAjgB,EAAEyU,OAAOmE,WAAWqH,GAAUrO,KAAK,gHAAgHgH,WAAWqH,GAC1JjgB,EAAEH,OAAO4J,kBAAiC,IAAbwW,EAAgB,CAC7C,GAAIoD,IAAiB,CACrBrjB,GAAEyU,OAAOC,GAAG1U,EAAE2U,aAAaN,cAAc,WACrC,IAAIgP,GACCrjB,GACAR,EAAED,MAAMkf,SAASze,EAAEH,OAAO4O,kBAA/B,CACA4U,GAAiB,EACjBrjB,EAAE2H,WAAY,CAEd,KAAK,GADD2b,IAAiB,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACzFve,EAAI,EAAGA,EAAIue,EAAc1hB,OAAQmD,IACtC/E,EAAEyR,QAAQ0M,QAAQmF,EAAcve,UAMpDoF,MACIqW,aAAc,WACV,GAAuBoD,GAAnBC,EAAgB,CAChB7jB,GAAEH,OAAOsK,KAAKC,SACVpK,EAAEoD,gBACFwgB,EAAa5jB,EAAEyR,QAAQG,KAAK,uBACF,IAAtBgS,EAAWhiB,SACXgiB,EAAapkB,EAAE,0CACfQ,EAAEyR,QAAQ2Q,OAAOwB,IAErBA,EAAW7R,KAAKjN,OAAQ9E,EAAE6E,MAAQ,SAGlC+e,EAAa5jB,EAAEC,UAAU2R,KAAK,uBACJ,IAAtBgS,EAAWhiB,SACXgiB,EAAapkB,EAAE,0CACfQ,EAAEC,UAAUmiB,OAAOwB,KAI/B,KAAK,GAAI7e,GAAI,EAAGA,EAAI/E,EAAEyU,OAAO7S,OAAQmD,IAAK,CACtC,GAAIyP,GAAQxU,EAAEyU,OAAOC,GAAG3P,GACpB+e,EAAiB,GAAJ/e,EACb7E,EAAQE,KAAKC,MAAMyjB,EAAa,IAChC9jB,GAAE0E,MACFof,GAAcA,EACd5jB,EAAQE,KAAKC,OAAOyjB,EAAa,KAErC,IAAIhc,GAAW1H,KAAK4V,IAAI5V,KAAKmZ,IAAI/E,EAAM,GAAG1M,SAAU,GAAI,IACpDmb,EAAK,EAAGC,EAAK,EAAGa,EAAK,CACrBhf,GAAI,IAAM,GACVke,EAAe,GAAR/iB,EAAYF,EAAEiV,KACrB8O,EAAK,IAEChf,EAAI,GAAK,IAAM,GACrBke,EAAK,EACLc,EAAe,GAAR7jB,EAAYF,EAAEiV,OAEflQ,EAAI,GAAK,IAAM,GACrBke,EAAKjjB,EAAEiV,KAAe,EAAR/U,EAAYF,EAAEiV,KAC5B8O,EAAK/jB,EAAEiV,OAEDlQ,EAAI,GAAK,IAAM,IACrBke,GAAOjjB,EAAEiV,KACT8O,EAAK,EAAI/jB,EAAEiV,KAAgB,EAATjV,EAAEiV,KAAW/U,GAE/BF,EAAE0E,MACFue,GAAMA,GAGLjjB,EAAEoD,iBACH8f,EAAKD,EACLA,EAAK,EAGT,IAAI5a,GAAY,YAAcrI,EAAEoD,eAAiB,GAAK0gB,GAAc,iBAAmB9jB,EAAEoD,eAAiB0gB,EAAa,GAAK,oBAAsBb,EAAK,OAASC,EAAK,OAASa,EAAK,KAMnL,IALgB,GAAZjc,GAAiBA,EAAW,KAC5B+b,EAAoB,GAAJ9e,EAAoB,GAAX+C,EACrB9H,EAAE0E,MAAKmf,EAAqB,IAAJ9e,EAAoB,GAAX+C,IAEzC0M,EAAMnM,UAAUA,GACZrI,EAAEH,OAAOsK,KAAKH,aAAc,CAE5B,GAAI0Z,GAAe1jB,EAAEoD,eAAiBoR,EAAM5C,KAAK,6BAA+B4C,EAAM5C,KAAK,4BACvF+R,EAAc3jB,EAAEoD,eAAiBoR,EAAM5C,KAAK,8BAAgC4C,EAAM5C,KAAK,8BAC/D,KAAxB8R,EAAa9hB,SACb8hB,EAAelkB,EAAE,oCAAsCQ,EAAEoD,eAAiB,OAAS,OAAS,YAC5FoR,EAAM4N,OAAOsB,IAEU,IAAvBC,EAAY/hB,SACZ+hB,EAAcnkB,EAAE,oCAAsCQ,EAAEoD,eAAiB,QAAU,UAAY,YAC/FoR,EAAM4N,OAAOuB,IAEbD,EAAa9hB,SAAQ8hB,EAAa,GAAG9Q,MAAMwQ,QAAUhjB,KAAK4V,KAAKlO,EAAU,IACzE6b,EAAY/hB,SAAQ+hB,EAAY,GAAG/Q,MAAMwQ,QAAUhjB,KAAK4V,IAAIlO,EAAU,KAUlF,GAPA9H,EAAEyR,QAAQM,KACNiS,2BAA4B,YAAehkB,EAAEiV,KAAO,EAAK,KACzDgP,wBAAyB,YAAejkB,EAAEiV,KAAO,EAAK,KACtDiP,uBAAwB,YAAelkB,EAAEiV,KAAO,EAAK,KACrDkP,mBAAoB,YAAenkB,EAAEiV,KAAO,EAAK,OAGjDjV,EAAEH,OAAOsK,KAAKC,OACd,GAAIpK,EAAEoD,eACFwgB,EAAWvb,UAAU,qBAAuBrI,EAAE6E,MAAQ,EAAI7E,EAAEH,OAAOsK,KAAKE,cAAgB,QAAWrK,EAAE6E,MAAQ,EAAK,0CAA6C7E,EAAEH,OAAOsK,KAAgB,YAAI,SAE3L,CACD,GAAIia,GAAchkB,KAAKwF,IAAIie,GAA4D,GAA3CzjB,KAAKC,MAAMD,KAAKwF,IAAIie,GAAiB,IAC7EQ,EAAa,KAAOjkB,KAAKkkB,IAAkB,EAAdF,EAAkBhkB,KAAK6d,GAAK,KAAO,EAAI7d,KAAKmkB,IAAkB,EAAdH,EAAkBhkB,KAAK6d,GAAK,KAAO,GAChHuG,EAASxkB,EAAEH,OAAOsK,KAAKG,YACvBma,EAASzkB,EAAEH,OAAOsK,KAAKG,YAAc+Z,EACrC5f,EAASzE,EAAEH,OAAOsK,KAAKE,YAC3BuZ,GAAWvb,UAAU,WAAamc,EAAS,QAAUC,EAAS,uBAAyBzkB,EAAE8E,OAAS,EAAIL,GAAU,QAAWzE,EAAE8E,OAAS,EAAI2f,EAAU,uBAG5J,GAAIC,GAAW1kB,EAAE2kB,UAAY3kB,EAAE4kB,aAAiB5kB,EAAEiV,KAAO,EAAK,CAC9DjV,GAAEyR,QAAQpJ,UAAU,qBAAuBqc,EAAU,gBAAkB1kB,EAAEoD,eAAiB,EAAIygB,GAAiB,iBAAmB7jB,EAAEoD,gBAAkBygB,EAAgB,GAAK,SAE/KzD,cAAe,SAAUH,GACrBjgB,EAAEyU,OAAOmE,WAAWqH,GAAUrO,KAAK,gHAAgHgH,WAAWqH,GAC1JjgB,EAAEH,OAAOsK,KAAKC,SAAWpK,EAAEoD,gBAC3BpD,EAAEC,UAAU2R,KAAK,uBAAuBgH,WAAWqH,KAI/DtW,WACI6W,aAAc,WAMV,IAAK,GALDnY,GAAYrI,EAAEoS,UACdyS,EAAS7kB,EAAEoD,gBAAkBiF,EAAYrI,EAAE6E,MAAQ,GAAKwD,EAAYrI,EAAE8E,OAAS,EAC/E8E,EAAS5J,EAAEoD,eAAiBpD,EAAEH,OAAO8J,UAAUC,QAAS5J,EAAEH,OAAO8J,UAAUC,OAC3EwI,EAAYpS,EAAEH,OAAO8J,UAAUG,MAE1B/E,EAAI,EAAGnD,EAAS5B,EAAEyU,OAAO7S,OAAYA,EAAJmD,EAAYA,IAAK,CACvD,GAAIyP,GAAQxU,EAAEyU,OAAOC,GAAG3P,GACpBkR,EAAYjW,EAAEoV,gBAAgBrQ,GAC9B+f,EAActQ,EAAM,GAAG0C,kBACvB6N,GAAoBF,EAASC,EAAc7O,EAAY,GAAKA,EAAYjW,EAAEH,OAAO8J,UAAUI,SAE3FwZ,EAAUvjB,EAAEoD,eAAiBwG,EAASmb,EAAmB,EACzDvB,EAAUxjB,EAAEoD,eAAiB,EAAIwG,EAASmb,EAE1CC,GAAc5S,EAAYhS,KAAKwF,IAAImf,GAEnCE,EAAajlB,EAAEoD,eAAiB,EAAIpD,EAAEH,OAAO8J,UAAUE,QAAU,EACjEqb,EAAallB,EAAEoD,eAAiBpD,EAAEH,OAAO8J,UAAUE,QAAU,EAAqB,CAGlFzJ,MAAKwF,IAAIsf,GAAc,OAAOA,EAAa,GAC3C9kB,KAAKwF,IAAIqf,GAAc,OAAOA,EAAa,GAC3C7kB,KAAKwF,IAAIof,GAAc,OAAOA,EAAa,GAC3C5kB,KAAKwF,IAAI2d,GAAW,OAAOA,EAAU,GACrCnjB,KAAKwF,IAAI4d,GAAW,OAAOA,EAAU,EAEzC,IAAI2B,GAAiB,eAAiBD,EAAa,MAAQD,EAAa,MAAQD,EAAa,gBAAkBxB,EAAU,gBAAkBD,EAAU,MAIrJ,IAFA/O,EAAMnM,UAAU8c,GAChB3Q,EAAM,GAAG5B,MAAM6Q,QAAUrjB,KAAKwF,IAAIxF,KAAKF,MAAM6kB,IAAqB,EAC9D/kB,EAAEH,OAAO8J,UAAUK,aAAc,CAEjC,GAAI0Z,GAAe1jB,EAAEoD,eAAiBoR,EAAM5C,KAAK,6BAA+B4C,EAAM5C,KAAK,4BACvF+R,EAAc3jB,EAAEoD,eAAiBoR,EAAM5C,KAAK,8BAAgC4C,EAAM5C,KAAK,8BAC/D,KAAxB8R,EAAa9hB,SACb8hB,EAAelkB,EAAE,oCAAsCQ,EAAEoD,eAAiB,OAAS,OAAS,YAC5FoR,EAAM4N,OAAOsB,IAEU,IAAvBC,EAAY/hB,SACZ+hB,EAAcnkB,EAAE,oCAAsCQ,EAAEoD,eAAiB,QAAU,UAAY,YAC/FoR,EAAM4N,OAAOuB,IAEbD,EAAa9hB,SAAQ8hB,EAAa,GAAG9Q,MAAMwQ,QAAU2B,EAAmB,EAAIA,EAAmB,GAC/FpB,EAAY/hB,SAAQ+hB,EAAY,GAAG/Q,MAAMwQ,SAAY2B,EAAoB,GAAKA,EAAmB,IAK7G,GAAI/kB,EAAE6a,QAAQC,GAAI,CACd,GAAIsK,GAAKplB,EAAEyR,QAAQ,GAAGmB,KACtBwS,GAAGC,kBAAoBR,EAAS,WAGxCzE,cAAe,SAAUH,GACrBjgB,EAAEyU,OAAOmE,WAAWqH,GAAUrO,KAAK,gHAAgHgH,WAAWqH,MAQ1KjgB,EAAEsH,MACEge,oBAAoB,EACpBC,iBAAkB,SAAU7jB,EAAO8jB,GAC/B,GAAqB,mBAAV9jB,KACoB,mBAApB8jB,KAAiCA,GAAkB,GACtC,IAApBxlB,EAAEyU,OAAO7S,QAAb,CAEA,GAAI4S,GAAQxU,EAAEyU,OAAOC,GAAGhT,GACpB+jB,EAAMjR,EAAM5C,KAAK,oEACjB4C,EAAMiK,SAAS,gBAAmBjK,EAAMiK,SAAS,uBAA0BjK,EAAMiK,SAAS,yBAC1FgH,EAAMA,EAAIC,IAAIlR,EAAM,KAEL,IAAfiR,EAAI7jB,QAER6jB,EAAI1lB,KAAK,WACL,GAAI4lB,GAAOnmB,EAAED,KACbomB,GAAK9T,SAAS,sBACd,IAAI+T,GAAaD,EAAKzd,KAAK,mBACvBgL,EAAMyS,EAAKzd,KAAK,YAChBiL,EAASwS,EAAKzd,KAAK,cACvBlI,GAAEgT,UAAU2S,EAAK,GAAKzS,GAAO0S,EAAazS,GAAQ,EAAO,WAmBrD,GAlBIyS,GACAD,EAAK5T,IAAI,mBAAoB,QAAU6T,EAAa,MACpDD,EAAKpD,WAAW,qBAGZpP,IACAwS,EAAKzd,KAAK,SAAUiL,GACpBwS,EAAKpD,WAAW,gBAEhBrP,IACAyS,EAAKzd,KAAK,MAAOgL,GACjByS,EAAKpD,WAAW,cAKxBoD,EAAK9T,SAAS,sBAAsB0F,YAAY,uBAChD/C,EAAM5C,KAAK,sCAAsCqQ,SAC7CjiB,EAAEH,OAAOY,MAAQ+kB,EAAiB,CAClC,GAAIK,GAAqBrR,EAAMtM,KAAK,0BACpC,IAAIsM,EAAMiK,SAASze,EAAEH,OAAO8O,qBAAsB,CAC9C,GAAImX,GAAgB9lB,EAAEyR,QAAQC,SAAS,6BAA+BmU,EAAqB,WAAa7lB,EAAEH,OAAO8O,oBAAsB,IACvI3O,GAAEsH,KAAKie,iBAAiBO,EAAcpkB,SAAS,OAE9C,CACD,GAAIqkB,GAAkB/lB,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO8O,oBAAsB,6BAA+BkX,EAAqB,KAClI7lB,GAAEsH,KAAKie,iBAAiBQ,EAAgBrkB,SAAS,IAGzD1B,EAAEY,KAAK,mBAAoBZ,EAAGwU,EAAM,GAAImR,EAAK,MAGjD3lB,EAAEY,KAAK,kBAAmBZ,EAAGwU,EAAM,GAAImR,EAAK,QAIpDpe,KAAM,WACF,GAAIxC,EACJ,IAAI/E,EAAEH,OAAOyN,sBACTtN,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO6O,mBAAmB3O,KAAK,WACtDC,EAAEsH,KAAKie,iBAAiB/lB,EAAED,MAAMmC,eAIpC,IAAI1B,EAAEH,OAAOuL,cAAgB,EACzB,IAAKrG,EAAI/E,EAAE2U,YAAa5P,EAAI/E,EAAE2U,YAAc3U,EAAEH,OAAOuL,cAAgBrG,IAC7D/E,EAAEyU,OAAO1P,IAAI/E,EAAEsH,KAAKie,iBAAiBxgB,OAI7C/E,GAAEsH,KAAKie,iBAAiBvlB,EAAE2U,YAGlC,IAAI3U,EAAEH,OAAO8N,sBACT,GAAI3N,EAAEH,OAAOuL,cAAgB,GAAMpL,EAAEH,OAAO+N,6BAA+B5N,EAAEH,OAAO+N,4BAA8B,EAAI,CAClH,GAAIoY,GAAShmB,EAAEH,OAAO+N,4BAClBqY,EAAMjmB,EAAEH,OAAOuL,cACf8a,EAAW9lB,KAAKmZ,IAAIvZ,EAAE2U,YAAcsR,EAAM7lB,KAAK4V,IAAIgQ,EAAQC,GAAMjmB,EAAEyU,OAAO7S,QAC1EukB,EAAW/lB,KAAK4V,IAAIhW,EAAE2U,YAAcvU,KAAK4V,IAAIiQ,EAAKD,GAAS,EAE/D,KAAKjhB,EAAI/E,EAAE2U,YAAc3U,EAAEH,OAAOuL,cAAmB8a,EAAJnhB,EAAcA,IACvD/E,EAAEyU,OAAO1P,IAAI/E,EAAEsH,KAAKie,iBAAiBxgB,EAG7C,KAAKA,EAAIohB,EAAUphB,EAAI/E,EAAE2U,YAAc5P,IAC/B/E,EAAEyU,OAAO1P,IAAI/E,EAAEsH,KAAKie,iBAAiBxgB,OAG5C,CACD,GAAIkT,GAAYjY,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAO+O,eAC9CqJ,GAAUrW,OAAS,GAAG5B,EAAEsH,KAAKie,iBAAiBtN,EAAUvW,QAE5D,IAAIyW,GAAYnY,EAAEyR,QAAQC,SAAS,IAAM1R,EAAEH,OAAOgP,eAC9CsJ,GAAUvW,OAAS,GAAG5B,EAAEsH,KAAKie,iBAAiBpN,EAAUzW,WAIxE6d,kBAAmB,WACXvf,EAAEH,OAAOwH,cACLrH,EAAEH,OAAOgO,+BAAkC7N,EAAEH,OAAOgO,+BAAiC7N,EAAEsH,KAAKge,qBAC5FtlB,EAAEsH,KAAKC,QAInBiY,gBAAiB,WACTxf,EAAEH,OAAOwH,cAAgBrH,EAAEH,OAAOgO,8BAClC7N,EAAEsH,KAAKC,SASnBvH,EAAE0K,WACEwR,WAAW,EACXkK,gBAAiB,SAAUllB,GACvB,GAAImlB,GAAKrmB,EAAE0K,UAGP4b,EAAkBtmB,EAAEoD,eACP,eAAXlC,EAAEsc,MAAoC,cAAXtc,EAAEsc,KAAwBtc,EAAEwc,cAAc,GAAGC,MAAQzc,EAAEyc,OAASzc,EAAEqlB,QAClF,eAAXrlB,EAAEsc,MAAoC,cAAXtc,EAAEsc,KAAwBtc,EAAEwc,cAAc,GAAGE,MAAQ1c,EAAE0c,OAAS1c,EAAEslB,QAC/FpgB,EAAW,EAAoBigB,EAAGI,MAAMhiB,SAASzE,EAAEoD,eAAiB,OAAS,OAASijB,EAAGK,SAAW,EACpGC,GAAe3mB,EAAE0G,eAAiB2f,EAAGO,YACrCC,GAAe7mB,EAAE2G,eAAiB0f,EAAGO,WAC1BD,GAAXvgB,EACAA,EAAWugB,EAENvgB,EAAWygB,IAChBzgB,EAAWygB,GAEfzgB,GAAYA,EAAWigB,EAAGO,YAC1B5mB,EAAE8G,eAAeV,GACjBpG,EAAE6G,oBAAoBT,GAAU,IAEpC0gB,UAAW,SAAU5lB,GACjB,GAAImlB,GAAKrmB,EAAE0K,SACX2b,GAAGnK,WAAY,EACfhb,EAAE+D,iBACF/D,EAAEwa,kBAEF2K,EAAGD,gBAAgBllB,GACnBgG,aAAamf,EAAGU,aAEhBV,EAAGI,MAAM7N,WAAW,GAChB5Y,EAAEH,OAAO8K,eACT0b,EAAGI,MAAM1U,IAAI,UAAW,GAE5B/R,EAAEyR,QAAQmH,WAAW,KACrByN,EAAGW,KAAKpO,WAAW,KACnB5Y,EAAEY,KAAK,uBAAwBZ,IAEnCinB,SAAU,SAAU/lB,GAChB,GAAImlB,GAAKrmB,EAAE0K,SACN2b,GAAGnK,YACJhb,EAAE+D,eAAgB/D,EAAE+D,iBACnB/D,EAAEgE,aAAc,EACrBmhB,EAAGD,gBAAgBllB,GACnBlB,EAAEyR,QAAQmH,WAAW,GACrByN,EAAGI,MAAM7N,WAAW,GACpByN,EAAGW,KAAKpO,WAAW,GACnB5Y,EAAEY,KAAK,sBAAuBZ,KAElCknB,QAAS,SAAUhmB,GACf,GAAImlB,GAAKrmB,EAAE0K,SACN2b,GAAGnK,YACRmK,EAAGnK,WAAY,EACXlc,EAAEH,OAAO8K,gBACTzD,aAAamf,EAAGU,aAChBV,EAAGU,YAAcvmB,WAAW,WACxB6lB,EAAGI,MAAM1U,IAAI,UAAW,GACxBsU,EAAGI,MAAM7N,WAAW,MACrB,MAGP5Y,EAAEY,KAAK,qBAAsBZ,GACzBA,EAAEH,OAAOgL,wBACT7K,EAAEoH,eAGV+f,gBAAiB,WACb,GAAId,GAAKrmB,EAAE0K,UACPrJ,EAASrB,EAAEqR,QAAQG,MAAQ6U,EAAGI,MAAQ/iB,QAC1ClE,GAAE6mB,EAAGI,OAAOW,GAAGpnB,EAAEma,YAAYC,MAAOiM,EAAGS,WACvCtnB,EAAE6B,GAAQ+lB,GAAGpnB,EAAEma,YAAYE,KAAMgM,EAAGY,UACpCznB,EAAE6B,GAAQ+lB,GAAGpnB,EAAEma,YAAYG,IAAK+L,EAAGa,UAEvCG,iBAAkB,WACd,GAAIhB,GAAKrmB,EAAE0K,UACPrJ,EAASrB,EAAEqR,QAAQG,MAAQ6U,EAAGI,MAAQ/iB,QAC1ClE,GAAE6mB,EAAGI,OAAOa,IAAItnB,EAAEma,YAAYC,MAAOiM,EAAGS,WACxCtnB,EAAE6B,GAAQimB,IAAItnB,EAAEma,YAAYE,KAAMgM,EAAGY,UACrCznB,EAAE6B,GAAQimB,IAAItnB,EAAEma,YAAYG,IAAK+L,EAAGa,UAExC1N,IAAK,WACD,GAAKxZ,EAAEH,OAAO6K,UAAd,CACA,GAAI2b,GAAKrmB,EAAE0K,SACX2b,GAAGI,MAAQjnB,EAAEQ,EAAEH,OAAO6K,WAClB1K,EAAEH,OAAO0M,mBAAmD,gBAAvBvM,GAAEH,OAAO6K,WAA0B2b,EAAGI,MAAM7kB,OAAS,GAAqD,IAAhD5B,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAO6K,WAAW9I,SACpIykB,EAAGI,MAAQzmB,EAAEC,UAAU2R,KAAK5R,EAAEH,OAAO6K,YAEzC2b,EAAGW,KAAOX,EAAGI,MAAM7U,KAAK,0BACD,IAAnByU,EAAGW,KAAKplB,SACRykB,EAAGW,KAAOxnB,EAAE,6CACZ6mB,EAAGI,MAAMrE,OAAOiE,EAAGW,OAEvBX,EAAGW,KAAK,GAAGpU,MAAM/N,MAAQ,GACzBwhB,EAAGW,KAAK,GAAGpU,MAAM9N,OAAS,GAC1BuhB,EAAGkB,UAAYvnB,EAAEoD,eAAiBijB,EAAGI,MAAM,GAAGe,YAAcnB,EAAGI,MAAM,GAAG5R,aAExEwR,EAAGoB,QAAUznB,EAAEiV,KAAOjV,EAAEyV,YACxB4Q,EAAGO,YAAcP,EAAGoB,SAAWpB,EAAGkB,UAAYvnB,EAAEiV,MAChDoR,EAAGK,SAAWL,EAAGkB,UAAYlB,EAAGoB,QAE5BznB,EAAEoD,eACFijB,EAAGW,KAAK,GAAGpU,MAAM/N,MAAQwhB,EAAGK,SAAW,KAGvCL,EAAGW,KAAK,GAAGpU,MAAM9N,OAASuhB,EAAGK,SAAW,KAGxCL,EAAGoB,SAAW,EACdpB,EAAGI,MAAM,GAAG7T,MAAM8U,QAAU,OAG5BrB,EAAGI,MAAM,GAAG7T,MAAM8U,QAAU,GAE5B1nB,EAAEH,OAAO8K,gBACT0b,EAAGI,MAAM,GAAG7T,MAAMwQ,QAAU,KAGpC5C,aAAc,WACV,GAAKxgB,EAAEH,OAAO6K,UAAd,CACA,GAGIid,GAFAtB,EAAKrmB,EAAE0K,UAIPkd,GAHY5nB,EAAEoS,WAAa,EAGjBiU,EAAGK,SACjBiB,IAAUtB,EAAGkB,UAAYlB,EAAGK,UAAY1mB,EAAE8H,SACtC9H,EAAE0E,KAAO1E,EAAEoD,gBACXukB,GAAUA,EACNA,EAAS,GACTC,EAAUvB,EAAGK,SAAWiB,EACxBA,EAAS,IAEHA,EAAStB,EAAGK,SAAWL,EAAGkB,YAChCK,EAAUvB,EAAGkB,UAAYI,IAIhB,EAATA,GACAC,EAAUvB,EAAGK,SAAWiB,EACxBA,EAAS,GAEJA,EAAStB,EAAGK,SAAWL,EAAGkB,YAC/BK,EAAUvB,EAAGkB,UAAYI,GAG7B3nB,EAAEoD,gBACEpD,EAAEqR,QAAQE,aACV8U,EAAGW,KAAK3e,UAAU,eAAiB,EAAW,aAG9Cge,EAAGW,KAAK3e,UAAU,cAAgB,EAAW,OAEjDge,EAAGW,KAAK,GAAGpU,MAAM/N,MAAQ+iB,EAAU,OAG/B5nB,EAAEqR,QAAQE,aACV8U,EAAGW,KAAK3e,UAAU,oBAAsB,EAAW,UAGnDge,EAAGW,KAAK3e,UAAU,cAAgB,EAAW,OAEjDge,EAAGW,KAAK,GAAGpU,MAAM9N,OAAS8iB,EAAU,MAEpC5nB,EAAEH,OAAO8K,gBACTzD,aAAamf,EAAGlf,SAChBkf,EAAGI,MAAM,GAAG7T,MAAMwQ,QAAU,EAC5BiD,EAAGlf,QAAU3G,WAAW,WACpB6lB,EAAGI,MAAM,GAAG7T,MAAMwQ,QAAU,EAC5BiD,EAAGI,MAAM7N,WAAW,MACrB,QAGXwH,cAAe,SAAUH,GAChBjgB,EAAEH,OAAO6K,WACd1K,EAAE0K,UAAUsc,KAAKpO,WAAWqH,KAOpCjgB,EAAE0Z,YACEmO,aAAc,SAAUxH,EAAGC,GACvB/gB,KAAK8gB,EAAIA,EACT9gB,KAAK+gB,EAAIA,EACT/gB,KAAKuoB,UAAYzH,EAAEze,OAAS,CAI5B,IAAImmB,GAAIC,CACAzoB,MAAK8gB,EAAEze,MAEfrC,MAAK0oB,YAAc,SAAUC,GACzB,MAAKA,IAGLF,EAAKG,EAAa5oB,KAAK8gB,EAAG6H,GAC1BH,EAAKC,EAAK,GAIDE,EAAK3oB,KAAK8gB,EAAE0H,KAAQxoB,KAAK+gB,EAAE0H,GAAMzoB,KAAK+gB,EAAEyH,KAASxoB,KAAK8gB,EAAE2H,GAAMzoB,KAAK8gB,EAAE0H,IAAOxoB,KAAK+gB,EAAEyH,IAR5E,EAWpB,IAAII,GAAe,WACf,GAAIjC,GAAUC,EAAUiC,CACxB,OAAO,UAASC,EAAOC,GAGnB,IAFAnC,EAAW,GACXD,EAAWmC,EAAMzmB,OACVskB,EAAWC,EAAW,GACrBkC,EAAMD,EAAQlC,EAAWC,GAAY,IAAMmC,EAC3CnC,EAAWiC,EAEXlC,EAAWkC,CAEnB,OAAOlC,QAKnBqC,uBAAwB,SAASC,GACzBxoB,EAAE0Z,WAAWC,SAAQ3Z,EAAE0Z,WAAWC,OAAS3Z,EAAEH,OAAOY,KACpD,GAAIT,GAAE0Z,WAAWmO,aAAa7nB,EAAEmV,WAAYqT,EAAErT,YAC9C,GAAInV,GAAE0Z,WAAWmO,aAAa7nB,EAAEsU,SAAUkU,EAAElU,YAEpDkM,aAAc,SAAUpO,EAAW8N,GAGhC,QAASuI,GAAuBD,GAK3BpW,EAAYoW,EAAE9jB,KAA8B,eAAvB8jB,EAAE3oB,OAAO8I,WAA8B3I,EAAEoS,UAAYpS,EAAEoS,UACjD,UAAvBpS,EAAEH,OAAOuO,YACTpO,EAAE0Z,WAAW6O,uBAAuBC,GAGpCE,GAAuB1oB,EAAE0Z,WAAWC,OAAOsO,aAAa7V,IAGxDsW,GAA8C,cAAvB1oB,EAAEH,OAAOuO,YAChCiW,GAAcmE,EAAE7hB,eAAiB6hB,EAAE9hB,iBAAmB1G,EAAE2G,eAAiB3G,EAAE0G,gBAC3EgiB,GAAuBtW,EAAYpS,EAAE0G,gBAAkB2d,EAAamE,EAAE9hB,gBAGtE1G,EAAEH,OAAOsO,iBACTua,EAAsBF,EAAE7hB,eAAiB+hB,GAE7CF,EAAE1hB,eAAe4hB,GACjBF,EAAE3hB,oBAAoB6hB,GAAqB,EAAO1oB,GAClDwoB,EAAEzhB,oBAzBP,GACIsd,GAAYqE,EADZC,EAAa3oB,EAAEH,OAAOqO,OA2B1B,IAAIlO,EAAE4oB,QAAQD,GACV,IAAK,GAAI5jB,GAAI,EAAGA,EAAI4jB,EAAW/mB,OAAQmD,IAC/B4jB,EAAW5jB,KAAOmb,GAAgByI,EAAW5jB,YAAc1F,IAC3DopB,EAAuBE,EAAW5jB,QAIrC4jB,aAAsBtpB,IAAU6gB,IAAiByI,GAEtDF,EAAuBE,IAG9BvI,cAAe,SAAUH,EAAUC,GAG/B,QAAS2I,GAAwBL,GAC7BA,EAAE5hB,qBAAqBqZ,EAAUjgB,GAChB,IAAbigB,IACAuI,EAAEjJ,oBACFiJ,EAAE/W,QAAQ4C,cAAc,WACfsU,IACDH,EAAE3oB,OAAOY,MAA+B,UAAvBT,EAAEH,OAAOuO,WAC1Boa,EAAE9nB,UAEN8nB,EAAEhJ,sBAXd,GACIza,GADA4jB,EAAa3oB,EAAEH,OAAOqO,OAgB1B,IAAIlO,EAAE4oB,QAAQD,GACV,IAAK5jB,EAAI,EAAGA,EAAI4jB,EAAW/mB,OAAQmD,IAC3B4jB,EAAW5jB,KAAOmb,GAAgByI,EAAW5jB,YAAc1F,IAC3DwpB,EAAwBF,EAAW5jB,QAItC4jB,aAAsBtpB,IAAU6gB,IAAiByI,GACtDE,EAAwBF,KAQpC3oB,EAAEgL,SACE8d,KAAM,WACF,GAAK9oB,EAAEH,OAAOmL,QAAd,CACAhL,EAAEgL,QAAQ+d,aAAc,CACxB,IAAIC,GAAOtlB,SAASulB,SAASD,KAAKxT,QAAQ,IAAK,GAC/C,IAAKwT,EAEL,IAAK,GADDlgB,GAAQ,EACH/D,EAAI,EAAGnD,EAAS5B,EAAEyU,OAAO7S,OAAYA,EAAJmD,EAAYA,IAAK,CACvD,GAAIyP,GAAQxU,EAAEyU,OAAOC,GAAG3P,GACpBmkB,EAAY1U,EAAMtM,KAAK,YAC3B,IAAIghB,IAAcF,IAASxU,EAAMiK,SAASze,EAAEH,OAAO8O,qBAAsB,CACrE,GAAIjN,GAAQ8S,EAAM9S,OAClB1B,GAAE4Z,QAAQlY,EAAOoH,EAAO9I,EAAEH,OAAOgQ,oBAAoB,OAIjEiQ,QAAS,WACA9f,EAAEgL,QAAQ+d,aAAgB/oB,EAAEH,OAAOmL,UACxCtH,SAASulB,SAASD,KAAOhpB,EAAEyU,OAAOC,GAAG1U,EAAE2U,aAAazM,KAAK,cAAgB,MAwEjFlI,EAAEmpB,uBAAyB,WACvBnpB,EAAEH,OAAOiL,iBAAkB,EAC3BtL,EAAEkE,UAAU4jB,IAAI,UAAWxkB,IAE/B9C,EAAEopB,sBAAwB,WACtBppB,EAAEH,OAAOiL,iBAAkB,EAC3BtL,EAAEkE,UAAU0jB,GAAG,UAAWtkB,IAO9B9C,EAAEuF,YACEC,OAAO,EACPkC,gBAAgB,GAAK1F,QAAOwF,MAAQC,WAEpCzH,EAAEH,OAAOkL,kBAAmB,CAC5B,IACI,GAAI/I,QAAOqnB,WAAW,SACtBrpB,EAAEuF,WAAWC,MAAQ,QACvB,MAAOtE,IACDc,OAAOqnB,YAAerpB,EAAEC,UAAU,IAAM,SAAWD,GAAEC,UAAU,MAC/DD,EAAEuF,WAAWC,MAAQ,UAGxBxF,EAAEuF,WAAWC,OAASxD,OAAOqnB,WAG7BrpB,EAAEuF,WAAWC,OAAmC0F,SAA1BxH,SAAS4lB,eAChCtpB,EAAEuF,WAAWC,MAAQ,cAEpBxF,EAAEuF,WAAWC,QACdxF,EAAEuF,WAAWC,MAAQ,kBAoG7BxF,EAAEupB,yBAA2B,WACzB,MAAKvpB,GAAEuF,WAAWC,OAClBxF,EAAEC,UAAUqnB,IAAItnB,EAAEuF,WAAWC,MAAOH,IAC7B,IAFyB,GAKpCrF,EAAEwpB,wBAA0B,WACxB,MAAKxpB,GAAEuF,WAAWC,OAClBxF,EAAEC,UAAUmnB,GAAGpnB,EAAEuF,WAAWC,MAAOH,IAC5B,IAFyB,GA+CpCrF,EAAEyK,UACE+V,aAAc,WACVxgB,EAAEC,UAAUyR,SAAS,8EAA8E3R,KAAK,WACpG8H,EAAqBtI,KAAMS,EAAE8H,YAGjC9H,EAAEyU,OAAO1U,KAAK,WACV,GAAIyU,GAAQhV,EAAED,KACdiV,GAAM5C,KAAK,8EAA8E7R,KAAK,WAC1F,GAAI+H,GAAW1H,KAAKmZ,IAAInZ,KAAK4V,IAAIxB,EAAM,GAAG1M,SAAU,IAAK,EACzDD,GAAqBtI,KAAMuI,QAIvCsY,cAAe,SAAUH,GACG,mBAAbA,KAA0BA,EAAWjgB,EAAEH,OAAOiJ,OACzD9I,EAAEC,UAAU2R,KAAK,8EAA8E7R,KAAK,WAChG,GAAIqB,GAAK5B,EAAED,MACPkqB,EAAmBrhB,SAAShH,EAAG8G,KAAK,iCAAkC,KAAO+X,CAChE,KAAbA,IAAgBwJ,EAAmB,GACvCroB,EAAGwX,WAAW6Q,OAS1BzpB,EAAE0pB,WACF,KAAK,GAAIC,KAAU3pB,GAAE4pB,QAAS,CAC1B,GAAI7hB,GAAI/H,EAAE4pB,QAAQD,GAAQ3pB,EAAGA,EAAEH,OAAO8pB,GAClC5hB,IAAG/H,EAAE0pB,SAAS7mB,KAAKkF,GA4S3B,MAzSA/H,GAAE6pB,YAAc,SAAUthB,GACtB,IAAK,GAAIxD,GAAI,EAAGA,EAAI/E,EAAE0pB,SAAS9nB,OAAQmD,IAC/BwD,IAAavI,GAAE0pB,SAAS3kB,IACxB/E,EAAE0pB,SAAS3kB,GAAGwD,GAAWuhB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAmBvG9pB,EAAE+pB,yBAGF/pB,EAAEY,KAAO,SAAU2H,GAEXvI,EAAEH,OAAO0I,IACTvI,EAAEH,OAAO0I,GAAWuhB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAE1F,IAAI/kB,EAEJ,IAAI/E,EAAE+pB,sBAAsBxhB,GACxB,IAAKxD,EAAI,EAAGA,EAAI/E,EAAE+pB,sBAAsBxhB,GAAW3G,OAAQmD,IACvD/E,EAAE+pB,sBAAsBxhB,GAAWxD,GAAG+kB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAI5G9pB,GAAE6pB,aAAa7pB,EAAE6pB,YAAYthB,EAAWuhB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAElH9pB,EAAEonB,GAAK,SAAU7e,EAAWyhB,GAIxB,MAHAzhB,GAAYD,EAAmBC,GAC1BvI,EAAE+pB,sBAAsBxhB,KAAYvI,EAAE+pB,sBAAsBxhB,OACjEvI,EAAE+pB,sBAAsBxhB,GAAW1F,KAAKmnB,GACjChqB,GAEXA,EAAEsnB,IAAM,SAAU/e,EAAWyhB,GACzB,GAAIjlB,EAEJ,IADAwD,EAAYD,EAAmBC,GACR,mBAAZyhB,GAGP,MADAhqB,GAAE+pB,sBAAsBxhB,MACjBvI,CAEX,IAAKA,EAAE+pB,sBAAsBxhB,IAA4D,IAA9CvI,EAAE+pB,sBAAsBxhB,GAAW3G,OAA9E,CACA,IAAKmD,EAAI,EAAGA,EAAI/E,EAAE+pB,sBAAsBxhB,GAAW3G,OAAQmD,IACpD/E,EAAE+pB,sBAAsBxhB,GAAWxD,KAAOilB,GAAShqB,EAAE+pB,sBAAsBxhB,GAAW0hB,OAAOllB,EAAG,EAEvG,OAAO/E,KAEXA,EAAEkqB,KAAO,SAAU3hB,EAAWyhB,GAC1BzhB,EAAYD,EAAmBC,EAC/B,IAAI4hB,GAAW,WACXH,EAAQF,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,IAC1E9pB,EAAEsnB,IAAI/e,EAAW4hB,GAGrB,OADAnqB,GAAEonB,GAAG7e,EAAW4hB,GACTnqB,GAIXA,EAAEuP,MACE6a,cAAe,SAAUC,GAErB,MADAA,GAAIniB,KAAK,WAAY,KACdmiB,GAEXC,QAAS,SAAUD,EAAKE,GAEpB,MADAF,GAAIniB,KAAK,OAAQqiB,GACVF,GAGXG,SAAU,SAAUH,EAAKI,GAErB,MADAJ,GAAIniB,KAAK,aAAcuiB,GAChBJ,GAGXvR,QAAS,SAAUuR,GAEf,MADAA,GAAIniB,KAAK,iBAAiB,GACnBmiB,GAGXtR,OAAQ,SAAUsR,GAEd,MADAA,GAAIniB,KAAK,iBAAiB,GACnBmiB,GAGXjP,WAAY,SAAU5V,GACI,KAAlBA,EAAMvC,UACNzD,EAAEgG,EAAMnE,QAAQC,GAAGtB,EAAEH,OAAOsN,aAC5BnN,EAAEmb,YAAY3V,GACVxF,EAAEa,MACFb,EAAEuP,KAAKmb,OAAO1qB,EAAEH,OAAO8P,kBAGvB3P,EAAEuP,KAAKmb,OAAO1qB,EAAEH,OAAO4P,mBAGtBjQ,EAAEgG,EAAMnE,QAAQC,GAAGtB,EAAEH,OAAOuN,cACjCpN,EAAEqb,YAAY7V,GACVxF,EAAEwG,YACFxG,EAAEuP,KAAKmb,OAAO1qB,EAAEH,OAAO6P,mBAGvB1P,EAAEuP,KAAKmb,OAAO1qB,EAAEH,OAAO2P,mBAG3BhQ,EAAEgG,EAAMnE,QAAQC,GAAG,IAAMtB,EAAEH,OAAOkP,cAClCvP,EAAEgG,EAAMnE,QAAQ,GAAGspB,UAI3BC,WAAYprB,EAAE,sFAEdkrB,OAAQ,SAAUG,GACd,GAAIC,GAAe9qB,EAAEuP,KAAKqb,UACE,KAAxBE,EAAalpB,SACjBkpB,EAAajS,KAAK,IAClBiS,EAAajS,KAAKgS,KAEtB/B,KAAM,WAEE9oB,EAAEH,OAAOsN,YAAcnN,EAAEmN,YAAcnN,EAAEmN,WAAWvL,OAAS,IAC7D5B,EAAEuP,KAAK6a,cAAcpqB,EAAEmN,YACvBnN,EAAEuP,KAAK+a,QAAQtqB,EAAEmN,WAAY,UAC7BnN,EAAEuP,KAAKib,SAASxqB,EAAEmN,WAAYnN,EAAEH,OAAO4P,mBAEvCzP,EAAEH,OAAOuN,YAAcpN,EAAEoN,YAAcpN,EAAEoN,WAAWxL,OAAS,IAC7D5B,EAAEuP,KAAK6a,cAAcpqB,EAAEoN,YACvBpN,EAAEuP,KAAK+a,QAAQtqB,EAAEoN,WAAY,UAC7BpN,EAAEuP,KAAKib,SAASxqB,EAAEoN,WAAYpN,EAAEH,OAAO2P,mBAG3ChQ,EAAEQ,EAAEC,WAAWmiB,OAAOpiB,EAAEuP,KAAKqb,aAEjCzR,eAAgB,WACRnZ,EAAEH,OAAO2M,YAAcxM,EAAEH,OAAO6M,qBAAuB1M,EAAEuY,SAAWvY,EAAEuY,QAAQ3W,QAC9E5B,EAAEuY,QAAQxY,KAAK,WACX,GAAIgrB,GAASvrB,EAAED,KACfS,GAAEuP,KAAK6a,cAAcW,GACrB/qB,EAAEuP,KAAK+a,QAAQS,EAAQ,UACvB/qB,EAAEuP,KAAKib,SAASO,EAAQ/qB,EAAEH,OAAO+P,wBAAwB4F,QAAQ,YAAauV,EAAOrpB,QAAU,OAI3GspB,QAAS,WACDhrB,EAAEuP,KAAKqb,YAAc5qB,EAAEuP,KAAKqb,WAAWhpB,OAAS,GAAG5B,EAAEuP,KAAKqb,WAAW3I,WAQjFjiB,EAAE8oB,KAAO,WACD9oB,EAAEH,OAAOY,MAAMT,EAAEgiB,aACrBhiB,EAAE8U,sBACF9U,EAAEkV,mBACFlV,EAAEgZ,mBACEhZ,EAAEH,OAAO6K,WAAa1K,EAAE0K,YACxB1K,EAAE0K,UAAU8O,MACRxZ,EAAEH,OAAO+K,oBACT5K,EAAE0K,UAAUyc,mBAGI,UAApBnnB,EAAEH,OAAO6J,QAAsB1J,EAAEmgB,QAAQngB,EAAEH,OAAO6J,UAC7C1J,EAAEH,OAAOY,MAAMT,EAAE8G,iBACtB9G,EAAEmgB,QAAQngB,EAAEH,OAAO6J,QAAQ8W,gBAE3BxgB,EAAEH,OAAOY,KACTT,EAAE4Z,QAAQ5Z,EAAEH,OAAOgJ,aAAe7I,EAAEiO,aAAc,EAAGjO,EAAEH,OAAOgQ,qBAG9D7P,EAAE4Z,QAAQ5Z,EAAEH,OAAOgJ,aAAc,EAAG7I,EAAEH,OAAOgQ,oBACf,IAA1B7P,EAAEH,OAAOgJ,eACL7I,EAAEyK,UAAYzK,EAAEH,OAAO4K,UAAUzK,EAAEyK,SAAS+V,eAC5CxgB,EAAEsH,MAAQtH,EAAEH,OAAOwH,cACnBrH,EAAEsH,KAAKC,OACPvH,EAAEsH,KAAKge,oBAAqB,KAIxCtlB,EAAEub,eACEvb,EAAEH,OAAOsC,UAAYnC,EAAEqR,QAAQlP,UAC/BnC,EAAE4hB;AAEF5hB,EAAEH,OAAOiO,gBAAkB9N,EAAEH,OAAOwH,aACpCrH,EAAE8N,gBAEF9N,EAAEH,OAAOS,UACTN,EAAEkU,gBAEFlU,EAAEH,OAAOiL,iBACL9K,EAAEopB,uBAAuBppB,EAAEopB,wBAE/BppB,EAAEH,OAAOkL,mBACL/K,EAAEwpB,yBAAyBxpB,EAAEwpB,0BAEjCxpB,EAAEH,OAAOmL,SACLhL,EAAEgL,SAAShL,EAAEgL,QAAQ8d,OAEzB9oB,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEuP,KAAKuZ,OACpC9oB,EAAEY,KAAK,SAAUZ,IAIrBA,EAAEirB,cAAgB,WAEdjrB,EAAEC,UAAUsX,YAAYvX,EAAEqQ,WAAW8B,KAAK,MAAMoQ,WAAW,SAG3DviB,EAAEyR,QAAQ8Q,WAAW,SAGjBviB,EAAEyU,QAAUzU,EAAEyU,OAAO7S,QACrB5B,EAAEyU,OACG8C,aACCvX,EAAEH,OAAO6O,kBACT1O,EAAEH,OAAO4O,iBACTzO,EAAEH,OAAO+O,eACT5O,EAAEH,OAAOgP,gBACTsD,KAAK,MACNoQ,WAAW,SACXA,WAAW,sBACXA,WAAW,mBAIhBviB,EAAE2R,qBAAuB3R,EAAE2R,oBAAoB/P,QAC/C5B,EAAE2R,oBAAoB4F,YAAYvX,EAAEH,OAAOuP,uBAE3CpP,EAAEuY,SAAWvY,EAAEuY,QAAQ3W,QACvB5B,EAAEuY,QAAQhB,YAAYvX,EAAEH,OAAOmP,mBAI/BhP,EAAEH,OAAOuN,YAAY5N,EAAEQ,EAAEH,OAAOuN,YAAYmK,YAAYvX,EAAEH,OAAOoP,qBACjEjP,EAAEH,OAAOsN,YAAY3N,EAAEQ,EAAEH,OAAOsN,YAAYoK,YAAYvX,EAAEH,OAAOoP,qBAGjEjP,EAAEH,OAAO6K,WAAa1K,EAAE0K,YACpB1K,EAAE0K,UAAU+b,OAASzmB,EAAE0K,UAAU+b,MAAM7kB,QAAQ5B,EAAE0K,UAAU+b,MAAMlE,WAAW,SAC5EviB,EAAE0K,UAAUsc,MAAQhnB,EAAE0K,UAAUsc,KAAKplB,QAAQ5B,EAAE0K,UAAUsc,KAAKzE,WAAW,WAKrFviB,EAAEgrB,QAAU,SAAUE,EAAgBD,GAElCjrB,EAAEwb,eAEFxb,EAAEe,eAEEf,EAAEH,OAAO6K,WAAa1K,EAAE0K,WACpB1K,EAAEH,OAAO+K,oBACT5K,EAAE0K,UAAU2c,mBAIhBrnB,EAAEH,OAAOY,MACTT,EAAEiR,cAGFga,GACAjrB,EAAEirB,gBAGNjrB,EAAE8hB,sBAEE9hB,EAAEH,OAAOiL,iBACL9K,EAAEmpB,wBAAwBnpB,EAAEmpB,yBAEhCnpB,EAAEH,OAAOkL,mBACL/K,EAAEupB,0BAA0BvpB,EAAEupB,2BAGlCvpB,EAAEH,OAAO0P,MAAQvP,EAAEuP,MAAMvP,EAAEuP,KAAKyb,UAEpChrB,EAAEY,KAAK,aAEHsqB,KAAmB,IAAOlrB,EAAI,OAGtCA,EAAE8oB,OAKK9oB,GAOXX,GAAO8rB,WACHxG,SAAU,WACN,GAAIyG,GAAKpR,UAAUqR,UAAUxnB,aAC7B,OAAQunB,GAAGjjB,QAAQ,WAAa,GAAKijB,EAAGjjB,QAAQ,UAAY,GAAKijB,EAAGjjB,QAAQ,WAAa,KAE7Fyc,YAAa,+CAA+C0G,KAAKtR,UAAUqR,WAC3EzC,QAAS,SAAU2C,GACf,MAAgD,mBAAzCC,OAAOL,UAAU1J,SAASgK,MAAMF,IAK3C1Q,SACIC,GAAI9Y,OAAOgY,UAAUC,gBAAkBjY,OAAOgY,UAAUE,iBACxDgE,QAAUlc,OAAOgY,UAAUE,kBAAoBlY,OAAOgY,UAAU0R,iBAAmB,GAAO1pB,OAAOgY,UAAUC,gBAAkBjY,OAAOgY,UAAU2R,eAAiB,GAKnK1Z,OAAQ,WACJ,GAAImZ,GAAKpR,UAAUqR,UACfnZ,EAAUkZ,EAAGQ,MAAM,+BACnBC,EAAOT,EAAGQ,MAAM,wBAChBE,EAAOV,EAAGQ,MAAM,2BAChBG,GAAUF,GAAQT,EAAGQ,MAAM,yBAC/B,QACI1Q,IAAK2Q,GAAQE,GAAUD,EACvB5Z,QAASA,MAMjBb,SACIG,MAASxP,OAAOgqB,WAAaA,UAAUxa,SAAU,GAAS,WACtD,SAAW,gBAAkBxP,SAAWA,OAAOiqB,eAAiBvoB,mBAAoBuoB,mBAGxF1a,aAAgBvP,OAAOgqB,WAAaA,UAAUE,mBAAoB,GAAS,WACvE,GAAIC,GAAMzoB,SAAS0oB,cAAc,OAAOxZ,KACxC,OAAQ,qBAAuBuZ,IAAO,kBAAoBA,IAAO,gBAAkBA,IAAO,iBAAmBA,IAAO,eAAiBA,MAGzI7a,QAAS,WAGL,IAAK,GAFD6a,GAAMzoB,SAAS0oB,cAAc,OAAOxZ,MACpCyZ,EAAS,yKAA2KnL,MAAM,KACrLnc,EAAI,EAAGA,EAAIsnB,EAAOzqB,OAAQmD,IAC/B,GAAIsnB,EAAOtnB,IAAMonB,GAAK,OAAO,KAIrChqB,SAAU,WACN,MAAQ,oBAAsBH,SAAU,0BAA4BA,YAM5E4nB,YAQJnqB,EAAiBD,EAEjB,IAAI8sB,GAAS9sB,CA4DhB,OA5CO8sB,KACM,iBAAmBA,GAAO3sB,KAC5B2sB,EAAO3sB,GAAG0U,cAAgB,SAAUhB,GAGhC,QAASkZ,GAAarrB,GAElB,GAAIA,EAAEG,SAAW9B,KAEjB,IADA8T,EAASmZ,KAAKjtB,KAAM2B,GACf6D,EAAI,EAAGA,EAAI0nB,EAAO7qB,OAAQmD,IAC3B2nB,EAAIpF,IAAImF,EAAO1nB,GAAIwnB,GAP3B,GACIxnB,GADA0nB,GAAU,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACjFC,EAAMntB,IAShB,IAAI8T,EACA,IAAKtO,EAAI,EAAGA,EAAI0nB,EAAO7qB,OAAQmD,IAC3B2nB,EAAItF,GAAGqF,EAAO1nB,GAAIwnB,EAG1B,OAAOhtB,QAGT,aAAe+sB,GAAO3sB,KACxB2sB,EAAO3sB,GAAG0I,UAAY,SAAUA,GAC5B,IAAK,GAAItD,GAAI,EAAGA,EAAIxF,KAAKqC,OAAQmD,IAAK,CAClC,GAAI4nB,GAAUptB,KAAKwF,GAAG6N,KACtB+Z,GAAQ1L,gBAAkB0L,EAAQrL,YAAcqL,EAAQpL,YAAcoL,EAAQvL,aAAeuL,EAAQtL,WAAasL,EAAQtkB,UAAYA,EAE1I,MAAO9I,QAGT,cAAgB+sB,GAAO3sB,KACzB2sB,EAAO3sB,GAAGiZ,WAAa,SAAUqH,GACL,gBAAbA,KACPA,GAAsB,KAE1B,KAAK,GAAIlb,GAAI,EAAGA,EAAIxF,KAAKqC,OAAQmD,IAAK,CAClC,GAAI4nB,GAAUptB,KAAKwF,GAAG6N,KACtB+Z,GAAQC,yBAA2BD,EAAQE,qBAAuBF,EAAQG,qBAAuBH,EAAQI,sBAAwBJ,EAAQK,oBAAsBL,EAAQM,mBAAqBhN,EAEhM,MAAO1gB,SAKfF","file":"swiper.jquery.umd.min.js","sourcesContent":["/**\n * Swiper 3.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2016, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: February 7, 2016\n */\n(function (root, factory) {\n\t'use strict';\n\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory(require('jquery'));\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.Swiper = factory(root.jQuery);\n\t}\n}(this, function ($) {\n\t'use strict';\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n // Hash Navigation\n hashnav: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // NS\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push('swiper-container-' + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push('swiper-container-free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push('swiper-container-no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push('swiper-container-autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push('swiper-container-3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push('swiper-container-' + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n s.params.setWrapperSize = false;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n s.params.setWrapperSize = false;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass('swiper-pagination-clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push('swiper-container-rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push('swiper-container-multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push('swiper-container-android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, s.params.autoplay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n // Update Height\n var slide = s.slides.eq(s.activeIndex)[0];\n if (typeof slide !== 'undefined') {\n var newHeight = slide.offsetHeight;\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n }\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n 'order': newSlideOrderIndex\n });\n }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css({\n 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n })\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n s.slides.eq(0).addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n s.slides.eq(-1).addClass(s.params.slidePrevClass);\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">' + s.params.paginationElement + '>';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n function forceSetTranslate() {\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated, newTranslate;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];\n if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];\n else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n if (params.simulateTouch && !s.device.ios && !s.device.android) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - s.params.slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined' && s.browser.ieTouch) {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving && s.browser.ieTouch) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grabbing';\n s.container[0].style.cursor = '-moz-grabbin';\n s.container[0].style.cursor = 'grabbing';\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n if (!s.params.followFinger) return;\n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n \n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\n });\n \n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');\n if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass('swiper-lazy-loading');\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset');\n s.loadImage(_img[0], (src || background), srcset, false, function () {\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');\n slide.find('.swiper-lazy-preloader, .preloader').remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (s.params.slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = s.params.slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(s.touchEvents.start, sb.dragStart);\n $(target).on(s.touchEvents.move, sb.dragMove);\n $(target).on(s.touchEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(s.touchEvents.start, sb.dragStart);\n $(target).off(s.touchEvents.move, sb.dragMove);\n $(target).off(s.touchEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n \n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (s.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (s.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n init: function () {\n if (!s.params.hashnav) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (!hash) return;\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';\n }\n };\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n if (s.params.mousewheelControl) {\n try {\n new window.WheelEvent('wheel');\n s.mousewheel.event = 'wheel';\n } catch (e) {\n if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {\n s.mousewheel.event = 'wheel';\n }\n }\n if (!s.mousewheel.event && window.WheelEvent) {\n \n }\n if (!s.mousewheel.event && document.onmousewheel !== undefined) {\n s.mousewheel.event = 'mousewheel';\n }\n if (!s.mousewheel.event) {\n s.mousewheel.event = 'DOMMouseScroll';\n }\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var we = s.mousewheel.event;\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n //WebKits\n if (we === 'mousewheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;\n }\n }\n //Old FireFox\n else if (we === 'DOMMouseScroll') delta = -e.detail;\n //New FireFox\n else if (we === 'wheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;\n }\n }\n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n if (s.params.autoplay) s.stopAutoplay();\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.off(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.on(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1)\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Get jQuery\n ===========================*/\n \n addLibraryPlugin($);\n \n var domLib = $;\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n }\n\n\treturn Swiper;\n}));\n//# sourceMappingURL=maps/swiper.jquery.umd.js.map\n"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.min.js.map b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.min.js.map
deleted file mode 100644
index fda10db3f4..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["swiper.js"],"names":["addLibraryPlugin","lib","fn","swiper","params","firstInstance","this","each","s","Swiper","$","container","round","a","Math","floor","autoplay","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","handleMousewheel","we","mousewheel","event","delta","rtlFactor","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","detail","deltaX","deltaY","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","timeout","slideReset","lazyLoading","lazy","load","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","pX","pY","attr","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","hashnav","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","swipeHandler","noSwiping","noSwipingClass","slideClass","slideActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slidePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","unlockSwipeToPrev","unlockSwipes","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","slide","slides","eq","activeIndex","newHeight","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","ceil","max","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","margin-top","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","activeSlide","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","translated","controller","spline","slideTo","forceUpdatePagination","slideChangedBySlideTo","desktopEvents","navigator","pointerEnabled","msPointerEnabled","touchEvents","start","move","end","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","realIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","ieTouch","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","hasClass","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","j","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","setHash","clientLeft","_slidePrev","duration","byController","effects","setTransition","x","y","z","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","spv","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","lastIndex","i1","i3","interpolate","x2","binarySearch","guess","array","val","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","isArray","setControlledTransition","init","initialized","hash","location","slideHash","disableKeyboardControl","enableKeyboardControl","WheelEvent","onmousewheel","disableMousewheelControl","enableMousewheelControl","parallaxDuration","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","destroy","cleanupStyles","deleteInstance","prototype","ua","userAgent","test","arr","Object","apply","msMaxTouchPoints","maxTouchPoints","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","div","createElement","styles","_this","context","els","tempParent","trim","toCreate","innerHTML","childNodes","querySelectorAll","getElementById","className","classes","classList","contains","toggle","attrs","value","setAttribute","attrName","removeAttribute","key","dom7ElementDataStorage","dataKey","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","targetSelector","listener","capture","handleLiveEvent","call","k","events","addEventListener","dom7LiveListeners","liveListener","removeEventListener","proxy","dom","eventData","evt","CustomEvent","bubbles","cancelable","createEvent","initEvent","dispatchEvent","fireCallBack","includeMargins","box","getBoundingClientRect","body","clientTop","scrollTop","props","prop","textContent","compareWith","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","appendChild","insertBefore","before","parentNode","insertAfter","after","nextSibling","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","parent","unique","foundElements","removeChild","toAdd","swiperDomPlugins","domLib","module","exports","define","amd"],"mappings":"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","file":"swiper.min.js","sourcesContent":["/**\n * Swiper 3.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2016, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: February 7, 2016\n */\n(function () {\n 'use strict';\n var $;\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n // Hash Navigation\n hashnav: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // NS\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push('swiper-container-' + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push('swiper-container-free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push('swiper-container-no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push('swiper-container-autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push('swiper-container-3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push('swiper-container-' + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n s.params.setWrapperSize = false;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n s.params.setWrapperSize = false;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass('swiper-pagination-clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push('swiper-container-rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push('swiper-container-multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push('swiper-container-android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, s.params.autoplay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n // Update Height\n var slide = s.slides.eq(s.activeIndex)[0];\n if (typeof slide !== 'undefined') {\n var newHeight = slide.offsetHeight;\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n }\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n 'order': newSlideOrderIndex\n });\n }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css({\n 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n })\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n s.slides.eq(0).addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n s.slides.eq(-1).addClass(s.params.slidePrevClass);\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">' + s.params.paginationElement + '>';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n function forceSetTranslate() {\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated, newTranslate;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];\n if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];\n else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n if (params.simulateTouch && !s.device.ios && !s.device.android) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - s.params.slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined' && s.browser.ieTouch) {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving && s.browser.ieTouch) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grabbing';\n s.container[0].style.cursor = '-moz-grabbin';\n s.container[0].style.cursor = 'grabbing';\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n if (!s.params.followFinger) return;\n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n \n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\n });\n \n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');\n if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass('swiper-lazy-loading');\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset');\n s.loadImage(_img[0], (src || background), srcset, false, function () {\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');\n slide.find('.swiper-lazy-preloader, .preloader').remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (s.params.slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = s.params.slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(s.touchEvents.start, sb.dragStart);\n $(target).on(s.touchEvents.move, sb.dragMove);\n $(target).on(s.touchEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(s.touchEvents.start, sb.dragStart);\n $(target).off(s.touchEvents.move, sb.dragMove);\n $(target).off(s.touchEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n \n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (s.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (s.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n init: function () {\n if (!s.params.hashnav) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (!hash) return;\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';\n }\n };\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n if (s.params.mousewheelControl) {\n try {\n new window.WheelEvent('wheel');\n s.mousewheel.event = 'wheel';\n } catch (e) {\n if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {\n s.mousewheel.event = 'wheel';\n }\n }\n if (!s.mousewheel.event && window.WheelEvent) {\n \n }\n if (!s.mousewheel.event && document.onmousewheel !== undefined) {\n s.mousewheel.event = 'mousewheel';\n }\n if (!s.mousewheel.event) {\n s.mousewheel.event = 'DOMMouseScroll';\n }\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var we = s.mousewheel.event;\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n //WebKits\n if (we === 'mousewheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;\n }\n }\n //Old FireFox\n else if (we === 'DOMMouseScroll') delta = -e.detail;\n //New FireFox\n else if (we === 'wheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;\n }\n }\n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n if (s.params.autoplay) s.stopAutoplay();\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.off(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.on(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1)\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Dom7 Library\n ===========================*/\n var Dom7 = (function () {\n var Dom7 = function (arr) {\n var _this = this, i = 0;\n // Create array-like object\n for (i = 0; i < arr.length; i++) {\n _this[i] = arr[i];\n }\n _this.length = arr.length;\n // Return collection with methods\n return this;\n };\n var $ = function (selector, context) {\n var arr = [], i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els, tempParent, html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.split('#')[1])];\n }\n else {\n // Other selectors\n els = (context || document).querySelectorAll(selector);\n }\n for (i = 0; i < els.length; i++) {\n if (els[i]) arr.push(els[i]);\n }\n }\n }\n // Node/element\n else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n }\n //Array of elements or instance of Dom\n else if (selector.length > 0 && selector[0].nodeType) {\n for (i = 0; i < selector.length; i++) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n };\n Dom7.prototype = {\n // Classes and attriutes\n addClass: function (className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.add(classes[i]);\n }\n }\n return this;\n },\n removeClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.remove(classes[i]);\n }\n }\n return this;\n },\n hasClass: function (className) {\n if (!this[0]) return false;\n else return this[0].classList.contains(className);\n },\n toggleClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n },\n attr: function (attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n else return undefined;\n }\n else {\n // Set attrs\n for (var i = 0; i < this.length; i++) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n }\n else {\n // Object\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n }\n },\n removeAttr: function (attr) {\n for (var i = 0; i < this.length; i++) {\n this[i].removeAttribute(attr);\n }\n return this;\n },\n data: function (key, value) {\n if (typeof value === 'undefined') {\n // Get value\n if (this[0]) {\n var dataKey = this[0].getAttribute('data-' + key);\n if (dataKey) return dataKey;\n else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];\n else return undefined;\n }\n else return undefined;\n }\n else {\n // Set value\n for (var i = 0; i < this.length; i++) {\n var el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n },\n // Transforms\n transform : function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n },\n transition: function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n },\n //Events\n on: function (eventName, targetSelector, listener, capture) {\n function handleLiveEvent(e) {\n var target = e.target;\n if ($(target).is(targetSelector)) listener.call(target, e);\n else {\n var parents = $(target).parents();\n for (var k = 0; k < parents.length; k++) {\n if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);\n }\n }\n }\n var events = eventName.split(' ');\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n for (j = 0; j < events.length; j++) {\n this[i].addEventListener(events[j], listener, capture);\n }\n }\n else {\n //Live events\n for (j = 0; j < events.length; j++) {\n if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];\n this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});\n this[i].addEventListener(events[j], handleLiveEvent, capture);\n }\n }\n }\n \n return this;\n },\n off: function (eventName, targetSelector, listener, capture) {\n var events = eventName.split(' ');\n for (var i = 0; i < events.length; i++) {\n for (var j = 0; j < this.length; j++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n this[j].removeEventListener(events[i], listener, capture);\n }\n else {\n // Live event\n if (this[j].dom7LiveListeners) {\n for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {\n if (this[j].dom7LiveListeners[k].listener === listener) {\n this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);\n }\n }\n }\n }\n }\n }\n return this;\n },\n once: function (eventName, targetSelector, listener, capture) {\n var dom = this;\n if (typeof targetSelector === 'function') {\n targetSelector = false;\n listener = arguments[1];\n capture = arguments[2];\n }\n function proxy(e) {\n listener(e);\n dom.off(eventName, targetSelector, proxy, capture);\n }\n dom.on(eventName, targetSelector, proxy, capture);\n },\n trigger: function (eventName, eventData) {\n for (var i = 0; i < this.length; i++) {\n var evt;\n try {\n evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});\n }\n catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(eventName, true, true);\n evt.detail = eventData;\n }\n this[i].dispatchEvent(evt);\n }\n return this;\n },\n transitionEnd: function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n // Sizing/Styles\n width: function () {\n if (this[0] === window) {\n return window.innerWidth;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n else {\n return null;\n }\n }\n },\n outerWidth: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n },\n height: function () {\n if (this[0] === window) {\n return window.innerHeight;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n else {\n return null;\n }\n }\n },\n outerHeight: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));\n else\n return this[0].offsetHeight;\n }\n else return null;\n },\n offset: function () {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = window.pageYOffset || el.scrollTop;\n var scrollLeft = window.pageXOffset || el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n else {\n return null;\n }\n },\n css: function (props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n }\n else {\n for (i = 0; i < this.length; i++) {\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i++) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n },\n \n //Dom manipulation\n each: function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback.call(this[i], i, this[i]);\n }\n return this;\n },\n html: function (html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].innerHTML = html;\n }\n return this;\n }\n },\n text: function (text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n else return null;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].textContent = text;\n }\n return this;\n }\n },\n is: function (selector) {\n if (!this[0]) return false;\n var compareWith, i;\n if (typeof selector === 'string') {\n var el = this[0];\n if (el === document) return selector === document;\n if (el === window) return selector === window;\n \n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n else {\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n }\n else if (selector === document) return this[0] === document;\n else if (selector === window) return this[0] === window;\n else {\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n return false;\n }\n \n },\n index: function () {\n if (this[0]) {\n var child = this[0];\n var i = 0;\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i++;\n }\n return i;\n }\n else return undefined;\n },\n eq: function (index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n else return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n },\n append: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].appendChild(newChild[j]);\n }\n }\n else {\n this[i].appendChild(newChild);\n }\n }\n return this;\n },\n prepend: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n // this[i].insertAdjacentHTML('afterbegin', newChild);\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n }\n else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n },\n insertBefore: function (selector) {\n var before = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n }\n else if (before.length > 1) {\n for (var j = 0; j < before.length; j++) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n },\n insertAfter: function (selector) {\n var after = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n }\n else if (after.length > 1) {\n for (var j = 0; j < after.length; j++) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n },\n next: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n nextAll: function (selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n var next = el.nextElementSibling;\n if (selector) {\n if($(next).is(selector)) nextEls.push(next);\n }\n else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n },\n prev: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n prevAll: function (selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling;\n if (selector) {\n if($(prev).is(selector)) prevEls.push(prev);\n }\n else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n },\n parent: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n }\n else {\n parents.push(this[i].parentNode);\n }\n }\n return $($.unique(parents));\n },\n parents: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n var parent = this[i].parentNode;\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n }\n else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $($.unique(parents));\n },\n find : function (selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i++) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j++) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n },\n children: function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var childNodes = this[i].childNodes;\n \n for (var j = 0; j < childNodes.length; j++) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n }\n else {\n if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);\n }\n }\n }\n return new Dom7($.unique(children));\n },\n remove: function () {\n for (var i = 0; i < this.length; i++) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n },\n add: function () {\n var dom = this;\n var i, j;\n for (i = 0; i < arguments.length; i++) {\n var toAdd = $(arguments[i]);\n for (j = 0; j < toAdd.length; j++) {\n dom[dom.length] = toAdd[j];\n dom.length++;\n }\n }\n return dom;\n }\n };\n $.fn = Dom7.prototype;\n $.unique = function (arr) {\n var unique = [];\n for (var i = 0; i < arr.length; i++) {\n if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);\n }\n return unique;\n };\n \n return $;\n })();\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n }\n\n window.Swiper = Swiper;\n})();\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n//# sourceMappingURL=maps/swiper.js.map\n"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js
deleted file mode 100644
index 3cd248ac22..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js
+++ /dev/null
@@ -1,3778 +0,0 @@
-/**
- * Swiper 3.3.1
- * Most modern mobile touch slider and framework with hardware accelerated transitions
- *
- * http://www.idangero.us/swiper/
- *
- * Copyright 2016, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
- *
- * Licensed under MIT
- *
- * Released on: February 7, 2016
- */
-(function () {
- 'use strict';
- var $;
- /*===========================
- Swiper
- ===========================*/
- var Swiper = function (container, params) {
- if (!(this instanceof Swiper)) return new Swiper(container, params);
-
- var defaults = {
- direction: 'horizontal',
- touchEventsTarget: 'container',
- initialSlide: 0,
- speed: 300,
- // autoplay
- autoplay: false,
- autoplayDisableOnInteraction: true,
- autoplayStopOnLast: false,
- // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
- iOSEdgeSwipeDetection: false,
- iOSEdgeSwipeThreshold: 20,
- // Free mode
- freeMode: false,
- freeModeMomentum: true,
- freeModeMomentumRatio: 1,
- freeModeMomentumBounce: true,
- freeModeMomentumBounceRatio: 1,
- 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,
- // Scrollbar
- scrollbar: null,
- scrollbarHide: true,
- scrollbarDraggable: false,
- scrollbarSnapOnRelease: false,
- // Keyboard Mousewheel
- keyboardControl: false,
- mousewheelControl: false,
- mousewheelReleaseOnEdges: false,
- mousewheelInvert: false,
- mousewheelForceToAxis: false,
- mousewheelSensitivity: 1,
- // Hash Navigation
- hashnav: 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,
- // 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'
- // Swiping/no swiping
- allowSwipeToPrev: true,
- allowSwipeToNext: true,
- swipeHandler: null, //'.swipe-handler',
- noSwiping: true,
- noSwipingClass: 'swiper-no-swiping',
- // NS
- slideClass: 'swiper-slide',
- slideActiveClass: 'swiper-slide-active',
- slideVisibleClass: 'swiper-slide-visible',
- slideDuplicateClass: 'swiper-slide-duplicate',
- slideNextClass: 'swiper-slide-next',
- slidePrevClass: 'swiper-slide-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',
- // 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)
- 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)
- */
-
- };
- var initialVirtualTranslate = params && params.virtualTranslate;
-
- params = params || {};
- var originalParams = {};
- for (var param in params) {
- if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {
- originalParams[param] = {};
- for (var deepParam in params[param]) {
- originalParams[param][deepParam] = params[param][deepParam];
- }
- }
- else {
- originalParams[param] = params[param];
- }
- }
- for (var def in defaults) {
- if (typeof params[def] === 'undefined') {
- params[def] = defaults[def];
- }
- else if (typeof params[def] === 'object') {
- for (var deepDef in defaults[def]) {
- if (typeof params[def][deepDef] === 'undefined') {
- params[def][deepDef] = defaults[def][deepDef];
- }
- }
- }
- }
-
- // Swiper
- var s = this;
-
- // Params
- s.params = params;
- s.originalParams = originalParams;
-
- // Classname
- s.classNames = [];
- /*=========================
- Dom Library and plugins
- ===========================*/
- if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){
- $ = Dom7;
- }
- if (typeof $ === 'undefined') {
- if (typeof Dom7 === 'undefined') {
- $ = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- $ = Dom7;
- }
- if (!$) return;
- }
- // Export it to Swiper instance
- s.$ = $;
-
- /*=========================
- Breakpoints
- ===========================*/
- s.currentBreakpoint = undefined;
- s.getActiveBreakpoint = function () {
- //Get breakpoint for window width
- if (!s.params.breakpoints) return false;
- var breakpoint = false;
- var points = [], point;
- for ( point in s.params.breakpoints ) {
- if (s.params.breakpoints.hasOwnProperty(point)) {
- points.push(point);
- }
- }
- points.sort(function (a, b) {
- return parseInt(a, 10) > parseInt(b, 10);
- });
- for (var i = 0; i < points.length; i++) {
- point = points[i];
- if (point >= window.innerWidth && !breakpoint) {
- breakpoint = point;
- }
- }
- return breakpoint || 'max';
- };
- s.setBreakpoint = function () {
- //Set breakpoint for window width and update parameters
- var breakpoint = s.getActiveBreakpoint();
- if (breakpoint && s.currentBreakpoint !== breakpoint) {
- var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;
- var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);
- for ( var param in breakPointsParams ) {
- s.params[param] = breakPointsParams[param];
- }
- s.currentBreakpoint = breakpoint;
- if(needsReLoop && s.destroyLoop) {
- s.reLoop(true);
- }
- }
- };
- // Set breakpoint on load
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- /*=========================
- Preparation - Define Container, Wrapper and Pagination
- ===========================*/
- s.container = $(container);
- if (s.container.length === 0) return;
- if (s.container.length > 1) {
- var swipers = [];
- s.container.each(function () {
- var container = this;
- swipers.push(new Swiper(this, params));
- });
- return swipers;
- }
-
- // Save instance in container HTML Element and in data
- s.container[0].swiper = s;
- s.container.data('swiper', s);
-
- s.classNames.push('swiper-container-' + s.params.direction);
-
- if (s.params.freeMode) {
- s.classNames.push('swiper-container-free-mode');
- }
- if (!s.support.flexbox) {
- s.classNames.push('swiper-container-no-flexbox');
- s.params.slidesPerColumn = 1;
- }
- if (s.params.autoHeight) {
- s.classNames.push('swiper-container-autoheight');
- }
- // Enable slides progress when required
- if (s.params.parallax || s.params.watchSlidesVisibility) {
- s.params.watchSlidesProgress = true;
- }
- // Coverflow / 3D
- if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {
- if (s.support.transforms3d) {
- s.params.watchSlidesProgress = true;
- s.classNames.push('swiper-container-3d');
- }
- else {
- s.params.effect = 'slide';
- }
- }
- if (s.params.effect !== 'slide') {
- s.classNames.push('swiper-container-' + s.params.effect);
- }
- if (s.params.effect === 'cube') {
- s.params.resistanceRatio = 0;
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.centeredSlides = false;
- s.params.spaceBetween = 0;
- s.params.virtualTranslate = true;
- s.params.setWrapperSize = false;
- }
- 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;
- s.params.setWrapperSize = false;
- if (typeof initialVirtualTranslate === 'undefined') {
- s.params.virtualTranslate = true;
- }
- }
-
- // Grab Cursor
- if (s.params.grabCursor && s.support.touch) {
- s.params.grabCursor = false;
- }
-
- // Wrapper
- s.wrapper = s.container.children('.' + s.params.wrapperClass);
-
- // Pagination
- if (s.params.pagination) {
- s.paginationContainer = $(s.params.pagination);
- if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {
- s.paginationContainer = s.container.find(s.params.pagination);
- }
-
- if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {
- s.paginationContainer.addClass('swiper-pagination-clickable');
- }
- else {
- s.params.paginationClickable = false;
- }
- s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
- }
- // Next/Prev Buttons
- if (s.params.nextButton || s.params.prevButton) {
- if (s.params.nextButton) {
- s.nextButton = $(s.params.nextButton);
- if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {
- s.nextButton = s.container.find(s.params.nextButton);
- }
- }
- if (s.params.prevButton) {
- s.prevButton = $(s.params.prevButton);
- if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {
- s.prevButton = s.container.find(s.params.prevButton);
- }
- }
- }
-
- // Is Horizontal
- s.isHorizontal = function () {
- return s.params.direction === 'horizontal';
- };
- // s.isH = isH;
-
- // RTL
- s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');
- if (s.rtl) {
- s.classNames.push('swiper-container-rtl');
- }
-
- // Wrong RTL support
- if (s.rtl) {
- s.wrongRTL = s.wrapper.css('display') === '-webkit-box';
- }
-
- // Columns
- if (s.params.slidesPerColumn > 1) {
- s.classNames.push('swiper-container-multirow');
- }
-
- // Check for Android
- if (s.device.android) {
- s.classNames.push('swiper-container-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;
- };
- s.lockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = false;
- };
- s.lockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;
- };
- s.unlockSwipeToNext = function () {
- s.params.allowSwipeToNext = true;
- };
- s.unlockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = true;
- };
- s.unlockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;
- };
-
- /*=========================
- Round helper
- ===========================*/
- function round(a) {
- return Math.floor(a);
- }
- /*=========================
- Set grab cursor
- ===========================*/
- if (s.params.grabCursor) {
- s.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
- /*=========================
- Update on Images Ready
- ===========================*/
- s.imagesToLoad = [];
- s.imagesLoaded = 0;
-
- s.loadImage = function (imgElement, src, srcset, 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 (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) 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')), true, _onReady);
- }
- };
-
- /*=========================
- Autoplay
- ===========================*/
- s.autoplayTimeoutId = undefined;
- s.autoplaying = false;
- s.autoplayPaused = false;
- function 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();
- }
- }
- }
- }, s.params.autoplay);
- }
- 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 () {
- // Update Height
- var slide = s.slides.eq(s.activeIndex)[0];
- if (typeof slide !== 'undefined') {
- var newHeight = slide.offsetHeight;
- 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-top': (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 (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;
- s.wrapper.css({width: 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;
- }
- };
-
- /*=========================
- 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 - 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 (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();
- };
-
- /*=========================
- Classes
- ===========================*/
- s.updateClasses = function () {
- s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);
- var activeSlide = s.slides.eq(s.activeIndex);
- // Active classes
- activeSlide.addClass(s.params.slideActiveClass);
- // Next Slide
- var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
- if (s.params.loop && nextSlide.length === 0) {
- s.slides.eq(0).addClass(s.params.slideNextClass);
- }
- // Prev Slide
- var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);
- if (s.params.loop && prevSlide.length === 0) {
- s.slides.eq(-1).addClass(s.params.slidePrevClass);
- }
-
- // 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(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) {
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updateProgress();
- s.updatePagination();
- s.updateClasses();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- function forceSetTranslate() {
- newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
- }
- if (updateTranslate) {
- var translated, newTranslate;
- 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) {
- //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;
- };
-
- /*=========================
- Events
- ===========================*/
-
- //Define Touch Events
- var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];
- if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];
- else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
- s.touchEvents = {
- start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],
- move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],
- end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]
- };
-
-
- // 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) {
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);
- touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);
- }
- if (params.simulateTouch && !s.device.ios && !s.device.android) {
- touchEventsTarget[action]('mousedown', s.onTouchStart, false);
- document[action]('mousemove', s.onTouchMove, moveCapture);
- document[action]('mouseup', s.onTouchEnd, false);
- }
- }
- window[action]('resize', s.onResize);
-
- // Next, Prev, Index
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.nextButton[actionDom]('click', s.onClickNext);
- if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.prevButton[actionDom]('click', s.onClickPrev);
- if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.pagination && s.params.paginationClickable) {
- s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);
- if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);
- }
-
- // Prevent Links Clicks
- if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);
- };
- s.attachEvents = function () {
- s.initEvents();
- };
- s.detachEvents = function () {
- s.initEvents(true);
- };
-
- /*=========================
- Handle Clicks
- ===========================*/
- // Prevent Clicks
- s.allowClick = true;
- s.preventClicks = function (e) {
- if (!s.allowClick) {
- if (s.params.preventClicks) e.preventDefault();
- if (s.params.preventClicksPropagation && s.animating) {
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- }
- };
- // Clicks
- s.onClickNext = function (e) {
- e.preventDefault();
- if (s.isEnd && !s.params.loop) return;
- s.slideNext();
- };
- s.onClickPrev = function (e) {
- e.preventDefault();
- if (s.isBeginning && !s.params.loop) return;
- s.slidePrev();
- };
- s.onClickIndex = function (e) {
- e.preventDefault();
- var index = $(this).index() * s.params.slidesPerGroup;
- if (s.params.loop) index = index + s.loopedSlides;
- s.slideTo(index);
- };
-
- /*=========================
- Handle Touches
- ===========================*/
- function findElementInEvent(e, selector) {
- var el = $(e.target);
- if (!el.is(selector)) {
- if (typeof selector === 'string') {
- el = el.parents(selector);
- }
- else if (selector.nodeType) {
- var found;
- el.parents().each(function (index, _el) {
- if (_el === selector) found = selector;
- });
- if (!found) return undefined;
- else return selector;
- }
- }
- if (el.length === 0) {
- return undefined;
- }
- return el[0];
- }
- s.updateClickedSlide = function (e) {
- var slide = findElementInEvent(e, '.' + s.params.slideClass);
- var slideFound = false;
- if (slide) {
- for (var i = 0; i < s.slides.length; i++) {
- if (s.slides[i] === slide) slideFound = true;
- }
- }
-
- if (slide && slideFound) {
- s.clickedSlide = slide;
- s.clickedIndex = $(slide).index();
- }
- else {
- s.clickedSlide = undefined;
- s.clickedIndex = undefined;
- return;
- }
- if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {
- var slideToIndex = s.clickedIndex,
- realIndex,
- duplicatedSlides;
- if (s.params.loop) {
- if (s.animating) return;
- realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');
- if (s.params.centeredSlides) {
- if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- else {
- if (slideToIndex > s.slides.length - s.params.slidesPerView) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').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',
- // 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 && 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 = 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' && s.browser.ieTouch) {
- 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 && s.browser.ieTouch) {
- 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grabbing';
- s.container[0].style.cursor = '-moz-grabbin';
- s.container[0].style.cursor = 'grabbing';
- }
- }
- 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;
- }
-
- if (!s.params.followFinger) return;
-
- // 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;
- }
- }
- // 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
-
- // 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;
- }
-
- 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
- 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;
-
- 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.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.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);
- };
-
- /*=========================
- Translate/transition helpers
- ===========================*/
- s.setWrapperTransition = function (duration, byController) {
- s.wrapper.transition(duration);
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTransition(duration);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTransition(duration);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTransition(duration);
- }
- if (s.params.control && s.controller) {
- s.controller.setTransition(duration, byController);
- }
- s.emit('onSetTransition', s, duration);
- };
- s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {
- var x = 0, y = 0, z = 0;
- if (s.isHorizontal()) {
- x = s.rtl ? -translate : translate;
- }
- else {
- y = translate;
- }
-
- if (s.params.roundLengths) {
- x = round(x);
- y = round(y);
- }
-
- if (!s.params.virtualTranslate) {
- if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');
- else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');
- }
-
- s.translate = s.isHorizontal() ? x : y;
-
- // Check if we need to update progress
- var progress;
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- if (translatesDiff === 0) {
- progress = 0;
- }
- else {
- progress = (translate - s.minTranslate()) / (translatesDiff);
- }
- if (progress !== s.progress) {
- s.updateProgress(translate);
- }
-
- if (updateActiveIndex) s.updateActiveIndex();
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTranslate(s.translate);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTranslate(s.translate);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTranslate(s.translate);
- }
- if (s.params.control && s.controller) {
- s.controller.setTranslate(s.translate, byController);
- }
- s.emit('onSetTranslate', s, s.translate);
- };
-
- s.getTranslate = function (el, axis) {
- var matrix, curTransform, curStyle, transformMatrix;
-
- // automatic axis detection
- if (typeof axis === 'undefined') {
- axis = 'x';
- }
-
- if (s.params.virtualTranslate) {
- return s.rtl ? -s.translate : s.translate;
- }
-
- curStyle = window.getComputedStyle(el, null);
- if (window.WebKitCSSMatrix) {
- curTransform = curStyle.transform || curStyle.webkitTransform;
- if (curTransform.split(',').length > 6) {
- curTransform = curTransform.split(', ').map(function(a){
- return a.replace(',','.');
- }).join(', ');
- }
- // Some old versions of Webkit choke when 'none' is passed; pass
- // empty string instead in this case
- transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
- }
- else {
- transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
- matrix = transformMatrix.toString().split(',');
- }
-
- if (axis === 'x') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m41;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[12]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[4]);
- }
- if (axis === 'y') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m42;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[13]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[5]);
- }
- if (s.rtl && curTransform) curTransform = -curTransform;
- return curTransform || 0;
- };
- s.getWrapperTranslate = function (axis) {
- if (typeof axis === 'undefined') {
- axis = s.isHorizontal() ? 'x' : 'y';
- }
- return s.getTranslate(s.wrapper[0], axis);
- };
-
- /*=========================
- Observer
- ===========================*/
- s.observers = [];
- function initObserver(target, options) {
- options = options || {};
- // create an observer instance
- var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
- var observer = new ObserverFunc(function (mutations) {
- mutations.forEach(function (mutation) {
- s.onResize(true);
- s.emit('onObserverUpdate', s, mutation);
- });
- });
-
- observer.observe(target, {
- attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
- childList: typeof options.childList === 'undefined' ? true : options.childList,
- characterData: typeof options.characterData === 'undefined' ? true : options.characterData
- });
-
- s.observers.push(observer);
- }
- s.initObservers = function () {
- if (s.params.observeParents) {
- var containerParents = s.container.parents();
- for (var i = 0; i < containerParents.length; i++) {
- initObserver(containerParents[i]);
- }
- }
-
- // Observe container
- initObserver(s.container[0], {childList: false});
-
- // Observe wrapper
- initObserver(s.wrapper[0], {attributes: false});
- };
- s.disconnectObservers = function () {
- for (var i = 0; i < s.observers.length; i++) {
- s.observers[i].disconnect();
- }
- s.observers = [];
- };
- /*=========================
- Loop
- ===========================*/
- // Create looped slides
- s.createLoop = function () {
- // Remove duplicated slides
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
-
- var slides = s.wrapper.children('.' + s.params.slideClass);
-
- if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;
-
- s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);
- s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;
- if (s.loopedSlides > slides.length) {
- s.loopedSlides = slides.length;
- }
-
- var prependSlides = [], appendSlides = [], i;
- slides.each(function (index, el) {
- var slide = $(this);
- if (index < s.loopedSlides) appendSlides.push(el);
- if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);
- slide.attr('data-swiper-slide-index', index);
- });
- for (i = 0; i < appendSlides.length; i++) {
- s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- for (i = prependSlides.length - 1; i >= 0; i--) {
- s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- };
- s.destroyLoop = function () {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
- s.slides.removeAttr('data-swiper-slide-index');
- };
- s.reLoop = function (updatePosition) {
- var oldIndex = s.activeIndex - s.loopedSlides;
- s.destroyLoop();
- s.createLoop();
- s.updateSlidesSize();
- if (updatePosition) {
- s.slideTo(oldIndex + s.loopedSlides, 0, false);
- }
-
- };
- s.fixLoop = function () {
- var newIndex;
- //Fix For Negative Oversliding
- if (s.activeIndex < s.loopedSlides) {
- newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- //Fix For Positive Oversliding
- else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {
- newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- };
- /*=========================
- Append/Prepend/Remove Slides
- ===========================*/
- s.appendSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.append(slides[i]);
- }
- }
- else {
- s.wrapper.append(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- };
- s.prependSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- var newActiveIndex = s.activeIndex + 1;
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.prepend(slides[i]);
- }
- newActiveIndex = s.activeIndex + slides.length;
- }
- else {
- s.wrapper.prepend(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- s.slideTo(newActiveIndex, 0, false);
- };
- s.removeSlide = function (slidesIndexes) {
- if (s.params.loop) {
- s.destroyLoop();
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- }
- var newActiveIndex = s.activeIndex,
- indexToRemove;
- if (typeof slidesIndexes === 'object' && slidesIndexes.length) {
- for (var i = 0; i < slidesIndexes.length; i++) {
- indexToRemove = slidesIndexes[i];
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- }
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
- else {
- indexToRemove = slidesIndexes;
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
-
- if (s.params.loop) {
- s.createLoop();
- }
-
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- if (s.params.loop) {
- s.slideTo(newActiveIndex + s.loopedSlides, 0, false);
- }
- else {
- s.slideTo(newActiveIndex, 0, false);
- }
-
- };
- s.removeAllSlides = function () {
- var slidesIndexes = [];
- for (var i = 0; i < s.slides.length; i++) {
- slidesIndexes.push(i);
- }
- s.removeSlide(slidesIndexes);
- };
-
-
- /*=========================
- Effects
- ===========================*/
- s.effects = {
- fade: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var offset = slide[0].swiperSlideOffset;
- var tx = -offset;
- if (!s.params.virtualTranslate) tx = tx - s.translate;
- var ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
- var slideOpacity = s.params.fade.crossFade ?
- Math.max(1 - Math.abs(slide[0].progress), 0) :
- 1 + Math.min(Math.max(slide[0].progress, -1), 0);
- slide
- .css({
- opacity: slideOpacity
- })
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');
-
- }
-
- },
- setTransition: function (duration) {
- s.slides.transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- flip: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var progress = slide[0].progress;
- if (s.params.flip.limitRotation) {
- progress = Math.max(Math.min(slide[0].progress, 1), -1);
- }
- var offset = slide[0].swiperSlideOffset;
- var rotate = -180 * progress,
- rotateY = rotate,
- rotateX = 0,
- tx = -offset,
- ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- rotateX = -rotateY;
- rotateY = 0;
- }
- else if (s.rtl) {
- rotateY = -rotateY;
- }
-
- slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;
-
- if (s.params.flip.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
-
- slide
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.eq(s.activeIndex).transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- if (!$(this).hasClass(s.params.slideActiveClass)) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- cube: {
- setTranslate: function () {
- var wrapperRotate = 0, cubeShadow;
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow = s.wrapper.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.wrapper.append(cubeShadow);
- }
- cubeShadow.css({height: s.width + 'px'});
- }
- else {
- cubeShadow = s.container.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.container.append(cubeShadow);
- }
- }
- }
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var slideAngle = i * 90;
- var round = Math.floor(slideAngle / 360);
- if (s.rtl) {
- slideAngle = -slideAngle;
- round = Math.floor(-slideAngle / 360);
- }
- var progress = Math.max(Math.min(slide[0].progress, 1), -1);
- var tx = 0, ty = 0, tz = 0;
- if (i % 4 === 0) {
- tx = - round * 4 * s.size;
- tz = 0;
- }
- else if ((i - 1) % 4 === 0) {
- tx = 0;
- tz = - round * 4 * s.size;
- }
- else if ((i - 2) % 4 === 0) {
- tx = s.size + round * 4 * s.size;
- tz = s.size;
- }
- else if ((i - 3) % 4 === 0) {
- tx = - s.size;
- tz = 3 * s.size + s.size * 4 * round;
- }
- if (s.rtl) {
- tx = -tx;
- }
-
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
-
- var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';
- if (progress <= 1 && progress > -1) {
- wrapperRotate = i * 90 + progress * 90;
- if (s.rtl) wrapperRotate = -i * 90 - progress * 90;
- }
- slide.transform(transform);
- if (s.params.cube.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
- }
- s.wrapper.css({
- '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'
- });
-
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');
- }
- else {
- var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
- var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
- var scale1 = s.params.cube.shadowScale,
- scale2 = s.params.cube.shadowScale / multiplier,
- offset = s.params.cube.shadowOffset;
- cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');
- }
- }
- var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;
- s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.cube.shadow && !s.isHorizontal()) {
- s.container.find('.swiper-cube-shadow').transition(duration);
- }
- }
- },
- coverflow: {
- setTranslate: function () {
- var transform = s.translate;
- var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;
- var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;
- var translate = s.params.coverflow.depth;
- //Each slide offset from center
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideSize = s.slidesSizesGrid[i];
- var slideOffset = slide[0].swiperSlideOffset;
- var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;
-
- var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;
- var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;
- // var rotateZ = 0
- var translateZ = -translate * Math.abs(offsetMultiplier);
-
- var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);
- var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;
-
- //Fix for ultra small values
- if (Math.abs(translateX) < 0.001) translateX = 0;
- if (Math.abs(translateY) < 0.001) translateY = 0;
- if (Math.abs(translateZ) < 0.001) translateZ = 0;
- if (Math.abs(rotateY) < 0.001) rotateY = 0;
- if (Math.abs(rotateX) < 0.001) rotateX = 0;
-
- var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';
-
- slide.transform(slideTransform);
- slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
- if (s.params.coverflow.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
- if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
- }
- }
-
- //Set correct perspective for IE10
- if (s.browser.ie) {
- var ws = s.wrapper[0].style;
- ws.perspectiveOrigin = center + 'px 50%';
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- }
- }
- };
-
- /*=========================
- Images Lazy Loading
- ===========================*/
- s.lazy = {
- initialImageLoaded: false,
- loadImageInSlide: function (index, loadInDuplicate) {
- if (typeof index === 'undefined') return;
- if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;
- if (s.slides.length === 0) return;
-
- var slide = s.slides.eq(index);
- var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');
- if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {
- img = img.add(slide[0]);
- }
- if (img.length === 0) return;
-
- img.each(function () {
- var _img = $(this);
- _img.addClass('swiper-lazy-loading');
- var background = _img.attr('data-background');
- var src = _img.attr('data-src'),
- srcset = _img.attr('data-srcset');
- s.loadImage(_img[0], (src || background), srcset, false, function () {
- if (background) {
- _img.css('background-image', 'url("' + background + '")');
- _img.removeAttr('data-background');
- }
- else {
- if (srcset) {
- _img.attr('srcset', srcset);
- _img.removeAttr('data-srcset');
- }
- if (src) {
- _img.attr('src', src);
- _img.removeAttr('data-src');
- }
-
- }
-
- _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');
- slide.find('.swiper-lazy-preloader, .preloader').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;
- if (s.params.watchSlidesVisibility) {
- s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {
- s.lazy.loadImageInSlide($(this).index());
- });
- }
- else {
- if (s.params.slidesPerView > 1) {
- for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- s.lazy.loadImageInSlide(s.activeIndex);
- }
- }
- if (s.params.lazyLoadingInPrevNext) {
- if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {
- var amount = s.params.lazyLoadingInPrevNextAmount;
- var spv = s.params.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 + s.params.slidesPerView; i < maxIndex; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- // Prev Slides
- for (i = minIndex; i < s.activeIndex ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);
- if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());
-
- var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);
- if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());
- }
- }
- },
- onTransitionStart: function () {
- if (s.params.lazyLoading) {
- if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {
- s.lazy.load();
- }
- }
- },
- onTransitionEnd: function () {
- if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {
- s.lazy.load();
- }
- }
- };
-
-
- /*=========================
- Scrollbar
- ===========================*/
- s.scrollbar = {
- isTouched: false,
- setDragPosition: function (e) {
- var sb = s.scrollbar;
- var x = 0, y = 0;
- var translate;
- var pointerPosition = s.isHorizontal() ?
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;
- var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;
- var positionMin = -s.minTranslate() * sb.moveDivider;
- var positionMax = -s.maxTranslate() * sb.moveDivider;
- if (position < positionMin) {
- position = positionMin;
- }
- else if (position > positionMax) {
- position = positionMax;
- }
- position = -position / sb.moveDivider;
- s.updateProgress(position);
- s.setWrapperTranslate(position, true);
- },
- dragStart: function (e) {
- var sb = s.scrollbar;
- sb.isTouched = true;
- e.preventDefault();
- e.stopPropagation();
-
- sb.setDragPosition(e);
- clearTimeout(sb.dragTimeout);
-
- sb.track.transition(0);
- if (s.params.scrollbarHide) {
- sb.track.css('opacity', 1);
- }
- s.wrapper.transition(100);
- sb.drag.transition(100);
- s.emit('onScrollbarDragStart', s);
- },
- dragMove: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- sb.setDragPosition(e);
- s.wrapper.transition(0);
- sb.track.transition(0);
- sb.drag.transition(0);
- s.emit('onScrollbarDragMove', s);
- },
- dragEnd: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- sb.isTouched = false;
- if (s.params.scrollbarHide) {
- clearTimeout(sb.dragTimeout);
- sb.dragTimeout = setTimeout(function () {
- sb.track.css('opacity', 0);
- sb.track.transition(400);
- }, 1000);
-
- }
- s.emit('onScrollbarDragEnd', s);
- if (s.params.scrollbarSnapOnRelease) {
- s.slideReset();
- }
- },
- enableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).on(s.touchEvents.start, sb.dragStart);
- $(target).on(s.touchEvents.move, sb.dragMove);
- $(target).on(s.touchEvents.end, sb.dragEnd);
- },
- disableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).off(s.touchEvents.start, sb.dragStart);
- $(target).off(s.touchEvents.move, sb.dragMove);
- $(target).off(s.touchEvents.end, sb.dragEnd);
- },
- set: function () {
- if (!s.params.scrollbar) return;
- var sb = s.scrollbar;
- sb.track = $(s.params.scrollbar);
- if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {
- sb.track = s.container.find(s.params.scrollbar);
- }
- sb.drag = sb.track.find('.swiper-scrollbar-drag');
- if (sb.drag.length === 0) {
- sb.drag = $('');
- sb.track.append(sb.drag);
- }
- sb.drag[0].style.width = '';
- sb.drag[0].style.height = '';
- sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;
-
- sb.divider = s.size / s.virtualSize;
- sb.moveDivider = sb.divider * (sb.trackSize / s.size);
- sb.dragSize = sb.trackSize * sb.divider;
-
- if (s.isHorizontal()) {
- sb.drag[0].style.width = sb.dragSize + 'px';
- }
- else {
- sb.drag[0].style.height = sb.dragSize + 'px';
- }
-
- if (sb.divider >= 1) {
- sb.track[0].style.display = 'none';
- }
- else {
- sb.track[0].style.display = '';
- }
- if (s.params.scrollbarHide) {
- sb.track[0].style.opacity = 0;
- }
- },
- setTranslate: function () {
- if (!s.params.scrollbar) return;
- var diff;
- var sb = s.scrollbar;
- var translate = s.translate || 0;
- var newPos;
-
- var newSize = sb.dragSize;
- newPos = (sb.trackSize - sb.dragSize) * s.progress;
- if (s.rtl && s.isHorizontal()) {
- newPos = -newPos;
- if (newPos > 0) {
- newSize = sb.dragSize - newPos;
- newPos = 0;
- }
- else if (-newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize + newPos;
- }
- }
- else {
- if (newPos < 0) {
- newSize = sb.dragSize + newPos;
- newPos = 0;
- }
- else if (newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize - newPos;
- }
- }
- if (s.isHorizontal()) {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');
- }
- else {
- sb.drag.transform('translateX(' + (newPos) + 'px)');
- }
- sb.drag[0].style.width = newSize + 'px';
- }
- else {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');
- }
- else {
- sb.drag.transform('translateY(' + (newPos) + 'px)');
- }
- sb.drag[0].style.height = newSize + 'px';
- }
- if (s.params.scrollbarHide) {
- clearTimeout(sb.timeout);
- sb.track[0].style.opacity = 1;
- sb.timeout = setTimeout(function () {
- sb.track[0].style.opacity = 0;
- sb.track.transition(400);
- }, 1000);
- }
- },
- setTransition: function (duration) {
- if (!s.params.scrollbar) return;
- s.scrollbar.drag.transition(duration);
- }
- };
-
- /*=========================
- Controller
- ===========================*/
- s.controller = {
- LinearSpline: function (x, y) {
- 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];
- };
-
- 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;
- };
- })();
- },
- //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 (s.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 (s.isArray(controlled)) {
- for (i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTransition(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
- setControlledTransition(controlled);
- }
- }
- };
-
- /*=========================
- Hash Navigation
- ===========================*/
- s.hashnav = {
- init: function () {
- if (!s.params.hashnav) return;
- s.hashnav.initialized = true;
- var hash = document.location.hash.replace('#', '');
- if (!hash) return;
- 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');
- if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, s.params.runCallbacksOnInit, true);
- }
- }
- },
- setHash: function () {
- if (!s.hashnav.initialized || !s.params.hashnav) return;
- document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';
- }
- };
-
- /*=========================
- 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('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').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.disableKeyboardControl = function () {
- s.params.keyboardControl = false;
- $(document).off('keydown', handleKeyboard);
- };
- s.enableKeyboardControl = function () {
- s.params.keyboardControl = true;
- $(document).on('keydown', handleKeyboard);
- };
-
-
- /*=========================
- Mousewheel Control
- ===========================*/
- s.mousewheel = {
- event: false,
- lastScrollTime: (new window.Date()).getTime()
- };
- if (s.params.mousewheelControl) {
- try {
- new window.WheelEvent('wheel');
- s.mousewheel.event = 'wheel';
- } catch (e) {
- if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {
- s.mousewheel.event = 'wheel';
- }
- }
- if (!s.mousewheel.event && window.WheelEvent) {
-
- }
- if (!s.mousewheel.event && document.onmousewheel !== undefined) {
- s.mousewheel.event = 'mousewheel';
- }
- if (!s.mousewheel.event) {
- s.mousewheel.event = 'DOMMouseScroll';
- }
- }
- function handleMousewheel(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var we = s.mousewheel.event;
- var delta = 0;
- var rtlFactor = s.rtl ? -1 : 1;
-
- //WebKits
- if (we === 'mousewheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;
- }
- }
- //Old FireFox
- else if (we === 'DOMMouseScroll') delta = -e.detail;
- //New FireFox
- else if (we === 'wheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;
- }
- }
- 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();
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- else {
- if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();
- 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();
- }
- }
-
- // Return page scroll on edge positions
- if (position === 0 || position === s.maxTranslate()) return;
- }
- if (s.params.autoplay) s.stopAutoplay();
-
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- return false;
- }
- s.disableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.off(s.mousewheel.event, handleMousewheel);
- return true;
- };
-
- s.enableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.on(s.mousewheel.event, handleMousewheel);
- 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);
- });
- }
- };
-
-
- /*=========================
- 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.autoplay) {
- s.startAutoplay();
- }
- if (s.params.keyboardControl) {
- if (s.enableKeyboardControl) s.enableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.enableMousewheelControl) s.enableMousewheelControl();
- }
- 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();
- // 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();
- // Destroy callback
- s.emit('onDestroy');
- // Delete instance
- if (deleteInstance !== false) s = null;
- };
-
- s.init();
-
-
-
- // Return swiper instance
- return s;
- };
-
-
- /*==================================================
- Prototype
- ====================================================*/
- Swiper.prototype = {
- isSafari: (function () {
- var ua = navigator.userAgent.toLowerCase();
- return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
- })(),
- isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(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)
- },
- /*==================================================
- Devices
- ====================================================*/
- device: (function () {
- var ua = 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)\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);
- })()
- },
- /*==================================================
- Plugins
- ====================================================*/
- plugins: {}
- };
-
-
- /*===========================
- Get Dom libraries
- ===========================*/
- var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];
- for (var i = 0; i < swiperDomPlugins.length; i++) {
- if (window[swiperDomPlugins[i]]) {
- addLibraryPlugin(window[swiperDomPlugins[i]]);
- }
- }
- // Required DOM Plugins
- var domLib;
- if (typeof Dom7 === 'undefined') {
- domLib = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- domLib = Dom7;
- }
-
- /*===========================
- Add .swiper plugin from Dom libraries
- ===========================*/
- function addLibraryPlugin(lib) {
- lib.fn.swiper = function (params) {
- var firstInstance;
- lib(this).each(function () {
- var s = new Swiper(this, params);
- if (!firstInstance) firstInstance = s;
- });
- return firstInstance;
- };
- }
-
- if (domLib) {
- if (!('transitionEnd' in domLib.fn)) {
- domLib.fn.transitionEnd = function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- };
- }
- if (!('transform' in domLib.fn)) {
- domLib.fn.transform = function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- };
- }
- if (!('transition' in domLib.fn)) {
- domLib.fn.transition = function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- };
- }
- }
-
- window.Swiper = Swiper;
-})();
-/*===========================
-Swiper AMD Export
-===========================*/
-if (typeof(module) !== 'undefined')
-{
- module.exports = window.Swiper;
-}
-else if (typeof define === 'function' && define.amd) {
- define([], function () {
- 'use strict';
- return window.Swiper;
- });
-}
-//# sourceMappingURL=maps/swiper.jquery.js.map
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js
deleted file mode 100644
index e134869810..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Swiper 3.3.1
- * Most modern mobile touch slider and framework with hardware accelerated transitions
- *
- * http://www.idangero.us/swiper/
- *
- * Copyright 2016, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
- *
- * Licensed under MIT
- *
- * Released on: February 7, 2016
- */
-!function(){"use strict";function e(e){e.fn.swiper=function(a){var s;return e(this).each(function(){var e=new t(this,a);s||(s=e)}),s}}var a,t=function(e,s){function r(e){return Math.floor(e)}function i(){y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},y.params.autoplay)}function n(e,t){var s=a(e.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});s.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),y.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents(".swiper-slide").length>0&&0===y.container.parents(".swiper-slide-active").length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev())}}function p(e){e.originalEvent&&(e=e.originalEvent);var a=y.mousewheel.event,t=0,s=y.rtl?-1:1;if("mousewheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*s}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*s:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*s}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*s:-e.deltaY;if(0!==t){if(y.params.mousewheelInvert&&(t=-t),y.params.freeMode){var r=y.getWrapperTranslate()+t*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(0>t)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext();else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev();y.mousewheel.lastScrollTime=(new window.Date).getTime()}return y.params.autoplay&&y.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function d(e,t){e=a(e);var s,r,i,n=y.rtl?-1:1;s=e.attr("data-swiper-parallax")||"0",r=e.attr("data-swiper-parallax-x"),i=e.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",e.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(e,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-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",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},m=s&&s.virtualTranslate;s=s||{};var f={};for(var g in s)if("object"!=typeof s[g]||null===s[g]||(s[g].nodeType||s[g]===window||s[g]===document||"undefined"!=typeof Dom7&&s[g]instanceof Dom7||"undefined"!=typeof jQuery&&s[g]instanceof jQuery))f[g]=s[g];else{f[g]={};for(var h in s[g])f[g][h]=s[g][h]}for(var v in c)if("undefined"==typeof s[v])s[v]=c[v];else if("object"==typeof s[v])for(var w in c[v])"undefined"==typeof s[v][w]&&(s[v][w]=c[v][w]);var y=this;if(y.params=s,y.originalParams=f,y.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof Dom7&&(a=Dom7),("undefined"!=typeof a||(a="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=a,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=a(e),0!==y.container.length)){if(y.container.length>1){var b=[];return y.container.each(function(){b.push(new t(this,s))}),b}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push("swiper-container-"+y.params.direction),y.params.freeMode&&y.classNames.push("swiper-container-free-mode"),y.support.flexbox||(y.classNames.push("swiper-container-no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push("swiper-container-autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push("swiper-container-3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push("swiper-container-"+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0,y.params.setWrapperSize=!1),("fade"===y.params.effect||"flip"===y.params.effect)&&(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,y.params.setWrapperSize=!1,"undefined"==typeof m&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=a(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass("swiper-pagination-clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass("swiper-pagination-"+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=a(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=a(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push("swiper-container-rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push("swiper-container-multirow"),y.device.android&&y.classNames.push("swiper-container-android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0},y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab"),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r){function i(){r&&r()}var n;e.complete&&s?i():a?(n=new window.Image,n.onload=i,n.onerror=i,t&&(n.srcset=t),a&&(n.src=a)):i()},y.preloadImages=function(){function e(){"undefined"!=typeof y&&null!==y&&(void 0!==y.imagesLoaded&&y.imagesLoaded++,y.imagesLoaded===y.imagesToLoad.length&&(y.params.updateOnImagesReady&&y.update(),y.emit("onImagesReady",y)))}y.imagesToLoad=y.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var c,m,f;"column"===y.params.slidesPerColumnFill?(m=Math.floor(e/l),f=e-m*l,(m>d||m===d&&f===l-1)&&++f>=l&&(f=0,m++),c=m+f*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(f=Math.floor(e/p),m=e-f*p),u.css({"margin-top":0!==f&&y.params.spaceBetween&&y.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",f)}"none"!==u.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var g;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),(!y.support.flexbox||y.params.setWrapperSize)&&(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(g=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;e=0&&i0&&n<=y.size||0>=i&&n>=y.size;o&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){"undefined"==typeof e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/y.params.slidesPerGroup),t>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses())},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass);var e=y.slides.eq(y.activeIndex);e.addClass(y.params.slideActiveClass);var t=e.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&y.slides.eq(0).addClass(y.params.slideNextClass);var s=e.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===s.length&&y.slides.eq(-1).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var r,i=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(r=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup),r>y.slides.length-1-2*y.loopedSlides&&(r-=y.slides.length-2*y.loopedSlides),r>i-1&&(r-=i),0>r&&"bullets"!==y.params.paginationType&&(r=i+r)):r="undefined"!=typeof y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){a(this).index()===r&&a(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(r).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(r+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(i)),"progress"===y.params.paginationType){var n=(r+1)/i,o=n,l=1;y.isHorizontal()||(l=n,o=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,r+1,i)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;a>t;t++)e+=y.params.paginationBulletRender?y.params.paginationBulletRender(t,y.params.bulletClass):"<"+y.params.paginationElement+' class="'+y.params.bulletClass+'">'+y.params.paginationElement+">";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses()}if(y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),e){var t,s;y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(t=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0),t||a())}else y.params.autoHeight&&y.updateAutoHeight()},y.onResize=function(e){y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var x=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?x=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(x=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":x[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":x[1],end:y.support.touch||!y.params.simulateTouch?"touchend":x[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=y.params.nested?!0:!1;y.browser.ie?(r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(r[t](y.touchEvents.start,y.onTouchStart,!1),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))),window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),(!y.isEnd||y.params.loop)&&y.slideNext()},y.onClickPrev=function(e){e.preventDefault(),(!y.isBeginning||y.params.loop)&&y.slidePrev()},y.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(e){var t=n(e,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+y.params.slidesPerView/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-y.params.slidesPerView?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var T,S,C,z,M,P,I,k,E,B,D="input, select, textarea, button",L=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,A;if(y.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),G="touchstart"===e.type,G||!("which"in e)||3!==e.which){if(y.params.noSwiping&&n(e,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(e,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s=y.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(T=!0,S=!1,C=!0,M=void 0,A=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(k=!1),"touchstart"!==e.type){var r=!0;a(e.target).is(D)&&(r=!1),document.activeElement&&a(document.activeElement).is(D)&&document.activeElement.blur(),r&&e.preventDefault()}y.emit("onTouchStart",y,e)}}}},y.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!G||"mousemove"!==e.type){if(e.preventedByNestedSwiper)return y.touches.startX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,void(y.touches.startY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(T&&(y.touches.startX=y.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,y.touches.startY=y.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,z=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return S=!0,void(y.allowClick=!1);if(C&&y.emit("onTouchMove",y,e),!(e.targetTouches&&e.targetTouches.length>1)){if(y.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,y.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof M){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(M&&y.emit("onTouchMoveOpposite",y,e),"undefined"==typeof A&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(A=!0),T){if(M)return void(T=!1);if(A||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,e),e.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&e.stopPropagation(),S||(s.loop&&y.fixLoop(),I=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),B=!1,y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grabbing",y.container[0].style.cursor="-moz-grabbin",y.container[0].style.cursor="grabbing")),S=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+I;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1,y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+I+r,y.params.resistanceRatio))):0>r&&PP&&(P=I),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&P>I&&(P=I),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||k))return void(P=I);if(!k)return k=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=I,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}(y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P)}}}}}},y.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),C&&y.emit("onTouchEnd",y,e),C=!1,T){y.params.grabCursor&&S&&T&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab");var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(e),y.emit("onTap",y,e),300>s&&t-L>300&&(E&&clearTimeout(E),E=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!a(e.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,e))},300)),300>s&&300>t-L&&(E&&clearTimeout(E),y.emit("onDoubleTap",y,e))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!T||!S||!y.swipeDirection||0===y.touches.diff||P===I)return void(T=S=!1);T=S=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,u=y.translate+d;y.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(uy.minTranslate())y.params.freeModeMomentumBounce?(u-y.minTranslate()>f&&(u=y.minTranslate()+f),c=y.minTranslate(),m=!0,B=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var g,h=0;for(h=0;h-u){g=h;break}u=Math.abs(y.snapGrid[g]-u)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var v,w=0,b=y.slidesSizesGrid[0];for(v=0;v=y.slidesGrid[v]&&r=y.slidesGrid[v]&&(w=v,b=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var x=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(x>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(x>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r);for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),!1):(y.updateClasses(),y.onTransitionStart(t),0===a?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),!0))},y.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)}return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex-1,a,e,t)}return y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0,n=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, "+n+"px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var o,l=y.maxTranslate()-y.minTranslate();o=0===l?0:(e-y.minTranslate())/l,o!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return"undefined"==typeof a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;ae.length&&(y.loopedSlides=e.length);var t,s=[],r=[];for(e.each(function(t,i){var n=a(this);t=e.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(a(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,y.slides[a]&&y.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);y.params.loop&&y.createLoop(),y.params.observer&&y.support.observer||y.update(!0),y.params.loop?y.slideTo(t+y.loopedSlides,0,!1):y.slideTo(t,0,!1)},y.removeAllSlides=function(){for(var e=[],a=0;a'),t.append(d)),0===u.length&&(u=a(''),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){if(y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.virtualTranslate&&0!==e){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&a(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),y.wrapper.append(e)),e.css({height:y.width+"px"})):(e=y.container.find(".swiper-cube-shadow"),0===e.length&&(e=a(''),y.container.append(e))));for(var s=0;s=o&&o>-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(u),y.params.cube.slideShadows){var c=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),m=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===c.length&&(c=a(''),r.append(c)),0===m.length&&(m=a(''),r.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())e.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var f=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),h=y.params.cube.shadowScale,v=y.params.cube.shadowScale/g,w=y.params.cube.shadowOffset;e.transform("scale3d("+h+", 1, "+v+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/v+"px) rotateX(-90deg)")}var b=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+b+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=y.translate,t=y.isHorizontal()?-e+y.width/2:-e+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;n>i;i++){var o=y.slides.eq(i),l=y.slidesSizesGrid[i],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*y.params.coverflow.modifier,u=y.isHorizontal()?s*d:0,c=y.isHorizontal()?0:s*d,m=-r*Math.abs(d),f=y.isHorizontal()?0:y.params.coverflow.stretch*d,g=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(g)<.001&&(g=0),Math.abs(f)<.001&&(f=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var h="translate3d("+g+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(h),o[0].style.zIndex=-Math.abs(Math.round(d))+1,y.params.coverflow.slideShadows){var v=y.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=y.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=a(''),o.append(v)),0===w.length&&(w=a(''),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(y.browser.ie){var b=y.wrapper[0].style;b.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(e),r=s.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!s.hasClass("swiper-lazy")||s.hasClass("swiper-lazy-loaded")||s.hasClass("swiper-lazy-loading")||(r=r.add(s[0])),0!==r.length&&r.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var r=e.attr("data-background"),i=e.attr("data-src"),n=e.attr("data-srcset");y.loadImage(e[0],i||r,n,!1,function(){if(r?(e.css("background-image",'url("'+r+'")'),e.removeAttr("data-background")):(n&&(e.attr("srcset",n),e.removeAttr("data-srcset")),i&&(e.attr("src",i),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),s.find(".swiper-lazy-preloader, .preloader").remove(),y.params.loop&&t){var a=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var o=y.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(o.index(),!1)}else{var l=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');y.lazy.loadImageInSlide(l.index(),!1)}}y.emit("onLazyImageReady",y,s[0],e[0])}),y.emit("onLazyImageLoad",y,s[0],e[0])})}},load:function(){var e;if(y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(a(this).index())});else if(y.params.slidesPerView>1)for(e=y.activeIndex;e1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var t=y.params.lazyLoadingInPrevNextAmount,s=y.params.slidesPerView,r=Math.min(y.activeIndex+s+Math.max(t,s),y.slides.length),i=Math.max(y.activeIndex-Math.max(s,t),0);for(e=y.activeIndex+y.params.slidesPerView;r>e;e++)y.slides[e]&&y.lazy.loadImageInSlide(e);for(e=i;e0&&y.lazy.loadImageInSlide(n.index());var o=y.wrapper.children("."+y.params.slidePrevClass);o.length>0&&y.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,r=-y.minTranslate()*a.moveDivider,i=-y.maxTranslate()*a.moveDivider;r>s?s=r:s>i&&(s=i),s=-s/a.moveDivider,y.updateProgress(s),y.setWrapperTranslate(s,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},enableDraggable:function(){var e=y.scrollbar,t=y.support.touch?e.track:document;a(e.track).on(y.touchEvents.start,e.dragStart),a(t).on(y.touchEvents.move,e.dragMove),a(t).on(y.touchEvents.end,e.dragEnd)},disableDraggable:function(){var e=y.scrollbar,t=y.support.touch?e.track:document;a(e.track).off(y.touchEvents.start,e.dragStart),a(t).off(y.touchEvents.move,e.dragMove),a(t).off(y.touchEvents.end,e.dragEnd)},set:function(){if(y.params.scrollbar){var e=y.scrollbar;e.track=a(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&e.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(e.track=y.container.find(y.params.scrollbar)),e.drag=e.track.find(".swiper-scrollbar-drag"),0===e.drag.length&&(e.drag=a(''),e.track.append(e.drag)),e.drag[0].style.width="",e.drag[0].style.height="",e.trackSize=y.isHorizontal()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=y.size/y.virtualSize,e.moveDivider=e.divider*(e.trackSize/y.size),e.dragSize=e.trackSize*e.divider,y.isHorizontal()?e.drag[0].style.width=e.dragSize+"px":e.drag[0].style.height=e.dragSize+"px",e.divider>=1?e.track[0].style.display="none":e.track[0].style.display="",y.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,s;this.x.length;this.interpolate=function(e){return e?(s=r(this.x,e),t=s-1,(e-this.x[t])*(this.y[s]-this.y[t])/(this.x[s]-this.x[t])+this.y[t]):0};var r=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}()},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,a){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(y.isArray(n))for(var o=0;ot;t++){var r=y.slides.eq(t),i=r.attr("data-hash");if(i===e&&!r.hasClass(y.params.slideDuplicateClass)){var n=r.index();y.slideTo(n,a,y.params.runCallbacksOnInit,!0)}}}},setHash:function(){y.hashnav.initialized&&y.params.hashnav&&(document.location.hash=y.slides.eq(y.activeIndex).attr("data-hash")||"")}},y.disableKeyboardControl=function(){y.params.keyboardControl=!1,a(document).off("keydown",l)},y.enableKeyboardControl=function(){y.params.keyboardControl=!0,a(document).on("keydown",l)},y.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},y.params.mousewheelControl){try{new window.WheelEvent("wheel"),y.mousewheel.event="wheel"}catch(O){(window.WheelEvent||y.container[0]&&"wheel"in y.container[0])&&(y.mousewheel.event="wheel")}!y.mousewheel.event&&window.WheelEvent,y.mousewheel.event||void 0===document.onmousewheel||(y.mousewheel.event="mousewheel"),y.mousewheel.event||(y.mousewheel.event="DOMMouseScroll")}y.disableMousewheelControl=function(){return y.mousewheel.event?(y.container.off(y.mousewheel.event,p),!0):!1},y.enableMousewheelControl=function(){return y.mousewheel.event?(y.container.on(y.mousewheel.event,p),!0):!1},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){d(this,y.progress)}),y.slides.each(function(){var e=a(this);e.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var a=Math.min(Math.max(e[0].progress,-1),1);d(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(s=0),t.transition(s)})}},y._plugins=[];for(var N in y.plugins){var R=y.plugins[N](y,y.params[N]);R&&y._plugins.push(R)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),a(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var e=a(this);y.a11y.makeFocusable(e),y.a11y.addRole(e,"button"),y.a11y.addLabel(e,y.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(),y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(),
-y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&a(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&a(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.emit("onDestroy"),e!==!1&&(y=null)},y.init(),y}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t parseInt(b, 10);
- });
- for (var i = 0; i < points.length; i++) {
- point = points[i];
- if (point >= window.innerWidth && !breakpoint) {
- breakpoint = point;
- }
- }
- return breakpoint || 'max';
- };
- s.setBreakpoint = function () {
- //Set breakpoint for window width and update parameters
- var breakpoint = s.getActiveBreakpoint();
- if (breakpoint && s.currentBreakpoint !== breakpoint) {
- var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;
- var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);
- for ( var param in breakPointsParams ) {
- s.params[param] = breakPointsParams[param];
- }
- s.currentBreakpoint = breakpoint;
- if(needsReLoop && s.destroyLoop) {
- s.reLoop(true);
- }
- }
- };
- // Set breakpoint on load
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- /*=========================
- Preparation - Define Container, Wrapper and Pagination
- ===========================*/
- s.container = $(container);
- if (s.container.length === 0) return;
- if (s.container.length > 1) {
- var swipers = [];
- s.container.each(function () {
- var container = this;
- swipers.push(new Swiper(this, params));
- });
- return swipers;
- }
-
- // Save instance in container HTML Element and in data
- s.container[0].swiper = s;
- s.container.data('swiper', s);
-
- s.classNames.push('swiper-container-' + s.params.direction);
-
- if (s.params.freeMode) {
- s.classNames.push('swiper-container-free-mode');
- }
- if (!s.support.flexbox) {
- s.classNames.push('swiper-container-no-flexbox');
- s.params.slidesPerColumn = 1;
- }
- if (s.params.autoHeight) {
- s.classNames.push('swiper-container-autoheight');
- }
- // Enable slides progress when required
- if (s.params.parallax || s.params.watchSlidesVisibility) {
- s.params.watchSlidesProgress = true;
- }
- // Coverflow / 3D
- if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {
- if (s.support.transforms3d) {
- s.params.watchSlidesProgress = true;
- s.classNames.push('swiper-container-3d');
- }
- else {
- s.params.effect = 'slide';
- }
- }
- if (s.params.effect !== 'slide') {
- s.classNames.push('swiper-container-' + s.params.effect);
- }
- if (s.params.effect === 'cube') {
- s.params.resistanceRatio = 0;
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.centeredSlides = false;
- s.params.spaceBetween = 0;
- s.params.virtualTranslate = true;
- s.params.setWrapperSize = false;
- }
- 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;
- s.params.setWrapperSize = false;
- if (typeof initialVirtualTranslate === 'undefined') {
- s.params.virtualTranslate = true;
- }
- }
-
- // Grab Cursor
- if (s.params.grabCursor && s.support.touch) {
- s.params.grabCursor = false;
- }
-
- // Wrapper
- s.wrapper = s.container.children('.' + s.params.wrapperClass);
-
- // Pagination
- if (s.params.pagination) {
- s.paginationContainer = $(s.params.pagination);
- if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {
- s.paginationContainer = s.container.find(s.params.pagination);
- }
-
- if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {
- s.paginationContainer.addClass('swiper-pagination-clickable');
- }
- else {
- s.params.paginationClickable = false;
- }
- s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
- }
- // Next/Prev Buttons
- if (s.params.nextButton || s.params.prevButton) {
- if (s.params.nextButton) {
- s.nextButton = $(s.params.nextButton);
- if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {
- s.nextButton = s.container.find(s.params.nextButton);
- }
- }
- if (s.params.prevButton) {
- s.prevButton = $(s.params.prevButton);
- if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {
- s.prevButton = s.container.find(s.params.prevButton);
- }
- }
- }
-
- // Is Horizontal
- s.isHorizontal = function () {
- return s.params.direction === 'horizontal';
- };
- // s.isH = isH;
-
- // RTL
- s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');
- if (s.rtl) {
- s.classNames.push('swiper-container-rtl');
- }
-
- // Wrong RTL support
- if (s.rtl) {
- s.wrongRTL = s.wrapper.css('display') === '-webkit-box';
- }
-
- // Columns
- if (s.params.slidesPerColumn > 1) {
- s.classNames.push('swiper-container-multirow');
- }
-
- // Check for Android
- if (s.device.android) {
- s.classNames.push('swiper-container-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;
- };
- s.lockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = false;
- };
- s.lockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;
- };
- s.unlockSwipeToNext = function () {
- s.params.allowSwipeToNext = true;
- };
- s.unlockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = true;
- };
- s.unlockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;
- };
-
- /*=========================
- Round helper
- ===========================*/
- function round(a) {
- return Math.floor(a);
- }
- /*=========================
- Set grab cursor
- ===========================*/
- if (s.params.grabCursor) {
- s.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
- /*=========================
- Update on Images Ready
- ===========================*/
- s.imagesToLoad = [];
- s.imagesLoaded = 0;
-
- s.loadImage = function (imgElement, src, srcset, 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 (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) 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')), true, _onReady);
- }
- };
-
- /*=========================
- Autoplay
- ===========================*/
- s.autoplayTimeoutId = undefined;
- s.autoplaying = false;
- s.autoplayPaused = false;
- function 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();
- }
- }
- }
- }, s.params.autoplay);
- }
- 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 () {
- // Update Height
- var slide = s.slides.eq(s.activeIndex)[0];
- if (typeof slide !== 'undefined') {
- var newHeight = slide.offsetHeight;
- 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-top': (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 (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;
- s.wrapper.css({width: 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;
- }
- };
-
- /*=========================
- 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 - 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 (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();
- };
-
- /*=========================
- Classes
- ===========================*/
- s.updateClasses = function () {
- s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);
- var activeSlide = s.slides.eq(s.activeIndex);
- // Active classes
- activeSlide.addClass(s.params.slideActiveClass);
- // Next Slide
- var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
- if (s.params.loop && nextSlide.length === 0) {
- s.slides.eq(0).addClass(s.params.slideNextClass);
- }
- // Prev Slide
- var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);
- if (s.params.loop && prevSlide.length === 0) {
- s.slides.eq(-1).addClass(s.params.slidePrevClass);
- }
-
- // 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(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) {
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updateProgress();
- s.updatePagination();
- s.updateClasses();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- function forceSetTranslate() {
- newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
- }
- if (updateTranslate) {
- var translated, newTranslate;
- 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) {
- //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;
- };
-
- /*=========================
- Events
- ===========================*/
-
- //Define Touch Events
- var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];
- if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];
- else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
- s.touchEvents = {
- start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],
- move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],
- end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]
- };
-
-
- // 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) {
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);
- touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);
- }
- if (params.simulateTouch && !s.device.ios && !s.device.android) {
- touchEventsTarget[action]('mousedown', s.onTouchStart, false);
- document[action]('mousemove', s.onTouchMove, moveCapture);
- document[action]('mouseup', s.onTouchEnd, false);
- }
- }
- window[action]('resize', s.onResize);
-
- // Next, Prev, Index
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.nextButton[actionDom]('click', s.onClickNext);
- if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.prevButton[actionDom]('click', s.onClickPrev);
- if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.pagination && s.params.paginationClickable) {
- s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);
- if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);
- }
-
- // Prevent Links Clicks
- if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);
- };
- s.attachEvents = function () {
- s.initEvents();
- };
- s.detachEvents = function () {
- s.initEvents(true);
- };
-
- /*=========================
- Handle Clicks
- ===========================*/
- // Prevent Clicks
- s.allowClick = true;
- s.preventClicks = function (e) {
- if (!s.allowClick) {
- if (s.params.preventClicks) e.preventDefault();
- if (s.params.preventClicksPropagation && s.animating) {
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- }
- };
- // Clicks
- s.onClickNext = function (e) {
- e.preventDefault();
- if (s.isEnd && !s.params.loop) return;
- s.slideNext();
- };
- s.onClickPrev = function (e) {
- e.preventDefault();
- if (s.isBeginning && !s.params.loop) return;
- s.slidePrev();
- };
- s.onClickIndex = function (e) {
- e.preventDefault();
- var index = $(this).index() * s.params.slidesPerGroup;
- if (s.params.loop) index = index + s.loopedSlides;
- s.slideTo(index);
- };
-
- /*=========================
- Handle Touches
- ===========================*/
- function findElementInEvent(e, selector) {
- var el = $(e.target);
- if (!el.is(selector)) {
- if (typeof selector === 'string') {
- el = el.parents(selector);
- }
- else if (selector.nodeType) {
- var found;
- el.parents().each(function (index, _el) {
- if (_el === selector) found = selector;
- });
- if (!found) return undefined;
- else return selector;
- }
- }
- if (el.length === 0) {
- return undefined;
- }
- return el[0];
- }
- s.updateClickedSlide = function (e) {
- var slide = findElementInEvent(e, '.' + s.params.slideClass);
- var slideFound = false;
- if (slide) {
- for (var i = 0; i < s.slides.length; i++) {
- if (s.slides[i] === slide) slideFound = true;
- }
- }
-
- if (slide && slideFound) {
- s.clickedSlide = slide;
- s.clickedIndex = $(slide).index();
- }
- else {
- s.clickedSlide = undefined;
- s.clickedIndex = undefined;
- return;
- }
- if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {
- var slideToIndex = s.clickedIndex,
- realIndex,
- duplicatedSlides;
- if (s.params.loop) {
- if (s.animating) return;
- realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');
- if (s.params.centeredSlides) {
- if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- else {
- if (slideToIndex > s.slides.length - s.params.slidesPerView) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').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',
- // 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 && 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 = 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' && s.browser.ieTouch) {
- 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 && s.browser.ieTouch) {
- 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grabbing';
- s.container[0].style.cursor = '-moz-grabbin';
- s.container[0].style.cursor = 'grabbing';
- }
- }
- 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;
- }
-
- if (!s.params.followFinger) return;
-
- // 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;
- }
- }
- // 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
-
- // 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;
- }
-
- 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
- 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;
-
- 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.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.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);
- };
-
- /*=========================
- Translate/transition helpers
- ===========================*/
- s.setWrapperTransition = function (duration, byController) {
- s.wrapper.transition(duration);
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTransition(duration);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTransition(duration);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTransition(duration);
- }
- if (s.params.control && s.controller) {
- s.controller.setTransition(duration, byController);
- }
- s.emit('onSetTransition', s, duration);
- };
- s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {
- var x = 0, y = 0, z = 0;
- if (s.isHorizontal()) {
- x = s.rtl ? -translate : translate;
- }
- else {
- y = translate;
- }
-
- if (s.params.roundLengths) {
- x = round(x);
- y = round(y);
- }
-
- if (!s.params.virtualTranslate) {
- if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');
- else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');
- }
-
- s.translate = s.isHorizontal() ? x : y;
-
- // Check if we need to update progress
- var progress;
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- if (translatesDiff === 0) {
- progress = 0;
- }
- else {
- progress = (translate - s.minTranslate()) / (translatesDiff);
- }
- if (progress !== s.progress) {
- s.updateProgress(translate);
- }
-
- if (updateActiveIndex) s.updateActiveIndex();
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTranslate(s.translate);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTranslate(s.translate);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTranslate(s.translate);
- }
- if (s.params.control && s.controller) {
- s.controller.setTranslate(s.translate, byController);
- }
- s.emit('onSetTranslate', s, s.translate);
- };
-
- s.getTranslate = function (el, axis) {
- var matrix, curTransform, curStyle, transformMatrix;
-
- // automatic axis detection
- if (typeof axis === 'undefined') {
- axis = 'x';
- }
-
- if (s.params.virtualTranslate) {
- return s.rtl ? -s.translate : s.translate;
- }
-
- curStyle = window.getComputedStyle(el, null);
- if (window.WebKitCSSMatrix) {
- curTransform = curStyle.transform || curStyle.webkitTransform;
- if (curTransform.split(',').length > 6) {
- curTransform = curTransform.split(', ').map(function(a){
- return a.replace(',','.');
- }).join(', ');
- }
- // Some old versions of Webkit choke when 'none' is passed; pass
- // empty string instead in this case
- transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
- }
- else {
- transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
- matrix = transformMatrix.toString().split(',');
- }
-
- if (axis === 'x') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m41;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[12]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[4]);
- }
- if (axis === 'y') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m42;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[13]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[5]);
- }
- if (s.rtl && curTransform) curTransform = -curTransform;
- return curTransform || 0;
- };
- s.getWrapperTranslate = function (axis) {
- if (typeof axis === 'undefined') {
- axis = s.isHorizontal() ? 'x' : 'y';
- }
- return s.getTranslate(s.wrapper[0], axis);
- };
-
- /*=========================
- Observer
- ===========================*/
- s.observers = [];
- function initObserver(target, options) {
- options = options || {};
- // create an observer instance
- var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
- var observer = new ObserverFunc(function (mutations) {
- mutations.forEach(function (mutation) {
- s.onResize(true);
- s.emit('onObserverUpdate', s, mutation);
- });
- });
-
- observer.observe(target, {
- attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
- childList: typeof options.childList === 'undefined' ? true : options.childList,
- characterData: typeof options.characterData === 'undefined' ? true : options.characterData
- });
-
- s.observers.push(observer);
- }
- s.initObservers = function () {
- if (s.params.observeParents) {
- var containerParents = s.container.parents();
- for (var i = 0; i < containerParents.length; i++) {
- initObserver(containerParents[i]);
- }
- }
-
- // Observe container
- initObserver(s.container[0], {childList: false});
-
- // Observe wrapper
- initObserver(s.wrapper[0], {attributes: false});
- };
- s.disconnectObservers = function () {
- for (var i = 0; i < s.observers.length; i++) {
- s.observers[i].disconnect();
- }
- s.observers = [];
- };
- /*=========================
- Loop
- ===========================*/
- // Create looped slides
- s.createLoop = function () {
- // Remove duplicated slides
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
-
- var slides = s.wrapper.children('.' + s.params.slideClass);
-
- if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;
-
- s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);
- s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;
- if (s.loopedSlides > slides.length) {
- s.loopedSlides = slides.length;
- }
-
- var prependSlides = [], appendSlides = [], i;
- slides.each(function (index, el) {
- var slide = $(this);
- if (index < s.loopedSlides) appendSlides.push(el);
- if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);
- slide.attr('data-swiper-slide-index', index);
- });
- for (i = 0; i < appendSlides.length; i++) {
- s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- for (i = prependSlides.length - 1; i >= 0; i--) {
- s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- };
- s.destroyLoop = function () {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
- s.slides.removeAttr('data-swiper-slide-index');
- };
- s.reLoop = function (updatePosition) {
- var oldIndex = s.activeIndex - s.loopedSlides;
- s.destroyLoop();
- s.createLoop();
- s.updateSlidesSize();
- if (updatePosition) {
- s.slideTo(oldIndex + s.loopedSlides, 0, false);
- }
-
- };
- s.fixLoop = function () {
- var newIndex;
- //Fix For Negative Oversliding
- if (s.activeIndex < s.loopedSlides) {
- newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- //Fix For Positive Oversliding
- else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {
- newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- };
- /*=========================
- Append/Prepend/Remove Slides
- ===========================*/
- s.appendSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.append(slides[i]);
- }
- }
- else {
- s.wrapper.append(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- };
- s.prependSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- var newActiveIndex = s.activeIndex + 1;
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.prepend(slides[i]);
- }
- newActiveIndex = s.activeIndex + slides.length;
- }
- else {
- s.wrapper.prepend(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- s.slideTo(newActiveIndex, 0, false);
- };
- s.removeSlide = function (slidesIndexes) {
- if (s.params.loop) {
- s.destroyLoop();
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- }
- var newActiveIndex = s.activeIndex,
- indexToRemove;
- if (typeof slidesIndexes === 'object' && slidesIndexes.length) {
- for (var i = 0; i < slidesIndexes.length; i++) {
- indexToRemove = slidesIndexes[i];
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- }
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
- else {
- indexToRemove = slidesIndexes;
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
-
- if (s.params.loop) {
- s.createLoop();
- }
-
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- if (s.params.loop) {
- s.slideTo(newActiveIndex + s.loopedSlides, 0, false);
- }
- else {
- s.slideTo(newActiveIndex, 0, false);
- }
-
- };
- s.removeAllSlides = function () {
- var slidesIndexes = [];
- for (var i = 0; i < s.slides.length; i++) {
- slidesIndexes.push(i);
- }
- s.removeSlide(slidesIndexes);
- };
-
-
- /*=========================
- Effects
- ===========================*/
- s.effects = {
- fade: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var offset = slide[0].swiperSlideOffset;
- var tx = -offset;
- if (!s.params.virtualTranslate) tx = tx - s.translate;
- var ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
- var slideOpacity = s.params.fade.crossFade ?
- Math.max(1 - Math.abs(slide[0].progress), 0) :
- 1 + Math.min(Math.max(slide[0].progress, -1), 0);
- slide
- .css({
- opacity: slideOpacity
- })
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');
-
- }
-
- },
- setTransition: function (duration) {
- s.slides.transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- flip: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var progress = slide[0].progress;
- if (s.params.flip.limitRotation) {
- progress = Math.max(Math.min(slide[0].progress, 1), -1);
- }
- var offset = slide[0].swiperSlideOffset;
- var rotate = -180 * progress,
- rotateY = rotate,
- rotateX = 0,
- tx = -offset,
- ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- rotateX = -rotateY;
- rotateY = 0;
- }
- else if (s.rtl) {
- rotateY = -rotateY;
- }
-
- slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;
-
- if (s.params.flip.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
-
- slide
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.eq(s.activeIndex).transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- if (!$(this).hasClass(s.params.slideActiveClass)) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- cube: {
- setTranslate: function () {
- var wrapperRotate = 0, cubeShadow;
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow = s.wrapper.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.wrapper.append(cubeShadow);
- }
- cubeShadow.css({height: s.width + 'px'});
- }
- else {
- cubeShadow = s.container.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.container.append(cubeShadow);
- }
- }
- }
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var slideAngle = i * 90;
- var round = Math.floor(slideAngle / 360);
- if (s.rtl) {
- slideAngle = -slideAngle;
- round = Math.floor(-slideAngle / 360);
- }
- var progress = Math.max(Math.min(slide[0].progress, 1), -1);
- var tx = 0, ty = 0, tz = 0;
- if (i % 4 === 0) {
- tx = - round * 4 * s.size;
- tz = 0;
- }
- else if ((i - 1) % 4 === 0) {
- tx = 0;
- tz = - round * 4 * s.size;
- }
- else if ((i - 2) % 4 === 0) {
- tx = s.size + round * 4 * s.size;
- tz = s.size;
- }
- else if ((i - 3) % 4 === 0) {
- tx = - s.size;
- tz = 3 * s.size + s.size * 4 * round;
- }
- if (s.rtl) {
- tx = -tx;
- }
-
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
-
- var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';
- if (progress <= 1 && progress > -1) {
- wrapperRotate = i * 90 + progress * 90;
- if (s.rtl) wrapperRotate = -i * 90 - progress * 90;
- }
- slide.transform(transform);
- if (s.params.cube.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
- }
- s.wrapper.css({
- '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'
- });
-
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');
- }
- else {
- var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
- var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
- var scale1 = s.params.cube.shadowScale,
- scale2 = s.params.cube.shadowScale / multiplier,
- offset = s.params.cube.shadowOffset;
- cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');
- }
- }
- var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;
- s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.cube.shadow && !s.isHorizontal()) {
- s.container.find('.swiper-cube-shadow').transition(duration);
- }
- }
- },
- coverflow: {
- setTranslate: function () {
- var transform = s.translate;
- var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;
- var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;
- var translate = s.params.coverflow.depth;
- //Each slide offset from center
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideSize = s.slidesSizesGrid[i];
- var slideOffset = slide[0].swiperSlideOffset;
- var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;
-
- var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;
- var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;
- // var rotateZ = 0
- var translateZ = -translate * Math.abs(offsetMultiplier);
-
- var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);
- var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;
-
- //Fix for ultra small values
- if (Math.abs(translateX) < 0.001) translateX = 0;
- if (Math.abs(translateY) < 0.001) translateY = 0;
- if (Math.abs(translateZ) < 0.001) translateZ = 0;
- if (Math.abs(rotateY) < 0.001) rotateY = 0;
- if (Math.abs(rotateX) < 0.001) rotateX = 0;
-
- var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';
-
- slide.transform(slideTransform);
- slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
- if (s.params.coverflow.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
- if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
- }
- }
-
- //Set correct perspective for IE10
- if (s.browser.ie) {
- var ws = s.wrapper[0].style;
- ws.perspectiveOrigin = center + 'px 50%';
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- }
- }
- };
-
- /*=========================
- Images Lazy Loading
- ===========================*/
- s.lazy = {
- initialImageLoaded: false,
- loadImageInSlide: function (index, loadInDuplicate) {
- if (typeof index === 'undefined') return;
- if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;
- if (s.slides.length === 0) return;
-
- var slide = s.slides.eq(index);
- var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');
- if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {
- img = img.add(slide[0]);
- }
- if (img.length === 0) return;
-
- img.each(function () {
- var _img = $(this);
- _img.addClass('swiper-lazy-loading');
- var background = _img.attr('data-background');
- var src = _img.attr('data-src'),
- srcset = _img.attr('data-srcset');
- s.loadImage(_img[0], (src || background), srcset, false, function () {
- if (background) {
- _img.css('background-image', 'url("' + background + '")');
- _img.removeAttr('data-background');
- }
- else {
- if (srcset) {
- _img.attr('srcset', srcset);
- _img.removeAttr('data-srcset');
- }
- if (src) {
- _img.attr('src', src);
- _img.removeAttr('data-src');
- }
-
- }
-
- _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');
- slide.find('.swiper-lazy-preloader, .preloader').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;
- if (s.params.watchSlidesVisibility) {
- s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {
- s.lazy.loadImageInSlide($(this).index());
- });
- }
- else {
- if (s.params.slidesPerView > 1) {
- for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- s.lazy.loadImageInSlide(s.activeIndex);
- }
- }
- if (s.params.lazyLoadingInPrevNext) {
- if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {
- var amount = s.params.lazyLoadingInPrevNextAmount;
- var spv = s.params.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 + s.params.slidesPerView; i < maxIndex; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- // Prev Slides
- for (i = minIndex; i < s.activeIndex ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);
- if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());
-
- var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);
- if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());
- }
- }
- },
- onTransitionStart: function () {
- if (s.params.lazyLoading) {
- if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {
- s.lazy.load();
- }
- }
- },
- onTransitionEnd: function () {
- if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {
- s.lazy.load();
- }
- }
- };
-
-
- /*=========================
- Scrollbar
- ===========================*/
- s.scrollbar = {
- isTouched: false,
- setDragPosition: function (e) {
- var sb = s.scrollbar;
- var x = 0, y = 0;
- var translate;
- var pointerPosition = s.isHorizontal() ?
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;
- var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;
- var positionMin = -s.minTranslate() * sb.moveDivider;
- var positionMax = -s.maxTranslate() * sb.moveDivider;
- if (position < positionMin) {
- position = positionMin;
- }
- else if (position > positionMax) {
- position = positionMax;
- }
- position = -position / sb.moveDivider;
- s.updateProgress(position);
- s.setWrapperTranslate(position, true);
- },
- dragStart: function (e) {
- var sb = s.scrollbar;
- sb.isTouched = true;
- e.preventDefault();
- e.stopPropagation();
-
- sb.setDragPosition(e);
- clearTimeout(sb.dragTimeout);
-
- sb.track.transition(0);
- if (s.params.scrollbarHide) {
- sb.track.css('opacity', 1);
- }
- s.wrapper.transition(100);
- sb.drag.transition(100);
- s.emit('onScrollbarDragStart', s);
- },
- dragMove: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- sb.setDragPosition(e);
- s.wrapper.transition(0);
- sb.track.transition(0);
- sb.drag.transition(0);
- s.emit('onScrollbarDragMove', s);
- },
- dragEnd: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- sb.isTouched = false;
- if (s.params.scrollbarHide) {
- clearTimeout(sb.dragTimeout);
- sb.dragTimeout = setTimeout(function () {
- sb.track.css('opacity', 0);
- sb.track.transition(400);
- }, 1000);
-
- }
- s.emit('onScrollbarDragEnd', s);
- if (s.params.scrollbarSnapOnRelease) {
- s.slideReset();
- }
- },
- enableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).on(s.touchEvents.start, sb.dragStart);
- $(target).on(s.touchEvents.move, sb.dragMove);
- $(target).on(s.touchEvents.end, sb.dragEnd);
- },
- disableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).off(s.touchEvents.start, sb.dragStart);
- $(target).off(s.touchEvents.move, sb.dragMove);
- $(target).off(s.touchEvents.end, sb.dragEnd);
- },
- set: function () {
- if (!s.params.scrollbar) return;
- var sb = s.scrollbar;
- sb.track = $(s.params.scrollbar);
- if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {
- sb.track = s.container.find(s.params.scrollbar);
- }
- sb.drag = sb.track.find('.swiper-scrollbar-drag');
- if (sb.drag.length === 0) {
- sb.drag = $('');
- sb.track.append(sb.drag);
- }
- sb.drag[0].style.width = '';
- sb.drag[0].style.height = '';
- sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;
-
- sb.divider = s.size / s.virtualSize;
- sb.moveDivider = sb.divider * (sb.trackSize / s.size);
- sb.dragSize = sb.trackSize * sb.divider;
-
- if (s.isHorizontal()) {
- sb.drag[0].style.width = sb.dragSize + 'px';
- }
- else {
- sb.drag[0].style.height = sb.dragSize + 'px';
- }
-
- if (sb.divider >= 1) {
- sb.track[0].style.display = 'none';
- }
- else {
- sb.track[0].style.display = '';
- }
- if (s.params.scrollbarHide) {
- sb.track[0].style.opacity = 0;
- }
- },
- setTranslate: function () {
- if (!s.params.scrollbar) return;
- var diff;
- var sb = s.scrollbar;
- var translate = s.translate || 0;
- var newPos;
-
- var newSize = sb.dragSize;
- newPos = (sb.trackSize - sb.dragSize) * s.progress;
- if (s.rtl && s.isHorizontal()) {
- newPos = -newPos;
- if (newPos > 0) {
- newSize = sb.dragSize - newPos;
- newPos = 0;
- }
- else if (-newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize + newPos;
- }
- }
- else {
- if (newPos < 0) {
- newSize = sb.dragSize + newPos;
- newPos = 0;
- }
- else if (newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize - newPos;
- }
- }
- if (s.isHorizontal()) {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');
- }
- else {
- sb.drag.transform('translateX(' + (newPos) + 'px)');
- }
- sb.drag[0].style.width = newSize + 'px';
- }
- else {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');
- }
- else {
- sb.drag.transform('translateY(' + (newPos) + 'px)');
- }
- sb.drag[0].style.height = newSize + 'px';
- }
- if (s.params.scrollbarHide) {
- clearTimeout(sb.timeout);
- sb.track[0].style.opacity = 1;
- sb.timeout = setTimeout(function () {
- sb.track[0].style.opacity = 0;
- sb.track.transition(400);
- }, 1000);
- }
- },
- setTransition: function (duration) {
- if (!s.params.scrollbar) return;
- s.scrollbar.drag.transition(duration);
- }
- };
-
- /*=========================
- Controller
- ===========================*/
- s.controller = {
- LinearSpline: function (x, y) {
- 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];
- };
-
- 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;
- };
- })();
- },
- //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 (s.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 (s.isArray(controlled)) {
- for (i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTransition(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
- setControlledTransition(controlled);
- }
- }
- };
-
- /*=========================
- Hash Navigation
- ===========================*/
- s.hashnav = {
- init: function () {
- if (!s.params.hashnav) return;
- s.hashnav.initialized = true;
- var hash = document.location.hash.replace('#', '');
- if (!hash) return;
- 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');
- if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, s.params.runCallbacksOnInit, true);
- }
- }
- },
- setHash: function () {
- if (!s.hashnav.initialized || !s.params.hashnav) return;
- document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';
- }
- };
-
- /*=========================
- 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('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').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.disableKeyboardControl = function () {
- s.params.keyboardControl = false;
- $(document).off('keydown', handleKeyboard);
- };
- s.enableKeyboardControl = function () {
- s.params.keyboardControl = true;
- $(document).on('keydown', handleKeyboard);
- };
-
-
- /*=========================
- Mousewheel Control
- ===========================*/
- s.mousewheel = {
- event: false,
- lastScrollTime: (new window.Date()).getTime()
- };
- if (s.params.mousewheelControl) {
- try {
- new window.WheelEvent('wheel');
- s.mousewheel.event = 'wheel';
- } catch (e) {
- if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {
- s.mousewheel.event = 'wheel';
- }
- }
- if (!s.mousewheel.event && window.WheelEvent) {
-
- }
- if (!s.mousewheel.event && document.onmousewheel !== undefined) {
- s.mousewheel.event = 'mousewheel';
- }
- if (!s.mousewheel.event) {
- s.mousewheel.event = 'DOMMouseScroll';
- }
- }
- function handleMousewheel(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var we = s.mousewheel.event;
- var delta = 0;
- var rtlFactor = s.rtl ? -1 : 1;
-
- //WebKits
- if (we === 'mousewheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;
- }
- }
- //Old FireFox
- else if (we === 'DOMMouseScroll') delta = -e.detail;
- //New FireFox
- else if (we === 'wheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;
- }
- }
- 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();
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- else {
- if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();
- 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();
- }
- }
-
- // Return page scroll on edge positions
- if (position === 0 || position === s.maxTranslate()) return;
- }
- if (s.params.autoplay) s.stopAutoplay();
-
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- return false;
- }
- s.disableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.off(s.mousewheel.event, handleMousewheel);
- return true;
- };
-
- s.enableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.on(s.mousewheel.event, handleMousewheel);
- 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);
- });
- }
- };
-
-
- /*=========================
- 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.autoplay) {
- s.startAutoplay();
- }
- if (s.params.keyboardControl) {
- if (s.enableKeyboardControl) s.enableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.enableMousewheelControl) s.enableMousewheelControl();
- }
- 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();
- // 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();
- // Destroy callback
- s.emit('onDestroy');
- // Delete instance
- if (deleteInstance !== false) s = null;
- };
-
- s.init();
-
-
-
- // Return swiper instance
- return s;
- };
-
-
- /*==================================================
- Prototype
- ====================================================*/
- Swiper.prototype = {
- isSafari: (function () {
- var ua = navigator.userAgent.toLowerCase();
- return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
- })(),
- isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(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)
- },
- /*==================================================
- Devices
- ====================================================*/
- device: (function () {
- var ua = 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)\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);
- })()
- },
- /*==================================================
- Plugins
- ====================================================*/
- plugins: {}
- };
-
-
- /*===========================
- Get jQuery
- ===========================*/
-
- addLibraryPlugin($);
-
- var domLib = $;
-
- /*===========================
- Add .swiper plugin from Dom libraries
- ===========================*/
- function addLibraryPlugin(lib) {
- lib.fn.swiper = function (params) {
- var firstInstance;
- lib(this).each(function () {
- var s = new Swiper(this, params);
- if (!firstInstance) firstInstance = s;
- });
- return firstInstance;
- };
- }
-
- if (domLib) {
- if (!('transitionEnd' in domLib.fn)) {
- domLib.fn.transitionEnd = function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- };
- }
- if (!('transform' in domLib.fn)) {
- domLib.fn.transform = function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- };
- }
- if (!('transition' in domLib.fn)) {
- domLib.fn.transition = function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- };
- }
- }
-
- return Swiper;
-}));
-//# sourceMappingURL=maps/swiper.jquery.umd.js.map
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js
deleted file mode 100644
index 49f9b92c16..0000000000
--- a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Swiper 3.3.1
- * Most modern mobile touch slider and framework with hardware accelerated transitions
- *
- * http://www.idangero.us/swiper/
- *
- * Copyright 2016, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
- *
- * Licensed under MIT
- *
- * Released on: February 7, 2016
- */
-!function(e,a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):e.Swiper=a(e.jQuery)}(this,function(e){"use strict";function a(e){e.fn.swiper=function(a){var s;return e(this).each(function(){var e=new t(this,a);s||(s=e)}),s}}var t=function(a,s){function r(e){return Math.floor(e)}function i(){y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},y.params.autoplay)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});s.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),y.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents(".swiper-slide").length>0&&0===y.container.parents(".swiper-slide-active").length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev())}}function p(e){e.originalEvent&&(e=e.originalEvent);var a=y.mousewheel.event,t=0,s=y.rtl?-1:1;if("mousewheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*s}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*s:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*s}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*s:-e.deltaY;if(0!==t){if(y.params.mousewheelInvert&&(t=-t),y.params.freeMode){var r=y.getWrapperTranslate()+t*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(0>t)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext();else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev();y.mousewheel.lastScrollTime=(new window.Date).getTime()}return y.params.autoplay&&y.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function d(a,t){a=e(a);var s,r,i,n=y.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(a,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-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",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},m=s&&s.virtualTranslate;s=s||{};var f={};for(var g in s)if("object"!=typeof s[g]||null===s[g]||(s[g].nodeType||s[g]===window||s[g]===document||"undefined"!=typeof Dom7&&s[g]instanceof Dom7||"undefined"!=typeof jQuery&&s[g]instanceof jQuery))f[g]=s[g];else{f[g]={};for(var h in s[g])f[g][h]=s[g][h]}for(var v in c)if("undefined"==typeof s[v])s[v]=c[v];else if("object"==typeof s[v])for(var w in c[v])"undefined"==typeof s[v][w]&&(s[v][w]=c[v][w]);var y=this;if(y.params=s,y.originalParams=f,y.classNames=[],"undefined"!=typeof e&&"undefined"!=typeof Dom7&&(e=Dom7),("undefined"!=typeof e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=e,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(a),0!==y.container.length)){if(y.container.length>1){var b=[];return y.container.each(function(){b.push(new t(this,s))}),b}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push("swiper-container-"+y.params.direction),y.params.freeMode&&y.classNames.push("swiper-container-free-mode"),y.support.flexbox||(y.classNames.push("swiper-container-no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push("swiper-container-autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push("swiper-container-3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push("swiper-container-"+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0,y.params.setWrapperSize=!1),("fade"===y.params.effect||"flip"===y.params.effect)&&(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,y.params.setWrapperSize=!1,"undefined"==typeof m&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=e(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass("swiper-pagination-clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass("swiper-pagination-"+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=e(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=e(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push("swiper-container-rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push("swiper-container-multirow"),y.device.android&&y.classNames.push("swiper-container-android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0},y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab"),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r){function i(){r&&r()}var n;e.complete&&s?i():a?(n=new window.Image,n.onload=i,n.onerror=i,t&&(n.srcset=t),a&&(n.src=a)):i()},y.preloadImages=function(){function e(){"undefined"!=typeof y&&null!==y&&(void 0!==y.imagesLoaded&&y.imagesLoaded++,y.imagesLoaded===y.imagesToLoad.length&&(y.params.updateOnImagesReady&&y.update(),y.emit("onImagesReady",y)))}y.imagesToLoad=y.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var c,m,f;"column"===y.params.slidesPerColumnFill?(m=Math.floor(e/l),f=e-m*l,(m>d||m===d&&f===l-1)&&++f>=l&&(f=0,m++),c=m+f*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(f=Math.floor(e/p),m=e-f*p),u.css({"margin-top":0!==f&&y.params.spaceBetween&&y.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",f)}"none"!==u.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var g;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),(!y.support.flexbox||y.params.setWrapperSize)&&(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(g=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;e=0&&i0&&n<=y.size||0>=i&&n>=y.size;o&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){"undefined"==typeof e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/y.params.slidesPerGroup),t>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses())},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass);var a=y.slides.eq(y.activeIndex);a.addClass(y.params.slideActiveClass);var t=a.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&y.slides.eq(0).addClass(y.params.slideNextClass);var s=a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===s.length&&y.slides.eq(-1).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var r,i=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(r=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup),r>y.slides.length-1-2*y.loopedSlides&&(r-=y.slides.length-2*y.loopedSlides),r>i-1&&(r-=i),0>r&&"bullets"!==y.params.paginationType&&(r=i+r)):r="undefined"!=typeof y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){e(this).index()===r&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(r).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(r+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(i)),"progress"===y.params.paginationType){var n=(r+1)/i,o=n,l=1;y.isHorizontal()||(l=n,o=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,r+1,i)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;a>t;t++)e+=y.params.paginationBulletRender?y.params.paginationBulletRender(t,y.params.bulletClass):"<"+y.params.paginationElement+' class="'+y.params.bulletClass+'">'+y.params.paginationElement+">";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses()}if(y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),e){var t,s;y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(t=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0),t||a())}else y.params.autoHeight&&y.updateAutoHeight()},y.onResize=function(e){y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var x=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?x=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(x=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":x[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":x[1],end:y.support.touch||!y.params.simulateTouch?"touchend":x[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=y.params.nested?!0:!1;y.browser.ie?(r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(r[t](y.touchEvents.start,y.onTouchStart,!1),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))),window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),(!y.isEnd||y.params.loop)&&y.slideNext()},y.onClickPrev=function(e){e.preventDefault(),(!y.isBeginning||y.params.loop)&&y.slidePrev()},y.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(a){var t=n(a,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+y.params.slidesPerView/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-y.params.slidesPerView?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var T,S,C,z,M,P,I,k,E,B,D="input, select, textarea, button",L=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,A;if(y.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),G="touchstart"===a.type,G||!("which"in a)||3!==a.which){if(y.params.noSwiping&&n(a,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(a,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=y.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(T=!0,S=!1,C=!0,M=void 0,A=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(k=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(D)&&(r=!1),document.activeElement&&e(document.activeElement).is(D)&&document.activeElement.blur(),r&&a.preventDefault()}y.emit("onTouchStart",y,a)}}}},y.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return y.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(y.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(T&&(y.touches.startX=y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.startY=y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(D))return S=!0,void(y.allowClick=!1);if(C&&y.emit("onTouchMove",y,a),!(a.targetTouches&&a.targetTouches.length>1)){if(y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,"undefined"==typeof M){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(M&&y.emit("onTouchMoveOpposite",y,a),"undefined"==typeof A&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(A=!0),T){if(M)return void(T=!1);if(A||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),S||(s.loop&&y.fixLoop(),I=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),B=!1,y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grabbing",y.container[0].style.cursor="-moz-grabbin",y.container[0].style.cursor="grabbing")),S=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+I;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1,
-y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+I+r,y.params.resistanceRatio))):0>r&&PP&&(P=I),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&P>I&&(P=I),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||k))return void(P=I);if(!k)return k=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=I,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}(y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P)}}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),C&&y.emit("onTouchEnd",y,a),C=!1,T){y.params.grabCursor&&S&&T&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab");var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),300>s&&t-L>300&&(E&&clearTimeout(E),E=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!e(a.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,a))},300)),300>s&&300>t-L&&(E&&clearTimeout(E),y.emit("onDoubleTap",y,a))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!T||!S||!y.swipeDirection||0===y.touches.diff||P===I)return void(T=S=!1);T=S=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,u=y.translate+d;y.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(uy.minTranslate())y.params.freeModeMomentumBounce?(u-y.minTranslate()>f&&(u=y.minTranslate()+f),c=y.minTranslate(),m=!0,B=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var g,h=0;for(h=0;h-u){g=h;break}u=Math.abs(y.snapGrid[g]-u)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var v,w=0,b=y.slidesSizesGrid[0];for(v=0;v=y.slidesGrid[v]&&r=y.slidesGrid[v]&&(w=v,b=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var x=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(x>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(x>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r);for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),!1):(y.updateClasses(),y.onTransitionStart(t),0===a?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),!0))},y.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)}return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex-1,a,e,t)}return y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0,n=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, "+n+"px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var o,l=y.maxTranslate()-y.minTranslate();o=0===l?0:(e-y.minTranslate())/l,o!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return"undefined"==typeof a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;aa.length&&(y.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,y.slides[a]&&y.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);y.params.loop&&y.createLoop(),y.params.observer&&y.support.observer||y.update(!0),y.params.loop?y.slideTo(t+y.loopedSlides,0,!1):y.slideTo(t,0,!1)},y.removeAllSlides=function(){for(var e=[],a=0;a'),t.append(d)),0===u.length&&(u=e(''),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(y.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),y.params.virtualTranslate&&0!==a){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&e(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),y.wrapper.append(a)),a.css({height:y.width+"px"})):(a=y.container.find(".swiper-cube-shadow"),0===a.length&&(a=e(''),y.container.append(a))));for(var s=0;s=o&&o>-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(u),y.params.cube.slideShadows){var c=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),m=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===c.length&&(c=e(''),r.append(c)),0===m.length&&(m=e(''),r.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())a.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var f=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),h=y.params.cube.shadowScale,v=y.params.cube.shadowScale/g,w=y.params.cube.shadowOffset;a.transform("scale3d("+h+", 1, "+v+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/v+"px) rotateX(-90deg)")}var b=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+b+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=y.translate,t=y.isHorizontal()?-a+y.width/2:-a+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;n>i;i++){var o=y.slides.eq(i),l=y.slidesSizesGrid[i],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*y.params.coverflow.modifier,u=y.isHorizontal()?s*d:0,c=y.isHorizontal()?0:s*d,m=-r*Math.abs(d),f=y.isHorizontal()?0:y.params.coverflow.stretch*d,g=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(g)<.001&&(g=0),Math.abs(f)<.001&&(f=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var h="translate3d("+g+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(h),o[0].style.zIndex=-Math.abs(Math.round(d))+1,y.params.coverflow.slideShadows){var v=y.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=y.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=e(''),o.append(v)),0===w.length&&(w=e(''),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(y.browser.ie){var b=y.wrapper[0].style;b.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if("undefined"!=typeof a&&("undefined"==typeof t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(a),r=s.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!s.hasClass("swiper-lazy")||s.hasClass("swiper-lazy-loaded")||s.hasClass("swiper-lazy-loading")||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass("swiper-lazy-loading");var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset");y.loadImage(a[0],i||r,n,!1,function(){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),s.find(".swiper-lazy-preloader, .preloader").remove(),y.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var o=y.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(o.index(),!1)}else{var l=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');y.lazy.loadImageInSlide(l.index(),!1)}}y.emit("onLazyImageReady",y,s[0],a[0])}),y.emit("onLazyImageLoad",y,s[0],a[0])})}},load:function(){var a;if(y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(e(this).index())});else if(y.params.slidesPerView>1)for(a=y.activeIndex;a1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var t=y.params.lazyLoadingInPrevNextAmount,s=y.params.slidesPerView,r=Math.min(y.activeIndex+s+Math.max(t,s),y.slides.length),i=Math.max(y.activeIndex-Math.max(s,t),0);for(a=y.activeIndex+y.params.slidesPerView;r>a;a++)y.slides[a]&&y.lazy.loadImageInSlide(a);for(a=i;a0&&y.lazy.loadImageInSlide(n.index());var o=y.wrapper.children("."+y.params.slidePrevClass);o.length>0&&y.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,r=-y.minTranslate()*a.moveDivider,i=-y.maxTranslate()*a.moveDivider;r>s?s=r:s>i&&(s=i),s=-s/a.moveDivider,y.updateProgress(s),y.setWrapperTranslate(s,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},enableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).on(y.touchEvents.start,a.dragStart),e(t).on(y.touchEvents.move,a.dragMove),e(t).on(y.touchEvents.end,a.dragEnd)},disableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).off(y.touchEvents.start,a.dragStart),e(t).off(y.touchEvents.move,a.dragMove),e(t).off(y.touchEvents.end,a.dragEnd)},set:function(){if(y.params.scrollbar){var a=y.scrollbar;a.track=e(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&a.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(a.track=y.container.find(y.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e(''),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=y.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=y.size/y.virtualSize,a.moveDivider=a.divider*(a.trackSize/y.size),a.dragSize=a.trackSize*a.divider,y.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",y.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,s;this.x.length;this.interpolate=function(e){return e?(s=r(this.x,e),t=s-1,(e-this.x[t])*(this.y[s]-this.y[t])/(this.x[s]-this.x[t])+this.y[t]):0};var r=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}()},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,a){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(y.isArray(n))for(var o=0;ot;t++){var r=y.slides.eq(t),i=r.attr("data-hash");if(i===e&&!r.hasClass(y.params.slideDuplicateClass)){var n=r.index();y.slideTo(n,a,y.params.runCallbacksOnInit,!0)}}}},setHash:function(){y.hashnav.initialized&&y.params.hashnav&&(document.location.hash=y.slides.eq(y.activeIndex).attr("data-hash")||"")}},y.disableKeyboardControl=function(){y.params.keyboardControl=!1,e(document).off("keydown",l)},y.enableKeyboardControl=function(){y.params.keyboardControl=!0,e(document).on("keydown",l)},y.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},y.params.mousewheelControl){try{new window.WheelEvent("wheel"),y.mousewheel.event="wheel"}catch(O){(window.WheelEvent||y.container[0]&&"wheel"in y.container[0])&&(y.mousewheel.event="wheel")}!y.mousewheel.event&&window.WheelEvent,y.mousewheel.event||void 0===document.onmousewheel||(y.mousewheel.event="mousewheel"),y.mousewheel.event||(y.mousewheel.event="DOMMouseScroll")}y.disableMousewheelControl=function(){return y.mousewheel.event?(y.container.off(y.mousewheel.event,p),!0):!1},y.enableMousewheelControl=function(){return y.mousewheel.event?(y.container.on(y.mousewheel.event,p),!0):!1},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){d(this,y.progress)}),y.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var e=Math.min(Math.max(a[0].progress,-1),1);d(this,e)})})},setTransition:function(a){"undefined"==typeof a&&(a=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},y._plugins=[];for(var N in y.plugins){var R=y.plugins[N](y,y.params[N]);R&&y._plugins.push(R)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),e(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var a=e(this);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(),
-y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(),y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.emit("onDestroy"),e!==!1&&(y=null)},y.init(),y}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t parseInt(b, 10);
- });
- for (var i = 0; i < points.length; i++) {
- point = points[i];
- if (point >= window.innerWidth && !breakpoint) {
- breakpoint = point;
- }
- }
- return breakpoint || 'max';
- };
- s.setBreakpoint = function () {
- //Set breakpoint for window width and update parameters
- var breakpoint = s.getActiveBreakpoint();
- if (breakpoint && s.currentBreakpoint !== breakpoint) {
- var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;
- var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);
- for ( var param in breakPointsParams ) {
- s.params[param] = breakPointsParams[param];
- }
- s.currentBreakpoint = breakpoint;
- if(needsReLoop && s.destroyLoop) {
- s.reLoop(true);
- }
- }
- };
- // Set breakpoint on load
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- /*=========================
- Preparation - Define Container, Wrapper and Pagination
- ===========================*/
- s.container = $(container);
- if (s.container.length === 0) return;
- if (s.container.length > 1) {
- var swipers = [];
- s.container.each(function () {
- var container = this;
- swipers.push(new Swiper(this, params));
- });
- return swipers;
- }
-
- // Save instance in container HTML Element and in data
- s.container[0].swiper = s;
- s.container.data('swiper', s);
-
- s.classNames.push('swiper-container-' + s.params.direction);
-
- if (s.params.freeMode) {
- s.classNames.push('swiper-container-free-mode');
- }
- if (!s.support.flexbox) {
- s.classNames.push('swiper-container-no-flexbox');
- s.params.slidesPerColumn = 1;
- }
- if (s.params.autoHeight) {
- s.classNames.push('swiper-container-autoheight');
- }
- // Enable slides progress when required
- if (s.params.parallax || s.params.watchSlidesVisibility) {
- s.params.watchSlidesProgress = true;
- }
- // Coverflow / 3D
- if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {
- if (s.support.transforms3d) {
- s.params.watchSlidesProgress = true;
- s.classNames.push('swiper-container-3d');
- }
- else {
- s.params.effect = 'slide';
- }
- }
- if (s.params.effect !== 'slide') {
- s.classNames.push('swiper-container-' + s.params.effect);
- }
- if (s.params.effect === 'cube') {
- s.params.resistanceRatio = 0;
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.centeredSlides = false;
- s.params.spaceBetween = 0;
- s.params.virtualTranslate = true;
- s.params.setWrapperSize = false;
- }
- 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;
- s.params.setWrapperSize = false;
- if (typeof initialVirtualTranslate === 'undefined') {
- s.params.virtualTranslate = true;
- }
- }
-
- // Grab Cursor
- if (s.params.grabCursor && s.support.touch) {
- s.params.grabCursor = false;
- }
-
- // Wrapper
- s.wrapper = s.container.children('.' + s.params.wrapperClass);
-
- // Pagination
- if (s.params.pagination) {
- s.paginationContainer = $(s.params.pagination);
- if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {
- s.paginationContainer = s.container.find(s.params.pagination);
- }
-
- if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {
- s.paginationContainer.addClass('swiper-pagination-clickable');
- }
- else {
- s.params.paginationClickable = false;
- }
- s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
- }
- // Next/Prev Buttons
- if (s.params.nextButton || s.params.prevButton) {
- if (s.params.nextButton) {
- s.nextButton = $(s.params.nextButton);
- if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {
- s.nextButton = s.container.find(s.params.nextButton);
- }
- }
- if (s.params.prevButton) {
- s.prevButton = $(s.params.prevButton);
- if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {
- s.prevButton = s.container.find(s.params.prevButton);
- }
- }
- }
-
- // Is Horizontal
- s.isHorizontal = function () {
- return s.params.direction === 'horizontal';
- };
- // s.isH = isH;
-
- // RTL
- s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');
- if (s.rtl) {
- s.classNames.push('swiper-container-rtl');
- }
-
- // Wrong RTL support
- if (s.rtl) {
- s.wrongRTL = s.wrapper.css('display') === '-webkit-box';
- }
-
- // Columns
- if (s.params.slidesPerColumn > 1) {
- s.classNames.push('swiper-container-multirow');
- }
-
- // Check for Android
- if (s.device.android) {
- s.classNames.push('swiper-container-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;
- };
- s.lockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = false;
- };
- s.lockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;
- };
- s.unlockSwipeToNext = function () {
- s.params.allowSwipeToNext = true;
- };
- s.unlockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = true;
- };
- s.unlockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;
- };
-
- /*=========================
- Round helper
- ===========================*/
- function round(a) {
- return Math.floor(a);
- }
- /*=========================
- Set grab cursor
- ===========================*/
- if (s.params.grabCursor) {
- s.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
- /*=========================
- Update on Images Ready
- ===========================*/
- s.imagesToLoad = [];
- s.imagesLoaded = 0;
-
- s.loadImage = function (imgElement, src, srcset, 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 (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) 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')), true, _onReady);
- }
- };
-
- /*=========================
- Autoplay
- ===========================*/
- s.autoplayTimeoutId = undefined;
- s.autoplaying = false;
- s.autoplayPaused = false;
- function 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();
- }
- }
- }
- }, s.params.autoplay);
- }
- 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 () {
- // Update Height
- var slide = s.slides.eq(s.activeIndex)[0];
- if (typeof slide !== 'undefined') {
- var newHeight = slide.offsetHeight;
- 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-top': (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 (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;
- s.wrapper.css({width: 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;
- }
- };
-
- /*=========================
- 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 - 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 (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();
- };
-
- /*=========================
- Classes
- ===========================*/
- s.updateClasses = function () {
- s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);
- var activeSlide = s.slides.eq(s.activeIndex);
- // Active classes
- activeSlide.addClass(s.params.slideActiveClass);
- // Next Slide
- var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
- if (s.params.loop && nextSlide.length === 0) {
- s.slides.eq(0).addClass(s.params.slideNextClass);
- }
- // Prev Slide
- var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);
- if (s.params.loop && prevSlide.length === 0) {
- s.slides.eq(-1).addClass(s.params.slidePrevClass);
- }
-
- // 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(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) {
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updateProgress();
- s.updatePagination();
- s.updateClasses();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- function forceSetTranslate() {
- newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
- }
- if (updateTranslate) {
- var translated, newTranslate;
- 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) {
- //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;
- };
-
- /*=========================
- Events
- ===========================*/
-
- //Define Touch Events
- var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];
- if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];
- else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
- s.touchEvents = {
- start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],
- move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],
- end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]
- };
-
-
- // 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) {
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);
- touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);
- }
- if (params.simulateTouch && !s.device.ios && !s.device.android) {
- touchEventsTarget[action]('mousedown', s.onTouchStart, false);
- document[action]('mousemove', s.onTouchMove, moveCapture);
- document[action]('mouseup', s.onTouchEnd, false);
- }
- }
- window[action]('resize', s.onResize);
-
- // Next, Prev, Index
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.nextButton[actionDom]('click', s.onClickNext);
- if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.prevButton[actionDom]('click', s.onClickPrev);
- if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.pagination && s.params.paginationClickable) {
- s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);
- if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);
- }
-
- // Prevent Links Clicks
- if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);
- };
- s.attachEvents = function () {
- s.initEvents();
- };
- s.detachEvents = function () {
- s.initEvents(true);
- };
-
- /*=========================
- Handle Clicks
- ===========================*/
- // Prevent Clicks
- s.allowClick = true;
- s.preventClicks = function (e) {
- if (!s.allowClick) {
- if (s.params.preventClicks) e.preventDefault();
- if (s.params.preventClicksPropagation && s.animating) {
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- }
- };
- // Clicks
- s.onClickNext = function (e) {
- e.preventDefault();
- if (s.isEnd && !s.params.loop) return;
- s.slideNext();
- };
- s.onClickPrev = function (e) {
- e.preventDefault();
- if (s.isBeginning && !s.params.loop) return;
- s.slidePrev();
- };
- s.onClickIndex = function (e) {
- e.preventDefault();
- var index = $(this).index() * s.params.slidesPerGroup;
- if (s.params.loop) index = index + s.loopedSlides;
- s.slideTo(index);
- };
-
- /*=========================
- Handle Touches
- ===========================*/
- function findElementInEvent(e, selector) {
- var el = $(e.target);
- if (!el.is(selector)) {
- if (typeof selector === 'string') {
- el = el.parents(selector);
- }
- else if (selector.nodeType) {
- var found;
- el.parents().each(function (index, _el) {
- if (_el === selector) found = selector;
- });
- if (!found) return undefined;
- else return selector;
- }
- }
- if (el.length === 0) {
- return undefined;
- }
- return el[0];
- }
- s.updateClickedSlide = function (e) {
- var slide = findElementInEvent(e, '.' + s.params.slideClass);
- var slideFound = false;
- if (slide) {
- for (var i = 0; i < s.slides.length; i++) {
- if (s.slides[i] === slide) slideFound = true;
- }
- }
-
- if (slide && slideFound) {
- s.clickedSlide = slide;
- s.clickedIndex = $(slide).index();
- }
- else {
- s.clickedSlide = undefined;
- s.clickedIndex = undefined;
- return;
- }
- if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {
- var slideToIndex = s.clickedIndex,
- realIndex,
- duplicatedSlides;
- if (s.params.loop) {
- if (s.animating) return;
- realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');
- if (s.params.centeredSlides) {
- if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- else {
- if (slideToIndex > s.slides.length - s.params.slidesPerView) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').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',
- // 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 && 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 = 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' && s.browser.ieTouch) {
- 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 && s.browser.ieTouch) {
- 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grabbing';
- s.container[0].style.cursor = '-moz-grabbin';
- s.container[0].style.cursor = 'grabbing';
- }
- }
- 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;
- }
-
- if (!s.params.followFinger) return;
-
- // 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;
- }
- }
- // 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
-
- // 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;
- }
-
- 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
- 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;
-
- 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.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.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);
- };
-
- /*=========================
- Translate/transition helpers
- ===========================*/
- s.setWrapperTransition = function (duration, byController) {
- s.wrapper.transition(duration);
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTransition(duration);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTransition(duration);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTransition(duration);
- }
- if (s.params.control && s.controller) {
- s.controller.setTransition(duration, byController);
- }
- s.emit('onSetTransition', s, duration);
- };
- s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {
- var x = 0, y = 0, z = 0;
- if (s.isHorizontal()) {
- x = s.rtl ? -translate : translate;
- }
- else {
- y = translate;
- }
-
- if (s.params.roundLengths) {
- x = round(x);
- y = round(y);
- }
-
- if (!s.params.virtualTranslate) {
- if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');
- else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');
- }
-
- s.translate = s.isHorizontal() ? x : y;
-
- // Check if we need to update progress
- var progress;
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- if (translatesDiff === 0) {
- progress = 0;
- }
- else {
- progress = (translate - s.minTranslate()) / (translatesDiff);
- }
- if (progress !== s.progress) {
- s.updateProgress(translate);
- }
-
- if (updateActiveIndex) s.updateActiveIndex();
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTranslate(s.translate);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTranslate(s.translate);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTranslate(s.translate);
- }
- if (s.params.control && s.controller) {
- s.controller.setTranslate(s.translate, byController);
- }
- s.emit('onSetTranslate', s, s.translate);
- };
-
- s.getTranslate = function (el, axis) {
- var matrix, curTransform, curStyle, transformMatrix;
-
- // automatic axis detection
- if (typeof axis === 'undefined') {
- axis = 'x';
- }
-
- if (s.params.virtualTranslate) {
- return s.rtl ? -s.translate : s.translate;
- }
-
- curStyle = window.getComputedStyle(el, null);
- if (window.WebKitCSSMatrix) {
- curTransform = curStyle.transform || curStyle.webkitTransform;
- if (curTransform.split(',').length > 6) {
- curTransform = curTransform.split(', ').map(function(a){
- return a.replace(',','.');
- }).join(', ');
- }
- // Some old versions of Webkit choke when 'none' is passed; pass
- // empty string instead in this case
- transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
- }
- else {
- transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
- matrix = transformMatrix.toString().split(',');
- }
-
- if (axis === 'x') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m41;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[12]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[4]);
- }
- if (axis === 'y') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m42;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[13]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[5]);
- }
- if (s.rtl && curTransform) curTransform = -curTransform;
- return curTransform || 0;
- };
- s.getWrapperTranslate = function (axis) {
- if (typeof axis === 'undefined') {
- axis = s.isHorizontal() ? 'x' : 'y';
- }
- return s.getTranslate(s.wrapper[0], axis);
- };
-
- /*=========================
- Observer
- ===========================*/
- s.observers = [];
- function initObserver(target, options) {
- options = options || {};
- // create an observer instance
- var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
- var observer = new ObserverFunc(function (mutations) {
- mutations.forEach(function (mutation) {
- s.onResize(true);
- s.emit('onObserverUpdate', s, mutation);
- });
- });
-
- observer.observe(target, {
- attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
- childList: typeof options.childList === 'undefined' ? true : options.childList,
- characterData: typeof options.characterData === 'undefined' ? true : options.characterData
- });
-
- s.observers.push(observer);
- }
- s.initObservers = function () {
- if (s.params.observeParents) {
- var containerParents = s.container.parents();
- for (var i = 0; i < containerParents.length; i++) {
- initObserver(containerParents[i]);
- }
- }
-
- // Observe container
- initObserver(s.container[0], {childList: false});
-
- // Observe wrapper
- initObserver(s.wrapper[0], {attributes: false});
- };
- s.disconnectObservers = function () {
- for (var i = 0; i < s.observers.length; i++) {
- s.observers[i].disconnect();
- }
- s.observers = [];
- };
- /*=========================
- Loop
- ===========================*/
- // Create looped slides
- s.createLoop = function () {
- // Remove duplicated slides
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
-
- var slides = s.wrapper.children('.' + s.params.slideClass);
-
- if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;
-
- s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);
- s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;
- if (s.loopedSlides > slides.length) {
- s.loopedSlides = slides.length;
- }
-
- var prependSlides = [], appendSlides = [], i;
- slides.each(function (index, el) {
- var slide = $(this);
- if (index < s.loopedSlides) appendSlides.push(el);
- if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);
- slide.attr('data-swiper-slide-index', index);
- });
- for (i = 0; i < appendSlides.length; i++) {
- s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- for (i = prependSlides.length - 1; i >= 0; i--) {
- s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- };
- s.destroyLoop = function () {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
- s.slides.removeAttr('data-swiper-slide-index');
- };
- s.reLoop = function (updatePosition) {
- var oldIndex = s.activeIndex - s.loopedSlides;
- s.destroyLoop();
- s.createLoop();
- s.updateSlidesSize();
- if (updatePosition) {
- s.slideTo(oldIndex + s.loopedSlides, 0, false);
- }
-
- };
- s.fixLoop = function () {
- var newIndex;
- //Fix For Negative Oversliding
- if (s.activeIndex < s.loopedSlides) {
- newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- //Fix For Positive Oversliding
- else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {
- newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- };
- /*=========================
- Append/Prepend/Remove Slides
- ===========================*/
- s.appendSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.append(slides[i]);
- }
- }
- else {
- s.wrapper.append(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- };
- s.prependSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- var newActiveIndex = s.activeIndex + 1;
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.prepend(slides[i]);
- }
- newActiveIndex = s.activeIndex + slides.length;
- }
- else {
- s.wrapper.prepend(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- s.slideTo(newActiveIndex, 0, false);
- };
- s.removeSlide = function (slidesIndexes) {
- if (s.params.loop) {
- s.destroyLoop();
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- }
- var newActiveIndex = s.activeIndex,
- indexToRemove;
- if (typeof slidesIndexes === 'object' && slidesIndexes.length) {
- for (var i = 0; i < slidesIndexes.length; i++) {
- indexToRemove = slidesIndexes[i];
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- }
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
- else {
- indexToRemove = slidesIndexes;
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
-
- if (s.params.loop) {
- s.createLoop();
- }
-
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- if (s.params.loop) {
- s.slideTo(newActiveIndex + s.loopedSlides, 0, false);
- }
- else {
- s.slideTo(newActiveIndex, 0, false);
- }
-
- };
- s.removeAllSlides = function () {
- var slidesIndexes = [];
- for (var i = 0; i < s.slides.length; i++) {
- slidesIndexes.push(i);
- }
- s.removeSlide(slidesIndexes);
- };
-
-
- /*=========================
- Effects
- ===========================*/
- s.effects = {
- fade: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var offset = slide[0].swiperSlideOffset;
- var tx = -offset;
- if (!s.params.virtualTranslate) tx = tx - s.translate;
- var ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
- var slideOpacity = s.params.fade.crossFade ?
- Math.max(1 - Math.abs(slide[0].progress), 0) :
- 1 + Math.min(Math.max(slide[0].progress, -1), 0);
- slide
- .css({
- opacity: slideOpacity
- })
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');
-
- }
-
- },
- setTransition: function (duration) {
- s.slides.transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- flip: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var progress = slide[0].progress;
- if (s.params.flip.limitRotation) {
- progress = Math.max(Math.min(slide[0].progress, 1), -1);
- }
- var offset = slide[0].swiperSlideOffset;
- var rotate = -180 * progress,
- rotateY = rotate,
- rotateX = 0,
- tx = -offset,
- ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- rotateX = -rotateY;
- rotateY = 0;
- }
- else if (s.rtl) {
- rotateY = -rotateY;
- }
-
- slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;
-
- if (s.params.flip.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
-
- slide
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.eq(s.activeIndex).transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- if (!$(this).hasClass(s.params.slideActiveClass)) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- cube: {
- setTranslate: function () {
- var wrapperRotate = 0, cubeShadow;
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow = s.wrapper.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.wrapper.append(cubeShadow);
- }
- cubeShadow.css({height: s.width + 'px'});
- }
- else {
- cubeShadow = s.container.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('');
- s.container.append(cubeShadow);
- }
- }
- }
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var slideAngle = i * 90;
- var round = Math.floor(slideAngle / 360);
- if (s.rtl) {
- slideAngle = -slideAngle;
- round = Math.floor(-slideAngle / 360);
- }
- var progress = Math.max(Math.min(slide[0].progress, 1), -1);
- var tx = 0, ty = 0, tz = 0;
- if (i % 4 === 0) {
- tx = - round * 4 * s.size;
- tz = 0;
- }
- else if ((i - 1) % 4 === 0) {
- tx = 0;
- tz = - round * 4 * s.size;
- }
- else if ((i - 2) % 4 === 0) {
- tx = s.size + round * 4 * s.size;
- tz = s.size;
- }
- else if ((i - 3) % 4 === 0) {
- tx = - s.size;
- tz = 3 * s.size + s.size * 4 * round;
- }
- if (s.rtl) {
- tx = -tx;
- }
-
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
-
- var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';
- if (progress <= 1 && progress > -1) {
- wrapperRotate = i * 90 + progress * 90;
- if (s.rtl) wrapperRotate = -i * 90 - progress * 90;
- }
- slide.transform(transform);
- if (s.params.cube.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
- }
- s.wrapper.css({
- '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'
- });
-
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');
- }
- else {
- var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
- var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
- var scale1 = s.params.cube.shadowScale,
- scale2 = s.params.cube.shadowScale / multiplier,
- offset = s.params.cube.shadowOffset;
- cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');
- }
- }
- var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;
- s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.cube.shadow && !s.isHorizontal()) {
- s.container.find('.swiper-cube-shadow').transition(duration);
- }
- }
- },
- coverflow: {
- setTranslate: function () {
- var transform = s.translate;
- var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;
- var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;
- var translate = s.params.coverflow.depth;
- //Each slide offset from center
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideSize = s.slidesSizesGrid[i];
- var slideOffset = slide[0].swiperSlideOffset;
- var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;
-
- var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;
- var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;
- // var rotateZ = 0
- var translateZ = -translate * Math.abs(offsetMultiplier);
-
- var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);
- var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;
-
- //Fix for ultra small values
- if (Math.abs(translateX) < 0.001) translateX = 0;
- if (Math.abs(translateY) < 0.001) translateY = 0;
- if (Math.abs(translateZ) < 0.001) translateZ = 0;
- if (Math.abs(rotateY) < 0.001) rotateY = 0;
- if (Math.abs(rotateX) < 0.001) rotateX = 0;
-
- var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';
-
- slide.transform(slideTransform);
- slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
- if (s.params.coverflow.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
- if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
- }
- }
-
- //Set correct perspective for IE10
- if (s.browser.ie) {
- var ws = s.wrapper[0].style;
- ws.perspectiveOrigin = center + 'px 50%';
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- }
- }
- };
-
- /*=========================
- Images Lazy Loading
- ===========================*/
- s.lazy = {
- initialImageLoaded: false,
- loadImageInSlide: function (index, loadInDuplicate) {
- if (typeof index === 'undefined') return;
- if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;
- if (s.slides.length === 0) return;
-
- var slide = s.slides.eq(index);
- var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');
- if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {
- img = img.add(slide[0]);
- }
- if (img.length === 0) return;
-
- img.each(function () {
- var _img = $(this);
- _img.addClass('swiper-lazy-loading');
- var background = _img.attr('data-background');
- var src = _img.attr('data-src'),
- srcset = _img.attr('data-srcset');
- s.loadImage(_img[0], (src || background), srcset, false, function () {
- if (background) {
- _img.css('background-image', 'url("' + background + '")');
- _img.removeAttr('data-background');
- }
- else {
- if (srcset) {
- _img.attr('srcset', srcset);
- _img.removeAttr('data-srcset');
- }
- if (src) {
- _img.attr('src', src);
- _img.removeAttr('data-src');
- }
-
- }
-
- _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');
- slide.find('.swiper-lazy-preloader, .preloader').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;
- if (s.params.watchSlidesVisibility) {
- s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {
- s.lazy.loadImageInSlide($(this).index());
- });
- }
- else {
- if (s.params.slidesPerView > 1) {
- for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- s.lazy.loadImageInSlide(s.activeIndex);
- }
- }
- if (s.params.lazyLoadingInPrevNext) {
- if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {
- var amount = s.params.lazyLoadingInPrevNextAmount;
- var spv = s.params.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 + s.params.slidesPerView; i < maxIndex; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- // Prev Slides
- for (i = minIndex; i < s.activeIndex ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);
- if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());
-
- var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);
- if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());
- }
- }
- },
- onTransitionStart: function () {
- if (s.params.lazyLoading) {
- if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {
- s.lazy.load();
- }
- }
- },
- onTransitionEnd: function () {
- if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {
- s.lazy.load();
- }
- }
- };
-
-
- /*=========================
- Scrollbar
- ===========================*/
- s.scrollbar = {
- isTouched: false,
- setDragPosition: function (e) {
- var sb = s.scrollbar;
- var x = 0, y = 0;
- var translate;
- var pointerPosition = s.isHorizontal() ?
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;
- var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;
- var positionMin = -s.minTranslate() * sb.moveDivider;
- var positionMax = -s.maxTranslate() * sb.moveDivider;
- if (position < positionMin) {
- position = positionMin;
- }
- else if (position > positionMax) {
- position = positionMax;
- }
- position = -position / sb.moveDivider;
- s.updateProgress(position);
- s.setWrapperTranslate(position, true);
- },
- dragStart: function (e) {
- var sb = s.scrollbar;
- sb.isTouched = true;
- e.preventDefault();
- e.stopPropagation();
-
- sb.setDragPosition(e);
- clearTimeout(sb.dragTimeout);
-
- sb.track.transition(0);
- if (s.params.scrollbarHide) {
- sb.track.css('opacity', 1);
- }
- s.wrapper.transition(100);
- sb.drag.transition(100);
- s.emit('onScrollbarDragStart', s);
- },
- dragMove: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- sb.setDragPosition(e);
- s.wrapper.transition(0);
- sb.track.transition(0);
- sb.drag.transition(0);
- s.emit('onScrollbarDragMove', s);
- },
- dragEnd: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- sb.isTouched = false;
- if (s.params.scrollbarHide) {
- clearTimeout(sb.dragTimeout);
- sb.dragTimeout = setTimeout(function () {
- sb.track.css('opacity', 0);
- sb.track.transition(400);
- }, 1000);
-
- }
- s.emit('onScrollbarDragEnd', s);
- if (s.params.scrollbarSnapOnRelease) {
- s.slideReset();
- }
- },
- enableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).on(s.touchEvents.start, sb.dragStart);
- $(target).on(s.touchEvents.move, sb.dragMove);
- $(target).on(s.touchEvents.end, sb.dragEnd);
- },
- disableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).off(s.touchEvents.start, sb.dragStart);
- $(target).off(s.touchEvents.move, sb.dragMove);
- $(target).off(s.touchEvents.end, sb.dragEnd);
- },
- set: function () {
- if (!s.params.scrollbar) return;
- var sb = s.scrollbar;
- sb.track = $(s.params.scrollbar);
- if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {
- sb.track = s.container.find(s.params.scrollbar);
- }
- sb.drag = sb.track.find('.swiper-scrollbar-drag');
- if (sb.drag.length === 0) {
- sb.drag = $('');
- sb.track.append(sb.drag);
- }
- sb.drag[0].style.width = '';
- sb.drag[0].style.height = '';
- sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;
-
- sb.divider = s.size / s.virtualSize;
- sb.moveDivider = sb.divider * (sb.trackSize / s.size);
- sb.dragSize = sb.trackSize * sb.divider;
-
- if (s.isHorizontal()) {
- sb.drag[0].style.width = sb.dragSize + 'px';
- }
- else {
- sb.drag[0].style.height = sb.dragSize + 'px';
- }
-
- if (sb.divider >= 1) {
- sb.track[0].style.display = 'none';
- }
- else {
- sb.track[0].style.display = '';
- }
- if (s.params.scrollbarHide) {
- sb.track[0].style.opacity = 0;
- }
- },
- setTranslate: function () {
- if (!s.params.scrollbar) return;
- var diff;
- var sb = s.scrollbar;
- var translate = s.translate || 0;
- var newPos;
-
- var newSize = sb.dragSize;
- newPos = (sb.trackSize - sb.dragSize) * s.progress;
- if (s.rtl && s.isHorizontal()) {
- newPos = -newPos;
- if (newPos > 0) {
- newSize = sb.dragSize - newPos;
- newPos = 0;
- }
- else if (-newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize + newPos;
- }
- }
- else {
- if (newPos < 0) {
- newSize = sb.dragSize + newPos;
- newPos = 0;
- }
- else if (newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize - newPos;
- }
- }
- if (s.isHorizontal()) {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');
- }
- else {
- sb.drag.transform('translateX(' + (newPos) + 'px)');
- }
- sb.drag[0].style.width = newSize + 'px';
- }
- else {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');
- }
- else {
- sb.drag.transform('translateY(' + (newPos) + 'px)');
- }
- sb.drag[0].style.height = newSize + 'px';
- }
- if (s.params.scrollbarHide) {
- clearTimeout(sb.timeout);
- sb.track[0].style.opacity = 1;
- sb.timeout = setTimeout(function () {
- sb.track[0].style.opacity = 0;
- sb.track.transition(400);
- }, 1000);
- }
- },
- setTransition: function (duration) {
- if (!s.params.scrollbar) return;
- s.scrollbar.drag.transition(duration);
- }
- };
-
- /*=========================
- Controller
- ===========================*/
- s.controller = {
- LinearSpline: function (x, y) {
- 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];
- };
-
- 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;
- };
- })();
- },
- //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 (s.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 (s.isArray(controlled)) {
- for (i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTransition(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
- setControlledTransition(controlled);
- }
- }
- };
-
- /*=========================
- Hash Navigation
- ===========================*/
- s.hashnav = {
- init: function () {
- if (!s.params.hashnav) return;
- s.hashnav.initialized = true;
- var hash = document.location.hash.replace('#', '');
- if (!hash) return;
- 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');
- if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, s.params.runCallbacksOnInit, true);
- }
- }
- },
- setHash: function () {
- if (!s.hashnav.initialized || !s.params.hashnav) return;
- document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';
- }
- };
-
- /*=========================
- 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('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').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.disableKeyboardControl = function () {
- s.params.keyboardControl = false;
- $(document).off('keydown', handleKeyboard);
- };
- s.enableKeyboardControl = function () {
- s.params.keyboardControl = true;
- $(document).on('keydown', handleKeyboard);
- };
-
-
- /*=========================
- Mousewheel Control
- ===========================*/
- s.mousewheel = {
- event: false,
- lastScrollTime: (new window.Date()).getTime()
- };
- if (s.params.mousewheelControl) {
- try {
- new window.WheelEvent('wheel');
- s.mousewheel.event = 'wheel';
- } catch (e) {
- if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {
- s.mousewheel.event = 'wheel';
- }
- }
- if (!s.mousewheel.event && window.WheelEvent) {
-
- }
- if (!s.mousewheel.event && document.onmousewheel !== undefined) {
- s.mousewheel.event = 'mousewheel';
- }
- if (!s.mousewheel.event) {
- s.mousewheel.event = 'DOMMouseScroll';
- }
- }
- function handleMousewheel(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var we = s.mousewheel.event;
- var delta = 0;
- var rtlFactor = s.rtl ? -1 : 1;
-
- //WebKits
- if (we === 'mousewheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;
- }
- }
- //Old FireFox
- else if (we === 'DOMMouseScroll') delta = -e.detail;
- //New FireFox
- else if (we === 'wheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;
- }
- }
- 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();
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- else {
- if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();
- 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();
- }
- }
-
- // Return page scroll on edge positions
- if (position === 0 || position === s.maxTranslate()) return;
- }
- if (s.params.autoplay) s.stopAutoplay();
-
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- return false;
- }
- s.disableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.off(s.mousewheel.event, handleMousewheel);
- return true;
- };
-
- s.enableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.on(s.mousewheel.event, handleMousewheel);
- 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);
- });
- }
- };
-
-
- /*=========================
- 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.autoplay) {
- s.startAutoplay();
- }
- if (s.params.keyboardControl) {
- if (s.enableKeyboardControl) s.enableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.enableMousewheelControl) s.enableMousewheelControl();
- }
- 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();
- // 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();
- // Destroy callback
- s.emit('onDestroy');
- // Delete instance
- if (deleteInstance !== false) s = null;
- };
-
- s.init();
-
-
-
- // Return swiper instance
- return s;
- };
-
-
- /*==================================================
- Prototype
- ====================================================*/
- Swiper.prototype = {
- isSafari: (function () {
- var ua = navigator.userAgent.toLowerCase();
- return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
- })(),
- isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(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)
- },
- /*==================================================
- Devices
- ====================================================*/
- device: (function () {
- var ua = 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)\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);
- })()
- },
- /*==================================================
- Plugins
- ====================================================*/
- plugins: {}
- };
-
-
- /*===========================
- Dom7 Library
- ===========================*/
- var Dom7 = (function () {
- var Dom7 = function (arr) {
- var _this = this, i = 0;
- // Create array-like object
- for (i = 0; i < arr.length; i++) {
- _this[i] = arr[i];
- }
- _this.length = arr.length;
- // Return collection with methods
- return this;
- };
- var $ = function (selector, context) {
- var arr = [], i = 0;
- if (selector && !context) {
- if (selector instanceof Dom7) {
- return selector;
- }
- }
- if (selector) {
- // String
- if (typeof selector === 'string') {
- var els, tempParent, html = selector.trim();
- if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
- var toCreate = 'div';
- if (html.indexOf(':~]/)) {
- // Pure ID selector
- els = [document.getElementById(selector.split('#')[1])];
- }
- else {
- // Other selectors
- els = (context || document).querySelectorAll(selector);
- }
- for (i = 0; i < els.length; i++) {
- if (els[i]) arr.push(els[i]);
- }
- }
- }
- // Node/element
- else if (selector.nodeType || selector === window || selector === document) {
- arr.push(selector);
- }
- //Array of elements or instance of Dom
- else if (selector.length > 0 && selector[0].nodeType) {
- for (i = 0; i < selector.length; i++) {
- arr.push(selector[i]);
- }
- }
- }
- return new Dom7(arr);
- };
- Dom7.prototype = {
- // Classes and attriutes
- addClass: function (className) {
- if (typeof className === 'undefined') {
- return this;
- }
- var classes = className.split(' ');
- for (var i = 0; i < classes.length; i++) {
- for (var j = 0; j < this.length; j++) {
- this[j].classList.add(classes[i]);
- }
- }
- return this;
- },
- removeClass: function (className) {
- var classes = className.split(' ');
- for (var i = 0; i < classes.length; i++) {
- for (var j = 0; j < this.length; j++) {
- this[j].classList.remove(classes[i]);
- }
- }
- return this;
- },
- hasClass: function (className) {
- if (!this[0]) return false;
- else return this[0].classList.contains(className);
- },
- toggleClass: function (className) {
- var classes = className.split(' ');
- for (var i = 0; i < classes.length; i++) {
- for (var j = 0; j < this.length; j++) {
- this[j].classList.toggle(classes[i]);
- }
- }
- return this;
- },
- attr: function (attrs, value) {
- if (arguments.length === 1 && typeof attrs === 'string') {
- // Get attr
- if (this[0]) return this[0].getAttribute(attrs);
- else return undefined;
- }
- else {
- // Set attrs
- for (var i = 0; i < this.length; i++) {
- if (arguments.length === 2) {
- // String
- this[i].setAttribute(attrs, value);
- }
- else {
- // Object
- for (var attrName in attrs) {
- this[i][attrName] = attrs[attrName];
- this[i].setAttribute(attrName, attrs[attrName]);
- }
- }
- }
- return this;
- }
- },
- removeAttr: function (attr) {
- for (var i = 0; i < this.length; i++) {
- this[i].removeAttribute(attr);
- }
- return this;
- },
- data: function (key, value) {
- if (typeof value === 'undefined') {
- // Get value
- if (this[0]) {
- var dataKey = this[0].getAttribute('data-' + key);
- if (dataKey) return dataKey;
- else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];
- else return undefined;
- }
- else return undefined;
- }
- else {
- // Set value
- for (var i = 0; i < this.length; i++) {
- var el = this[i];
- if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};
- el.dom7ElementDataStorage[key] = value;
- }
- return this;
- }
- },
- // Transforms
- transform : function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- },
- transition: function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- },
- //Events
- on: function (eventName, targetSelector, listener, capture) {
- function handleLiveEvent(e) {
- var target = e.target;
- if ($(target).is(targetSelector)) listener.call(target, e);
- else {
- var parents = $(target).parents();
- for (var k = 0; k < parents.length; k++) {
- if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);
- }
- }
- }
- var events = eventName.split(' ');
- var i, j;
- for (i = 0; i < this.length; i++) {
- if (typeof targetSelector === 'function' || targetSelector === false) {
- // Usual events
- if (typeof targetSelector === 'function') {
- listener = arguments[1];
- capture = arguments[2] || false;
- }
- for (j = 0; j < events.length; j++) {
- this[i].addEventListener(events[j], listener, capture);
- }
- }
- else {
- //Live events
- for (j = 0; j < events.length; j++) {
- if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];
- this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});
- this[i].addEventListener(events[j], handleLiveEvent, capture);
- }
- }
- }
-
- return this;
- },
- off: function (eventName, targetSelector, listener, capture) {
- var events = eventName.split(' ');
- for (var i = 0; i < events.length; i++) {
- for (var j = 0; j < this.length; j++) {
- if (typeof targetSelector === 'function' || targetSelector === false) {
- // Usual events
- if (typeof targetSelector === 'function') {
- listener = arguments[1];
- capture = arguments[2] || false;
- }
- this[j].removeEventListener(events[i], listener, capture);
- }
- else {
- // Live event
- if (this[j].dom7LiveListeners) {
- for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {
- if (this[j].dom7LiveListeners[k].listener === listener) {
- this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);
- }
- }
- }
- }
- }
- }
- return this;
- },
- once: function (eventName, targetSelector, listener, capture) {
- var dom = this;
- if (typeof targetSelector === 'function') {
- targetSelector = false;
- listener = arguments[1];
- capture = arguments[2];
- }
- function proxy(e) {
- listener(e);
- dom.off(eventName, targetSelector, proxy, capture);
- }
- dom.on(eventName, targetSelector, proxy, capture);
- },
- trigger: function (eventName, eventData) {
- for (var i = 0; i < this.length; i++) {
- var evt;
- try {
- evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});
- }
- catch (e) {
- evt = document.createEvent('Event');
- evt.initEvent(eventName, true, true);
- evt.detail = eventData;
- }
- this[i].dispatchEvent(evt);
- }
- return this;
- },
- transitionEnd: function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- },
- // Sizing/Styles
- width: function () {
- if (this[0] === window) {
- return window.innerWidth;
- }
- else {
- if (this.length > 0) {
- return parseFloat(this.css('width'));
- }
- else {
- return null;
- }
- }
- },
- outerWidth: function (includeMargins) {
- if (this.length > 0) {
- if (includeMargins)
- return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));
- else
- return this[0].offsetWidth;
- }
- else return null;
- },
- height: function () {
- if (this[0] === window) {
- return window.innerHeight;
- }
- else {
- if (this.length > 0) {
- return parseFloat(this.css('height'));
- }
- else {
- return null;
- }
- }
- },
- outerHeight: function (includeMargins) {
- if (this.length > 0) {
- if (includeMargins)
- return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));
- else
- return this[0].offsetHeight;
- }
- else return null;
- },
- offset: function () {
- if (this.length > 0) {
- var el = this[0];
- var box = el.getBoundingClientRect();
- var body = document.body;
- var clientTop = el.clientTop || body.clientTop || 0;
- var clientLeft = el.clientLeft || body.clientLeft || 0;
- var scrollTop = window.pageYOffset || el.scrollTop;
- var scrollLeft = window.pageXOffset || el.scrollLeft;
- return {
- top: box.top + scrollTop - clientTop,
- left: box.left + scrollLeft - clientLeft
- };
- }
- else {
- return null;
- }
- },
- css: function (props, value) {
- var i;
- if (arguments.length === 1) {
- if (typeof props === 'string') {
- if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);
- }
- else {
- for (i = 0; i < this.length; i++) {
- for (var prop in props) {
- this[i].style[prop] = props[prop];
- }
- }
- return this;
- }
- }
- if (arguments.length === 2 && typeof props === 'string') {
- for (i = 0; i < this.length; i++) {
- this[i].style[props] = value;
- }
- return this;
- }
- return this;
- },
-
- //Dom manipulation
- each: function (callback) {
- for (var i = 0; i < this.length; i++) {
- callback.call(this[i], i, this[i]);
- }
- return this;
- },
- html: function (html) {
- if (typeof html === 'undefined') {
- return this[0] ? this[0].innerHTML : undefined;
- }
- else {
- for (var i = 0; i < this.length; i++) {
- this[i].innerHTML = html;
- }
- return this;
- }
- },
- text: function (text) {
- if (typeof text === 'undefined') {
- if (this[0]) {
- return this[0].textContent.trim();
- }
- else return null;
- }
- else {
- for (var i = 0; i < this.length; i++) {
- this[i].textContent = text;
- }
- return this;
- }
- },
- is: function (selector) {
- if (!this[0]) return false;
- var compareWith, i;
- if (typeof selector === 'string') {
- var el = this[0];
- if (el === document) return selector === document;
- if (el === window) return selector === window;
-
- if (el.matches) return el.matches(selector);
- else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);
- else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);
- else if (el.msMatchesSelector) return el.msMatchesSelector(selector);
- else {
- compareWith = $(selector);
- for (i = 0; i < compareWith.length; i++) {
- if (compareWith[i] === this[0]) return true;
- }
- return false;
- }
- }
- else if (selector === document) return this[0] === document;
- else if (selector === window) return this[0] === window;
- else {
- if (selector.nodeType || selector instanceof Dom7) {
- compareWith = selector.nodeType ? [selector] : selector;
- for (i = 0; i < compareWith.length; i++) {
- if (compareWith[i] === this[0]) return true;
- }
- return false;
- }
- return false;
- }
-
- },
- index: function () {
- if (this[0]) {
- var child = this[0];
- var i = 0;
- while ((child = child.previousSibling) !== null) {
- if (child.nodeType === 1) i++;
- }
- return i;
- }
- else return undefined;
- },
- eq: function (index) {
- if (typeof index === 'undefined') return this;
- var length = this.length;
- var returnIndex;
- if (index > length - 1) {
- return new Dom7([]);
- }
- if (index < 0) {
- returnIndex = length + index;
- if (returnIndex < 0) return new Dom7([]);
- else return new Dom7([this[returnIndex]]);
- }
- return new Dom7([this[index]]);
- },
- append: function (newChild) {
- var i, j;
- for (i = 0; i < this.length; i++) {
- if (typeof newChild === 'string') {
- var tempDiv = document.createElement('div');
- tempDiv.innerHTML = newChild;
- while (tempDiv.firstChild) {
- this[i].appendChild(tempDiv.firstChild);
- }
- }
- else if (newChild instanceof Dom7) {
- for (j = 0; j < newChild.length; j++) {
- this[i].appendChild(newChild[j]);
- }
- }
- else {
- this[i].appendChild(newChild);
- }
- }
- return this;
- },
- prepend: function (newChild) {
- var i, j;
- for (i = 0; i < this.length; i++) {
- if (typeof newChild === 'string') {
- var tempDiv = document.createElement('div');
- tempDiv.innerHTML = newChild;
- for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {
- this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
- }
- // this[i].insertAdjacentHTML('afterbegin', newChild);
- }
- else if (newChild instanceof Dom7) {
- for (j = 0; j < newChild.length; j++) {
- this[i].insertBefore(newChild[j], this[i].childNodes[0]);
- }
- }
- else {
- this[i].insertBefore(newChild, this[i].childNodes[0]);
- }
- }
- return this;
- },
- insertBefore: function (selector) {
- var before = $(selector);
- for (var i = 0; i < this.length; i++) {
- if (before.length === 1) {
- before[0].parentNode.insertBefore(this[i], before[0]);
- }
- else if (before.length > 1) {
- for (var j = 0; j < before.length; j++) {
- before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);
- }
- }
- }
- },
- insertAfter: function (selector) {
- var after = $(selector);
- for (var i = 0; i < this.length; i++) {
- if (after.length === 1) {
- after[0].parentNode.insertBefore(this[i], after[0].nextSibling);
- }
- else if (after.length > 1) {
- for (var j = 0; j < after.length; j++) {
- after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);
- }
- }
- }
- },
- next: function (selector) {
- if (this.length > 0) {
- if (selector) {
- if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);
- else return new Dom7([]);
- }
- else {
- if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);
- else return new Dom7([]);
- }
- }
- else return new Dom7([]);
- },
- nextAll: function (selector) {
- var nextEls = [];
- var el = this[0];
- if (!el) return new Dom7([]);
- while (el.nextElementSibling) {
- var next = el.nextElementSibling;
- if (selector) {
- if($(next).is(selector)) nextEls.push(next);
- }
- else nextEls.push(next);
- el = next;
- }
- return new Dom7(nextEls);
- },
- prev: function (selector) {
- if (this.length > 0) {
- if (selector) {
- if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);
- else return new Dom7([]);
- }
- else {
- if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);
- else return new Dom7([]);
- }
- }
- else return new Dom7([]);
- },
- prevAll: function (selector) {
- var prevEls = [];
- var el = this[0];
- if (!el) return new Dom7([]);
- while (el.previousElementSibling) {
- var prev = el.previousElementSibling;
- if (selector) {
- if($(prev).is(selector)) prevEls.push(prev);
- }
- else prevEls.push(prev);
- el = prev;
- }
- return new Dom7(prevEls);
- },
- parent: function (selector) {
- var parents = [];
- for (var i = 0; i < this.length; i++) {
- if (selector) {
- if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
- }
- else {
- parents.push(this[i].parentNode);
- }
- }
- return $($.unique(parents));
- },
- parents: function (selector) {
- var parents = [];
- for (var i = 0; i < this.length; i++) {
- var parent = this[i].parentNode;
- while (parent) {
- if (selector) {
- if ($(parent).is(selector)) parents.push(parent);
- }
- else {
- parents.push(parent);
- }
- parent = parent.parentNode;
- }
- }
- return $($.unique(parents));
- },
- find : function (selector) {
- var foundElements = [];
- for (var i = 0; i < this.length; i++) {
- var found = this[i].querySelectorAll(selector);
- for (var j = 0; j < found.length; j++) {
- foundElements.push(found[j]);
- }
- }
- return new Dom7(foundElements);
- },
- children: function (selector) {
- var children = [];
- for (var i = 0; i < this.length; i++) {
- var childNodes = this[i].childNodes;
-
- for (var j = 0; j < childNodes.length; j++) {
- if (!selector) {
- if (childNodes[j].nodeType === 1) children.push(childNodes[j]);
- }
- else {
- if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);
- }
- }
- }
- return new Dom7($.unique(children));
- },
- remove: function () {
- for (var i = 0; i < this.length; i++) {
- if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
- }
- return this;
- },
- add: function () {
- var dom = this;
- var i, j;
- for (i = 0; i < arguments.length; i++) {
- var toAdd = $(arguments[i]);
- for (j = 0; j < toAdd.length; j++) {
- dom[dom.length] = toAdd[j];
- dom.length++;
- }
- }
- return dom;
- }
- };
- $.fn = Dom7.prototype;
- $.unique = function (arr) {
- var unique = [];
- for (var i = 0; i < arr.length; i++) {
- if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);
- }
- return unique;
- };
-
- return $;
- })();
-
-
- /*===========================
- Get Dom libraries
- ===========================*/
- var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];
- for (var i = 0; i < swiperDomPlugins.length; i++) {
- if (window[swiperDomPlugins[i]]) {
- addLibraryPlugin(window[swiperDomPlugins[i]]);
- }
- }
- // Required DOM Plugins
- var domLib;
- if (typeof Dom7 === 'undefined') {
- domLib = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- domLib = Dom7;
- }
-
- /*===========================
- Add .swiper plugin from Dom libraries
- ===========================*/
- function addLibraryPlugin(lib) {
- lib.fn.swiper = function (params) {
- var firstInstance;
- lib(this).each(function () {
- var s = new Swiper(this, params);
- if (!firstInstance) firstInstance = s;
- });
- return firstInstance;
- };
- }
-
- if (domLib) {
- if (!('transitionEnd' in domLib.fn)) {
- domLib.fn.transitionEnd = function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- };
- }
- if (!('transform' in domLib.fn)) {
- domLib.fn.transform = function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- };
- }
- if (!('transition' in domLib.fn)) {
- domLib.fn.transition = function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- };
- }
- }
-
- window.Swiper = Swiper;
-})();
-/*===========================
-Swiper AMD Export
-===========================*/
-if (typeof(module) !== 'undefined')
-{
- module.exports = window.Swiper;
-}
-else if (typeof define === 'function' && define.amd) {
- define([], function () {
- 'use strict';
- return window.Swiper;
- });
-}
-//# sourceMappingURL=maps/swiper.js.map
diff --git a/dashboard-ui/bower_components/Swiper/src/js/a11y.js b/dashboard-ui/bower_components/Swiper/src/js/a11y.js
deleted file mode 100644
index 3d75d2ebb7..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/a11y.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// 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();
- }
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/amd.js b/dashboard-ui/bower_components/Swiper/src/js/amd.js
deleted file mode 100644
index 4d1d2b5d1d..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/amd.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*===========================
-Swiper AMD Export
-===========================*/
-if (typeof(module) !== 'undefined')
-{
- module.exports = window.Swiper;
-}
-else if (typeof define === 'function' && define.amd) {
- define([], function () {
- 'use strict';
- return window.Swiper;
- });
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/controller.js b/dashboard-ui/bower_components/Swiper/src/js/controller.js
deleted file mode 100644
index b6b5d7acb6..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/controller.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*=========================
- Controller
- ===========================*/
-s.controller = {
- LinearSpline: function (x, y) {
- 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];
- };
-
- 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;
- };
- })();
- },
- //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 (s.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 (s.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);
- }
- }
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/core.js b/dashboard-ui/bower_components/Swiper/src/js/core.js
deleted file mode 100644
index ab3e49d065..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/core.js
+++ /dev/null
@@ -1,2288 +0,0 @@
-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,
- 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,
- // Scrollbar
- scrollbar: null,
- scrollbarHide: true,
- scrollbarDraggable: false,
- scrollbarSnapOnRelease: false,
- // Keyboard Mousewheel
- keyboardControl: false,
- mousewheelControl: false,
- mousewheelReleaseOnEdges: false,
- mousewheelInvert: false,
- mousewheelForceToAxis: false,
- mousewheelSensitivity: 1,
- // Hash Navigation
- hashnav: 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,
- // 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'
- // Swiping/no swiping
- allowSwipeToPrev: true,
- allowSwipeToNext: true,
- swipeHandler: null, //'.swipe-handler',
- noSwiping: true,
- noSwipingClass: 'swiper-no-swiping',
- // NS
- slideClass: 'swiper-slide',
- slideActiveClass: 'swiper-slide-active',
- slideVisibleClass: 'swiper-slide-visible',
- slideDuplicateClass: 'swiper-slide-duplicate',
- slideNextClass: 'swiper-slide-next',
- slidePrevClass: 'swiper-slide-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',
- // 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)
- 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)
- */
-
-};
-var initialVirtualTranslate = params && params.virtualTranslate;
-
-params = params || {};
-var originalParams = {};
-for (var param in params) {
- if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {
- originalParams[param] = {};
- for (var deepParam in params[param]) {
- originalParams[param][deepParam] = params[param][deepParam];
- }
- }
- else {
- originalParams[param] = params[param];
- }
-}
-for (var def in defaults) {
- if (typeof params[def] === 'undefined') {
- params[def] = defaults[def];
- }
- else if (typeof params[def] === 'object') {
- for (var deepDef in defaults[def]) {
- if (typeof params[def][deepDef] === 'undefined') {
- params[def][deepDef] = defaults[def][deepDef];
- }
- }
- }
-}
-
-// Swiper
-var s = this;
-
-// Params
-s.params = params;
-s.originalParams = originalParams;
-
-// Classname
-s.classNames = [];
-/*=========================
- Dom Library and plugins
- ===========================*/
-if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){
- $ = Dom7;
-}
-if (typeof $ === 'undefined') {
- if (typeof Dom7 === 'undefined') {
- $ = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- $ = Dom7;
- }
- if (!$) return;
-}
-// Export it to Swiper instance
-s.$ = $;
-
-/*=========================
- Breakpoints
- ===========================*/
-s.currentBreakpoint = undefined;
-s.getActiveBreakpoint = function () {
- //Get breakpoint for window width
- if (!s.params.breakpoints) return false;
- var breakpoint = false;
- var points = [], point;
- for ( point in s.params.breakpoints ) {
- if (s.params.breakpoints.hasOwnProperty(point)) {
- points.push(point);
- }
- }
- points.sort(function (a, b) {
- return parseInt(a, 10) > parseInt(b, 10);
- });
- for (var i = 0; i < points.length; i++) {
- point = points[i];
- if (point >= window.innerWidth && !breakpoint) {
- breakpoint = point;
- }
- }
- return breakpoint || 'max';
-};
-s.setBreakpoint = function () {
- //Set breakpoint for window width and update parameters
- var breakpoint = s.getActiveBreakpoint();
- if (breakpoint && s.currentBreakpoint !== breakpoint) {
- var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;
- var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);
- for ( var param in breakPointsParams ) {
- s.params[param] = breakPointsParams[param];
- }
- s.currentBreakpoint = breakpoint;
- if(needsReLoop && s.destroyLoop) {
- s.reLoop(true);
- }
- }
-};
-// Set breakpoint on load
-if (s.params.breakpoints) {
- s.setBreakpoint();
-}
-
-/*=========================
- Preparation - Define Container, Wrapper and Pagination
- ===========================*/
-s.container = $(container);
-if (s.container.length === 0) return;
-if (s.container.length > 1) {
- var swipers = [];
- s.container.each(function () {
- var container = this;
- swipers.push(new Swiper(this, params));
- });
- return swipers;
-}
-
-// Save instance in container HTML Element and in data
-s.container[0].swiper = s;
-s.container.data('swiper', s);
-
-s.classNames.push('swiper-container-' + s.params.direction);
-
-if (s.params.freeMode) {
- s.classNames.push('swiper-container-free-mode');
-}
-if (!s.support.flexbox) {
- s.classNames.push('swiper-container-no-flexbox');
- s.params.slidesPerColumn = 1;
-}
-if (s.params.autoHeight) {
- s.classNames.push('swiper-container-autoheight');
-}
-// Enable slides progress when required
-if (s.params.parallax || s.params.watchSlidesVisibility) {
- s.params.watchSlidesProgress = true;
-}
-// Coverflow / 3D
-if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {
- if (s.support.transforms3d) {
- s.params.watchSlidesProgress = true;
- s.classNames.push('swiper-container-3d');
- }
- else {
- s.params.effect = 'slide';
- }
-}
-if (s.params.effect !== 'slide') {
- s.classNames.push('swiper-container-' + s.params.effect);
-}
-if (s.params.effect === 'cube') {
- s.params.resistanceRatio = 0;
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.centeredSlides = false;
- s.params.spaceBetween = 0;
- s.params.virtualTranslate = true;
- s.params.setWrapperSize = false;
-}
-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;
- s.params.setWrapperSize = false;
- if (typeof initialVirtualTranslate === 'undefined') {
- s.params.virtualTranslate = true;
- }
-}
-
-// Grab Cursor
-if (s.params.grabCursor && s.support.touch) {
- s.params.grabCursor = false;
-}
-
-// Wrapper
-s.wrapper = s.container.children('.' + s.params.wrapperClass);
-
-// Pagination
-if (s.params.pagination) {
- s.paginationContainer = $(s.params.pagination);
- if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {
- s.paginationContainer = s.container.find(s.params.pagination);
- }
-
- if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {
- s.paginationContainer.addClass('swiper-pagination-clickable');
- }
- else {
- s.params.paginationClickable = false;
- }
- s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
-}
-// Next/Prev Buttons
-if (s.params.nextButton || s.params.prevButton) {
- if (s.params.nextButton) {
- s.nextButton = $(s.params.nextButton);
- if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {
- s.nextButton = s.container.find(s.params.nextButton);
- }
- }
- if (s.params.prevButton) {
- s.prevButton = $(s.params.prevButton);
- if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {
- s.prevButton = s.container.find(s.params.prevButton);
- }
- }
-}
-
-// Is Horizontal
-s.isHorizontal = function () {
- return s.params.direction === 'horizontal';
-};
-// s.isH = isH;
-
-// RTL
-s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');
-if (s.rtl) {
- s.classNames.push('swiper-container-rtl');
-}
-
-// Wrong RTL support
-if (s.rtl) {
- s.wrongRTL = s.wrapper.css('display') === '-webkit-box';
-}
-
-// Columns
-if (s.params.slidesPerColumn > 1) {
- s.classNames.push('swiper-container-multirow');
-}
-
-// Check for Android
-if (s.device.android) {
- s.classNames.push('swiper-container-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;
-};
-s.lockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = false;
-};
-s.lockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;
-};
-s.unlockSwipeToNext = function () {
- s.params.allowSwipeToNext = true;
-};
-s.unlockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = true;
-};
-s.unlockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;
-};
-
-/*=========================
- Round helper
- ===========================*/
-function round(a) {
- return Math.floor(a);
-}
-/*=========================
- Set grab cursor
- ===========================*/
-if (s.params.grabCursor) {
- s.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
-}
-/*=========================
- Update on Images Ready
- ===========================*/
-s.imagesToLoad = [];
-s.imagesLoaded = 0;
-
-s.loadImage = function (imgElement, src, srcset, 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 (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) 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')), true, _onReady);
- }
-};
-
-/*=========================
- Autoplay
- ===========================*/
-s.autoplayTimeoutId = undefined;
-s.autoplaying = false;
-s.autoplayPaused = false;
-function 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();
- }
- }
- }
- }, s.params.autoplay);
-}
-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 () {
- // Update Height
- var slide = s.slides.eq(s.activeIndex)[0];
- if (typeof slide !== 'undefined') {
- var newHeight = slide.offsetHeight;
- 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-top': (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 (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;
- s.wrapper.css({width: 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;
- }
-};
-
-/*=========================
- 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 - 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 (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();
-};
-
-/*=========================
- Classes
- ===========================*/
-s.updateClasses = function () {
- s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);
- var activeSlide = s.slides.eq(s.activeIndex);
- // Active classes
- activeSlide.addClass(s.params.slideActiveClass);
- // Next Slide
- var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
- if (s.params.loop && nextSlide.length === 0) {
- s.slides.eq(0).addClass(s.params.slideNextClass);
- }
- // Prev Slide
- var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);
- if (s.params.loop && prevSlide.length === 0) {
- s.slides.eq(-1).addClass(s.params.slidePrevClass);
- }
-
- // 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(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) {
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updateProgress();
- s.updatePagination();
- s.updateClasses();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- function forceSetTranslate() {
- newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
- }
- if (updateTranslate) {
- var translated, newTranslate;
- 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) {
- //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;
-};
-
-/*=========================
- Events
- ===========================*/
-
-//Define Touch Events
-var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];
-if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];
-else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
-s.touchEvents = {
- start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],
- move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],
- end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]
-};
-
-
-// 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) {
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);
- touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);
- }
- if (params.simulateTouch && !s.device.ios && !s.device.android) {
- touchEventsTarget[action]('mousedown', s.onTouchStart, false);
- document[action]('mousemove', s.onTouchMove, moveCapture);
- document[action]('mouseup', s.onTouchEnd, false);
- }
- }
- window[action]('resize', s.onResize);
-
- // Next, Prev, Index
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.nextButton[actionDom]('click', s.onClickNext);
- if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.prevButton[actionDom]('click', s.onClickPrev);
- if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.pagination && s.params.paginationClickable) {
- s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);
- if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);
- }
-
- // Prevent Links Clicks
- if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);
-};
-s.attachEvents = function () {
- s.initEvents();
-};
-s.detachEvents = function () {
- s.initEvents(true);
-};
-
-/*=========================
- Handle Clicks
- ===========================*/
-// Prevent Clicks
-s.allowClick = true;
-s.preventClicks = function (e) {
- if (!s.allowClick) {
- if (s.params.preventClicks) e.preventDefault();
- if (s.params.preventClicksPropagation && s.animating) {
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- }
-};
-// Clicks
-s.onClickNext = function (e) {
- e.preventDefault();
- if (s.isEnd && !s.params.loop) return;
- s.slideNext();
-};
-s.onClickPrev = function (e) {
- e.preventDefault();
- if (s.isBeginning && !s.params.loop) return;
- s.slidePrev();
-};
-s.onClickIndex = function (e) {
- e.preventDefault();
- var index = $(this).index() * s.params.slidesPerGroup;
- if (s.params.loop) index = index + s.loopedSlides;
- s.slideTo(index);
-};
-
-/*=========================
- Handle Touches
- ===========================*/
-function findElementInEvent(e, selector) {
- var el = $(e.target);
- if (!el.is(selector)) {
- if (typeof selector === 'string') {
- el = el.parents(selector);
- }
- else if (selector.nodeType) {
- var found;
- el.parents().each(function (index, _el) {
- if (_el === selector) found = selector;
- });
- if (!found) return undefined;
- else return selector;
- }
- }
- if (el.length === 0) {
- return undefined;
- }
- return el[0];
-}
-s.updateClickedSlide = function (e) {
- var slide = findElementInEvent(e, '.' + s.params.slideClass);
- var slideFound = false;
- if (slide) {
- for (var i = 0; i < s.slides.length; i++) {
- if (s.slides[i] === slide) slideFound = true;
- }
- }
-
- if (slide && slideFound) {
- s.clickedSlide = slide;
- s.clickedIndex = $(slide).index();
- }
- else {
- s.clickedSlide = undefined;
- s.clickedIndex = undefined;
- return;
- }
- if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {
- var slideToIndex = s.clickedIndex,
- realIndex,
- duplicatedSlides;
- if (s.params.loop) {
- if (s.animating) return;
- realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');
- if (s.params.centeredSlides) {
- if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- else {
- if (slideToIndex > s.slides.length - s.params.slidesPerView) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').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',
- // 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 && 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 = 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' && s.browser.ieTouch) {
- 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 && s.browser.ieTouch) {
- 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grabbing';
- s.container[0].style.cursor = '-moz-grabbin';
- s.container[0].style.cursor = 'grabbing';
- }
- }
- 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;
- }
-
- if (!s.params.followFinger) return;
-
- // 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;
- }
- }
- // 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.container[0].style.cursor = 'move';
- s.container[0].style.cursor = '-webkit-grab';
- s.container[0].style.cursor = '-moz-grab';
- s.container[0].style.cursor = 'grab';
- }
-
- // 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;
- }
-
- 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
- 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;
-
- 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.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.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);
-};
-
-/*=========================
- 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);
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js b/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js
deleted file mode 100644
index c54de3192c..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/*===========================
-Add .swiper plugin from Dom libraries
-===========================*/
-function addLibraryPlugin(lib) {
- lib.fn.swiper = function (params) {
- var firstInstance;
- lib(this).each(function () {
- var s = new Swiper(this, params);
- if (!firstInstance) firstInstance = s;
- });
- return firstInstance;
- };
-}
-
-if (domLib) {
- if (!('transitionEnd' in domLib.fn)) {
- domLib.fn.transitionEnd = function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- };
- }
- if (!('transform' in domLib.fn)) {
- domLib.fn.transform = function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- };
- }
- if (!('transition' in domLib.fn)) {
- domLib.fn.transition = function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- };
- }
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/dom.js b/dashboard-ui/bower_components/Swiper/src/js/dom.js
deleted file mode 100644
index 995f6fb565..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/dom.js
+++ /dev/null
@@ -1,664 +0,0 @@
-/*===========================
-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 $;
-})();
diff --git a/dashboard-ui/bower_components/Swiper/src/js/effects.js b/dashboard-ui/bower_components/Swiper/src/js/effects.js
deleted file mode 100644
index e2c530028a..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/effects.js
+++ /dev/null
@@ -1,276 +0,0 @@
-/*=========================
- 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);
- }
- }
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/emitter.js b/dashboard-ui/bower_components/Swiper/src/js/emitter.js
deleted file mode 100644
index 836111f305..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/emitter.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*=========================
- 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;
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js b/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js
deleted file mode 100644
index aff1d835f9..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*===========================
- 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;
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js b/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js
deleted file mode 100644
index 07ba61dcf8..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*===========================
- Get jQuery
- ===========================*/
-
-addLibraryPlugin($);
-
-var domLib = $;
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/hashnav.js b/dashboard-ui/bower_components/Swiper/src/js/hashnav.js
deleted file mode 100644
index d4965e4303..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/hashnav.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*=========================
- Hash Navigation
- ===========================*/
-s.hashnav = {
- init: function () {
- if (!s.params.hashnav) return;
- s.hashnav.initialized = true;
- var hash = document.location.hash.replace('#', '');
- if (!hash) return;
- 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');
- if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, s.params.runCallbacksOnInit, true);
- }
- }
- },
- setHash: function () {
- if (!s.hashnav.initialized || !s.params.hashnav) return;
- document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';
- }
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/init.js b/dashboard-ui/bower_components/Swiper/src/js/init.js
deleted file mode 100644
index d21b373214..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/init.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/*=========================
- 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.autoplay) {
- s.startAutoplay();
- }
- if (s.params.keyboardControl) {
- if (s.enableKeyboardControl) s.enableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.enableMousewheelControl) s.enableMousewheelControl();
- }
- 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();
- // 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();
- // Destroy callback
- s.emit('onDestroy');
- // Delete instance
- if (deleteInstance !== false) s = null;
-};
-
-s.init();
diff --git a/dashboard-ui/bower_components/Swiper/src/js/keyboard.js b/dashboard-ui/bower_components/Swiper/src/js/keyboard.js
deleted file mode 100644
index 53dd5f4891..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/keyboard.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*=========================
- 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('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').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.disableKeyboardControl = function () {
- s.params.keyboardControl = false;
- $(document).off('keydown', handleKeyboard);
-};
-s.enableKeyboardControl = function () {
- s.params.keyboardControl = true;
- $(document).on('keydown', handleKeyboard);
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js b/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js
deleted file mode 100644
index fb546d667e..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*=========================
- 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('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');
- if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {
- img = img.add(slide[0]);
- }
- if (img.length === 0) return;
-
- img.each(function () {
- var _img = $(this);
- _img.addClass('swiper-lazy-loading');
- var background = _img.attr('data-background');
- var src = _img.attr('data-src'),
- srcset = _img.attr('data-srcset');
- s.loadImage(_img[0], (src || background), srcset, false, function () {
- if (background) {
- _img.css('background-image', 'url("' + background + '")');
- _img.removeAttr('data-background');
- }
- else {
- if (srcset) {
- _img.attr('srcset', srcset);
- _img.removeAttr('data-srcset');
- }
- if (src) {
- _img.attr('src', src);
- _img.removeAttr('data-src');
- }
-
- }
-
- _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');
- slide.find('.swiper-lazy-preloader, .preloader').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;
- if (s.params.watchSlidesVisibility) {
- s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {
- s.lazy.loadImageInSlide($(this).index());
- });
- }
- else {
- if (s.params.slidesPerView > 1) {
- for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- s.lazy.loadImageInSlide(s.activeIndex);
- }
- }
- if (s.params.lazyLoadingInPrevNext) {
- if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {
- var amount = s.params.lazyLoadingInPrevNextAmount;
- var spv = s.params.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 + s.params.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();
- }
- }
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js b/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js
deleted file mode 100644
index d704d7c0e6..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/*=========================
- Mousewheel Control
- ===========================*/
-s.mousewheel = {
- event: false,
- lastScrollTime: (new window.Date()).getTime()
-};
-if (s.params.mousewheelControl) {
- try {
- new window.WheelEvent('wheel');
- s.mousewheel.event = 'wheel';
- } catch (e) {
- if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {
- s.mousewheel.event = 'wheel';
- }
- }
- if (!s.mousewheel.event && window.WheelEvent) {
-
- }
- if (!s.mousewheel.event && document.onmousewheel !== undefined) {
- s.mousewheel.event = 'mousewheel';
- }
- if (!s.mousewheel.event) {
- s.mousewheel.event = 'DOMMouseScroll';
- }
-}
-function handleMousewheel(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var we = s.mousewheel.event;
- var delta = 0;
- var rtlFactor = s.rtl ? -1 : 1;
-
- //WebKits
- if (we === 'mousewheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;
- }
- }
- //Old FireFox
- else if (we === 'DOMMouseScroll') delta = -e.detail;
- //New FireFox
- else if (we === 'wheel') {
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;
- else return;
- }
- }
- else {
- delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;
- }
- }
- 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();
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- else {
- if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();
- 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();
- }
- }
-
- // Return page scroll on edge positions
- if (position === 0 || position === s.maxTranslate()) return;
- }
- if (s.params.autoplay) s.stopAutoplay();
-
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- return false;
-}
-s.disableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.off(s.mousewheel.event, handleMousewheel);
- return true;
-};
-
-s.enableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- s.container.on(s.mousewheel.event, handleMousewheel);
- return true;
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/parallax.js b/dashboard-ui/bower_components/Swiper/src/js/parallax.js
deleted file mode 100644
index 78ad997154..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/parallax.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/*=========================
- 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);
- });
- }
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/plugins.js b/dashboard-ui/bower_components/Swiper/src/js/plugins.js
deleted file mode 100644
index 012b58bb85..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/plugins.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*=========================
- 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]);
- }
- }
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js b/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js
deleted file mode 100644
index a96b3dc158..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js
+++ /dev/null
@@ -1,181 +0,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();
- }
- },
- enableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).on(s.touchEvents.start, sb.dragStart);
- $(target).on(s.touchEvents.move, sb.dragMove);
- $(target).on(s.touchEvents.end, sb.dragEnd);
- },
- disableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).off(s.touchEvents.start, sb.dragStart);
- $(target).off(s.touchEvents.move, sb.dragMove);
- $(target).off(s.touchEvents.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);
- }
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js
deleted file mode 100644
index 9ec3ad5476..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*===========================
-Swiper
-===========================*/
-window.Swiper = function (container, params) {
- if (!(this instanceof Swiper)) return new Swiper(container, params);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js
deleted file mode 100644
index 884f10bb04..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*===========================
-Swiper
-===========================*/
-var Swiper = function (container, params) {
- if (!(this instanceof Swiper)) return new Swiper(container, params);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js
deleted file mode 100644
index ffafa22823..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js
+++ /dev/null
@@ -1,4 +0,0 @@
-
- // Return swiper instance
- return s;
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js
deleted file mode 100644
index 53746a571f..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*==================================================
- Prototype
-====================================================*/
-Swiper.prototype = {
- isSafari: (function () {
- var ua = navigator.userAgent.toLowerCase();
- return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
- })(),
- isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(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)
- },
- /*==================================================
- Devices
- ====================================================*/
- device: (function () {
- var ua = 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)\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);
- })()
- },
- /*==================================================
- Plugins
- ====================================================*/
- plugins: {}
-};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js
deleted file mode 100644
index ccafdf4015..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js
+++ /dev/null
@@ -1,2 +0,0 @@
- return Swiper;
-}));
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js
deleted file mode 100644
index 5f3d75ca38..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js
+++ /dev/null
@@ -1,2 +0,0 @@
- window.Swiper = Swiper;
-})();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js
deleted file mode 100644
index 7dff9f2c8e..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js
+++ /dev/null
@@ -1,17 +0,0 @@
-(function (root, factory) {
- 'use strict';
-
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof exports === 'object') {
- // Node. Does not work with strict CommonJS, but
- // only CommonJS-like environments that support module.exports,
- // like Node.
- module.exports = factory(require('jquery'));
- } else {
- // Browser globals (root is window)
- root.Swiper = factory(root.jQuery);
- }
-}(this, function ($) {
- 'use strict';
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js
deleted file mode 100644
index 3628709ca3..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js
+++ /dev/null
@@ -1,3 +0,0 @@
-(function () {
- 'use strict';
- var $;
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/core.less b/dashboard-ui/bower_components/Swiper/src/less/core.less
deleted file mode 100644
index 88b359c9be..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/core.less
+++ /dev/null
@@ -1,104 +0,0 @@
-.swiper-container {
- margin:0 auto;
- position:relative;
- overflow:hidden;
- /* Fix of Webkit flickering */
- z-index:1;
-}
-.swiper-container-no-flexbox {
- .swiper-slide {
- float: left;
- }
-}
-.swiper-container-vertical > .swiper-wrapper{
- -webkit-box-orient: vertical;
- -moz-box-orient: vertical;
- -ms-flex-direction: column;
- -webkit-flex-direction: column;
- flex-direction: column;
-}
-.swiper-wrapper {
- position:relative;
- width: 100%;
- height: 100%;
- z-index: 1;
- display: -webkit-box;
- display: -moz-box;
- display: -ms-flexbox;
- display: -webkit-flex;
- display: flex;
-
- -webkit-transition-property:-webkit-transform;
- -moz-transition-property:-moz-transform;
- -o-transition-property:-o-transform;
- -ms-transition-property:-ms-transform;
- transition-property:transform;
-
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-.swiper-container-android .swiper-slide, .swiper-wrapper {
- -webkit-transform:translate3d(0px,0,0);
- -moz-transform:translate3d(0px,0,0);
- -o-transform:translate(0px,0px);
- -ms-transform:translate3d(0px,0,0);
- transform:translate3d(0px,0,0);
-}
-.swiper-container-multirow > .swiper-wrapper {
- -webkit-box-lines: multiple;
- -moz-box-lines: multiple;
- -ms-flex-wrap: wrap;
- -webkit-flex-wrap: wrap;
- flex-wrap: wrap;
-}
-.swiper-container-free-mode > .swiper-wrapper {
- -webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
- -o-transition-timing-function: ease-out;
- transition-timing-function: ease-out;
- margin: 0 auto;
-}
-.swiper-slide {
- -webkit-flex-shrink: 0;
- -ms-flex: 0 0 auto;
- flex-shrink: 0;
- width: 100%;
- height: 100%;
- position: relative;
-}
-/* Auto Height */
-.swiper-container-autoheight, .swiper-container-autoheight .swiper-slide {
- height: auto;
-}
-.swiper-container-autoheight .swiper-wrapper {
- -webkit-box-align: start;
- -ms-flex-align: start;
- -webkit-align-items: flex-start;
- align-items: flex-start;
- -webkit-transition-property: -webkit-transform, height;
- -moz-transition-property: -moz-transform;
- -o-transition-property: -o-transform;
- -ms-transition-property: -ms-transform;
- transition-property: transform, height;
-}
-/* a11y */
-.swiper-container .swiper-notification {
- position: absolute;
- left: 0;
- top: 0;
- pointer-events: none;
- opacity: 0;
- z-index: -1000;
-}
-
-/* IE10 Windows Phone 8 Fixes */
-.swiper-wp8-horizontal {
- -ms-touch-action: pan-y;
- touch-action: pan-y;
-}
-.swiper-wp8-vertical {
- -ms-touch-action: pan-x;
- touch-action: pan-x;
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/effects.less b/dashboard-ui/bower_components/Swiper/src/less/effects.less
deleted file mode 100644
index dcc7c7c9db..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/effects.less
+++ /dev/null
@@ -1,142 +0,0 @@
-/* 3D Container */
-.swiper-container-3d {
- -webkit-perspective: 1200px;
- -moz-perspective: 1200px;
- -o-perspective: 1200px;
- perspective: 1200px;
- .swiper-wrapper, .swiper-slide, .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-cube-shadow {
- .preserve3d();
- }
- .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- pointer-events: none;
- z-index: 10;
- }
- .swiper-slide-shadow-left {
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0))); /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(right, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(right, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(right, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Opera 11.10-12.00 */
- background-image: linear-gradient(to left, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 16+, IE10, Opera 12.50+ */
- }
- .swiper-slide-shadow-right {
- background-image: -webkit-gradient(linear, right top, left top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0))); /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(left, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(left, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Opera 11.10-12.00 */
- background-image: linear-gradient(to right, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 16+, IE10, Opera 12.50+ */
- }
- .swiper-slide-shadow-top {
- background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0))); /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Opera 11.10-12.00 */
- background-image: linear-gradient(to top, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 16+, IE10, Opera 12.50+ */
- }
- .swiper-slide-shadow-bottom {
- background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0))); /* Safari 4+, Chrome */
- background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Chrome 10+, Safari 5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 3.6-15 */
- background-image: -o-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Opera 11.10-12.00 */
- background-image: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0)); /* Firefox 16+, IE10, Opera 12.50+ */
- }
-}
-/* Coverflow */
-.swiper-container-coverflow, .swiper-container-flip {
- .swiper-wrapper {
- /* Windows 8 IE 10 fix */
- -ms-perspective:1200px;
- }
-}
-/* Cube + Flip */
-.swiper-container-cube, .swiper-container-flip {
- overflow: visible;
- .swiper-slide {
- pointer-events: none;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
- z-index: 1;
- .swiper-slide {
- pointer-events: none;
- }
- }
- .swiper-slide-active {
- &, & .swiper-slide-active {
- pointer-events: auto;
- }
- }
- .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
- z-index: 0;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
- }
-}
-/* Cube */
-.swiper-container-cube {
- .swiper-slide {
- visibility: hidden;
- -webkit-transform-origin: 0 0;
- -moz-transform-origin: 0 0;
- -ms-transform-origin: 0 0;
- transform-origin: 0 0;
- width: 100%;
- height: 100%;
- }
- &.swiper-container-rtl .swiper-slide{
- -webkit-transform-origin: 100% 0;
- -moz-transform-origin: 100% 0;
- -ms-transform-origin: 100% 0;
- transform-origin: 100% 0;
- }
- .swiper-slide-active, .swiper-slide-next, .swiper-slide-prev, .swiper-slide-next + .swiper-slide {
- pointer-events: auto;
- visibility: visible;
- }
- .swiper-cube-shadow {
- position: absolute;
- left: 0;
- bottom: 0px;
- width: 100%;
- height: 100%;
- background: #000;
- opacity: 0.6;
- -webkit-filter: blur(50px);
- filter: blur(50px);
- z-index: 0;
- }
-}
-/* Fade */
-.swiper-container-fade {
- &.swiper-container-free-mode {
- .swiper-slide {
- -webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
- -o-transition-timing-function: ease-out;
- transition-timing-function: ease-out;
- }
- }
- .swiper-slide {
- pointer-events: none;
- -webkit-transition-property: opacity;
- -moz-transition-property: opacity;
- -o-transition-property: opacity;
- transition-property: opacity;
- .swiper-slide {
- pointer-events: none;
- }
- }
- .swiper-slide-active {
- &, & .swiper-slide-active {
- pointer-events: auto;
- }
- }
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/mixins.less b/dashboard-ui/bower_components/Swiper/src/less/mixins.less
deleted file mode 100644
index c0e1aa339b..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/mixins.less
+++ /dev/null
@@ -1,10 +0,0 @@
-.preserve3d() {
- -webkit-transform-style: preserve-3d;
- -moz-transform-style: preserve-3d;
- -ms-transform-style: preserve-3d;
- transform-style: preserve-3d;
-}
-.encoded-svg-background(@svg) {
- @url: `encodeURIComponent(@{svg})`;
- background-image: url("data:image/svg+xml;charset=utf-8,@{url}");
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less b/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less
deleted file mode 100644
index 00f185f625..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less
+++ /dev/null
@@ -1,143 +0,0 @@
-/* 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-disabled {
- opacity: 0.35;
- cursor: auto;
- pointer-events: none;
- }
-}
-.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
- .encoded-svg-background("");
- left: 10px;
- right: auto;
-}
-.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
- .encoded-svg-background("");
- right: 10px;
- left: auto;
-}
-
-/* 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-hidden {
- opacity: 0;
- }
-}
-/* Common Styles */
-.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets{
- bottom: 10px;
- left: 0;
- width: 100%;
-}
-/* Bullets */
-.swiper-pagination-bullet {
- width: 8px;
- height: 8px;
- display: inline-block;
- border-radius: 100%;
- background: #000;
- opacity: 0.2;
- button& {
- border: none;
- margin: 0;
- padding: 0;
- box-shadow: none;
- -moz-appearance: none;
- -ms-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- }
- .swiper-pagination-clickable & {
- 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);
- -moz-transform:translate3d(0px,-50%,0);
- -o-transform:translate(0px,-50%);
- -ms-transform:translate3d(0px,-50%,0);
- transform:translate3d(0px,-50%,0);
- .swiper-pagination-bullet {
- margin: 5px 0;
- display: block;
- }
- }
-}
-.swiper-container-horizontal {
- > .swiper-pagination-bullets {
- .swiper-pagination-bullet {
- margin: 0 5px;
- }
- }
-}
-/* Progress */
-.swiper-pagination-progress {
- background: rgba(0,0,0,0.25);
- position: absolute;
- .swiper-pagination-progressbar {
- background: #007aff;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- -webkit-transform: scale(0);
- -ms-transform: scale(0);
- -o-transform: scale(0);
- transform: scale(0);
- -webkit-transform-origin: left top;
- -moz-transform-origin: left top;
- -ms-transform-origin: left top;
- -o-transform-origin: left top;
- transform-origin: left top;
- }
- .swiper-container-rtl & .swiper-pagination-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 > & {
- width: 100%;
- height: 4px;
- left: 0;
- top: 0;
- }
- .swiper-container-vertical > & {
- width: 4px;
- height: 100%;
- left: 0;
- top: 0;
- }
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/navigation.less b/dashboard-ui/bower_components/Swiper/src/less/navigation.less
deleted file mode 100644
index 39cea89f46..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/navigation.less
+++ /dev/null
@@ -1,174 +0,0 @@
-/* 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-disabled {
- opacity: 0.35;
- cursor: auto;
- pointer-events: none;
- }
-}
-.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
- .encoded-svg-background("");
- left: 10px;
- right: auto;
- &.swiper-button-black {
- .encoded-svg-background("");
- }
- &.swiper-button-white {
- .encoded-svg-background("");
- }
-}
-.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
- .encoded-svg-background("");
- right: 10px;
- left: auto;
- &.swiper-button-black {
- .encoded-svg-background("");
- }
- &.swiper-button-white {
- .encoded-svg-background("");
- }
-}
-/* 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-hidden {
- opacity: 0;
- }
-}
-/* Common Styles */
-.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets{
- bottom: 10px;
- left: 0;
- width: 100%;
-}
-/* Bullets */
-.swiper-pagination-bullet {
- width: 8px;
- height: 8px;
- display: inline-block;
- border-radius: 100%;
- background: #000;
- opacity: 0.2;
- button& {
- border: none;
- margin: 0;
- padding: 0;
- box-shadow: none;
- -moz-appearance: none;
- -ms-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- }
- .swiper-pagination-clickable & {
- cursor: pointer;
- }
- .swiper-pagination-white & {
- background: #fff;
- }
-}
-.swiper-pagination-bullet-active {
- opacity: 1;
- background: #007aff;
- .swiper-pagination-white & {
- background: #fff;
- }
- .swiper-pagination-black & {
- 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-pagination-bullet {
- margin: 5px 0;
- display: block;
- }
- }
-}
-.swiper-container-horizontal {
- > .swiper-pagination-bullets {
- .swiper-pagination-bullet {
- margin: 0 5px;
- }
- }
-}
-/* Progress */
-.swiper-pagination-progress {
- background: rgba(0,0,0,0.25);
- position: absolute;
- .swiper-pagination-progressbar {
- background: #007aff;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- -webkit-transform: scale(0);
- -ms-transform: scale(0);
- -o-transform: scale(0);
- transform: scale(0);
- -webkit-transform-origin: left top;
- -moz-transform-origin: left top;
- -ms-transform-origin: left top;
- -o-transform-origin: left top;
- transform-origin: left top;
- }
- .swiper-container-rtl & .swiper-pagination-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 > & {
- width: 100%;
- height: 4px;
- left: 0;
- top: 0;
- }
- .swiper-container-vertical > & {
- width: 4px;
- height: 100%;
- left: 0;
- top: 0;
- }
- &.swiper-pagination-white {
- background: rgba(255,255,255,0.5);
- .swiper-pagination-progressbar {
- background: #fff;
- }
- }
- &.swiper-pagination-black {
- .swiper-pagination-progressbar {
- background: #000;
- }
- }
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less b/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less
deleted file mode 100644
index 1b422e9e39..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Preloader */
-.swiper-slide .preloader {
- width: 42px;
- height: 42px;
- position: absolute;
- left: 50%;
- top: 50%;
- margin-left: -21px;
- margin-top: -21px;
- z-index: 10;
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/preloader.less b/dashboard-ui/bower_components/Swiper/src/less/preloader.less
deleted file mode 100644
index b15f8efc59..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/preloader.less
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Preloader */
-.swiper-lazy-preloader {
- width: 42px;
- height: 42px;
- position: absolute;
- left: 50%;
- top: 50%;
- margin-left: -21px;
- margin-top: -21px;
- z-index: 10;
- -webkit-transform-origin: 50%;
- -moz-transform-origin: 50%;
- transform-origin: 50%;
- -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
- -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
- animation: swiper-preloader-spin 1s steps(12, end) infinite;
-}
-.swiper-lazy-preloader:after {
- display: block;
- content: "";
- width: 100%;
- height: 100%;
- .encoded-svg-background("");
- background-position: 50%;
- -webkit-background-size: 100%;
- background-size: 100%;
- background-repeat: no-repeat;
-
-}
-.swiper-lazy-preloader-white:after {
- .encoded-svg-background("");
-}
-@-webkit-keyframes swiper-preloader-spin {
- 100% {
- -webkit-transform: rotate(360deg);
- }
-}
-@keyframes swiper-preloader-spin {
- 100% {
- transform: rotate(360deg);
- }
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less b/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less
deleted file mode 100644
index 624f1dfd86..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Scrollbar */
-.swiper-scrollbar {
- border-radius: 10px;
- position: relative;
- -ms-touch-action: none;
- background: rgba(0,0,0,0.1);
- .swiper-container-horizontal > & {
- position: absolute;
- left: 1%;
- bottom: 3px;
- z-index: 50;
- height: 5px;
- width: 98%;
- }
- .swiper-container-vertical > & {
- position: absolute;
- right: 3px;
- top: 1%;
- z-index: 50;
- width: 5px;
- height: 98%;
- }
-}
-.swiper-scrollbar-drag {
- height: 100%;
- width: 100%;
- position: relative;
- background: rgba(0,0,0,0.5);
- border-radius: 10px;
- left: 0;
- top: 0;
-}
-.swiper-scrollbar-cursor-drag {
- cursor: move;
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/swiper.less b/dashboard-ui/bower_components/Swiper/src/less/swiper.less
deleted file mode 100644
index d8ec9136e9..0000000000
--- a/dashboard-ui/bower_components/Swiper/src/less/swiper.less
+++ /dev/null
@@ -1,6 +0,0 @@
-@import url('mixins.less');
-@import url('core.less');
-@import url('navigation.less');
-@import url('effects.less');
-@import url('scrollbar.less');
-@import url('preloader.less');
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/web-animations-js/.bower.json b/dashboard-ui/bower_components/web-animations-js/.bower.json
index 968e817d6a..dd39e422ae 100644
--- a/dashboard-ui/bower_components/web-animations-js/.bower.json
+++ b/dashboard-ui/bower_components/web-animations-js/.bower.json
@@ -35,8 +35,7 @@
"tag": "2.2.1",
"commit": "45d8e40300e82ff02ccfbbc78c89500de0f5616f"
},
- "_source": "https://github.com/web-animations/web-animations-js.git",
- "_target": "^2.2.1",
- "_originalSource": "web-animations-js",
- "_direct": true
+ "_source": "git://github.com/web-animations/web-animations-js.git",
+ "_target": "^2.2.0",
+ "_originalSource": "web-animations/web-animations-js"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/web-animations-js/web-animations-next-lite.min.js.map b/dashboard-ui/bower_components/web-animations-js/web-animations-next-lite.min.js.map
deleted file mode 100644
index 0352ea275c..0000000000
--- a/dashboard-ui/bower_components/web-animations-js/web-animations-next-lite.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/keyframe-interpolations.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js","src/timeline.js","src/web-animations-next-animation.js","src/keyframe-effect-constructor.js","src/effect-callback.js","src/group-constructors.js"],"names":["webAnimationsShared","webAnimations1","webAnimationsNext","webAnimationsTesting","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","undefined","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","toTimingFunction","easing","styleForCleaning","document","createElement","style","animationTimingFunction","validatedEasing","TypeError","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","preset","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","delay","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateScaledActiveTime","activeTime","startOffset","calculateIterationTime","iterationDuration","scaledActiveTime","Infinity","iterationStart","calculateCurrentIteration","iterationTime","floor","calculateTransformedTime","currentIteration","currentIterationIsOdd","currentDirectionIsForwards","direction","directedTime","timeFraction","calculateTimeFraction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","endDelay","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","code","INVALID_MODIFICATION_ERR","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","rotate","makePropertySpecificKeyframeGroups","rotate3d","propertySpecificKeyframeGroups","scaley","_","scalez","propertySpecificKeyframe","cast","groupName","group","scope","concat","candidate","makeInterpolations","interpolations","alias","startTime","endTime","startValue","animate","oncancel","now","performance","AnimationCancelEvent","target","currentTime","timelineTime","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","originalElementAnimate","Element","options","animation","call","_cancelHandlers","originalCancel","cancel","event","handlers","setTimeout","handler","originalAddEventListener","addEventListener","originalRemoveEventListener","removeEventListener","index","splice","element","documentElement","animated","originalOpacity","getComputedStyle","getPropertyValue","testOpacity","opacity","error","webAnimationsNextTick","t","timeline","_discardAnimations","_animations","ticking","requestAnimationFrame","originalRequestAnimationFrame","_updateAnimationsPromises","AnimationTimeline","getAnimations","animationsWithPromises","_updatePromises","playState","_play","Animation","restartWebAnimationsNextTick","play","remove","defineProperty","configurable","get","e","id","_id","_timeline","_sequenceNumber","sequenceNumber","_holdTime","_paused","_isGroup","_childAnimations","_callback","_oldPlayState","oldPlayState","newPlayState","_readyPromise","_rejectReadyPromise","_resolveReadyPromise","_finishedPromise","_rejectFinishedPromise","_resolveFinishedPromise","oldPlaybackRate","oldPaused","oldStartTime","oldCurrentTime","hadUnderlying","_wrapper","KeyframeEffect","newUnderlyingAnimationForKeyframeEffect","bindAnimationForKeyframeEffect","SequenceEffect","GroupEffect","newUnderlyingAnimationForGroup","bindAnimationForGroup","_onsample","bindAnimationForCustomEffect","pause","_updateChildren","childAnimation","_arrangeChildren","groupChildDuration","bind","_setExternalAnimation","children","_constructChildAnimations","_removeChildAnimations","child","finished","Promise","resolve","reject","ABORT_ERR","ready","onfinish","v","sign","MAX_VALUE","_register","_forEachChild","awaitStartTime","time","finish","reverse","wrapped","pop","KeyframeList","_frames","updatePendingGroups","updated","pendingGroups","shift","disassociate","removeMulti","effects","oldParents","_parent","_rebuild","_normalizedKeyframes","_keyframes","getFrames","onsample","callback","parent","nullTarget","keyframeEffect","groupAnimation","originalGetComputedStyle","enumerable","arguments","register","_registered","callbacks","tick","updating","left","right","effectFunction","isKeyframeEffect","last","node","constructor","_reparent","_isAncestor","newChildren","_putChild","args","isAppend","HIERARCHY_REQUEST_ERR","unshift","append","prepend","firstChild","lastChild","clonedTiming","clonedChildren","create","total","max","underlyingAnimation","ticker","tf","underlyingEffect","exports"],"mappings":"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","file":"web-animations-next-lite.min.js"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/web-animations-js/web-animations-next.min.js.map b/dashboard-ui/bower_components/web-animations-js/web-animations-next.min.js.map
deleted file mode 100644
index c478544dce..0000000000
--- a/dashboard-ui/bower_components/web-animations-js/web-animations-next.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/keyframe-interpolations.js","src/property-interpolation.js","src/keyframe-effect.js","src/apply-preserving-inline-style.js","src/element-animatable.js","src/interpolation.js","src/matrix-interpolation.js","src/animation.js","src/tick.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js","src/timeline.js","src/web-animations-next-animation.js","src/keyframe-effect-constructor.js","src/effect-callback.js","src/group-constructors.js"],"names":["webAnimationsShared","webAnimations1","webAnimationsNext","webAnimationsTesting","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","undefined","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","toTimingFunction","easing","styleForCleaning","document","createElement","style","animationTimingFunction","validatedEasing","TypeError","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","preset","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","delay","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateScaledActiveTime","activeTime","startOffset","calculateIterationTime","iterationDuration","scaledActiveTime","Infinity","iterationStart","calculateCurrentIteration","iterationTime","floor","calculateTransformedTime","currentIteration","currentIterationIsOdd","currentDirectionIsForwards","direction","directedTime","timeFraction","calculateTimeFraction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","endDelay","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","code","INVALID_MODIFICATION_ERR","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","scope","r","makePropertySpecificKeyframeGroups","leftCopy","propertySpecificKeyframeGroups","bind","addPropertiesHandler","parseShadowList","mergeShadowList","propertySpecificKeyframe","groupName","group","mergeFlex","left","right","round","makeInterpolations","interpolations","startTime","endTime","startValue","endValue","propertyInterpolation","leftInterpolation","rightInterpolation","convertEffectInput","trim","context","target","fraction","interpolation","fillStyle","offsetFraction","localDuration","scaledLocalTime","clamp","join","canvas","toCamelCase","parseColor","toUpperCase","addPropertyHandler","merger","propertyHandlers","parser","properties","ucProperty","test","matchedUnits","string","replace","unitRegExp","initialValues","handlers","parsedRight","parsedLeft","interpolationArgs","interp","Interpolation","t","taggedUnitRegExp","unit","bool","backgroundColor","nonNegative","backgroundPosition","units","borderBottomColor","borderBottomLeftRadius","borderBottomRightRadius","borderLeftColor","borderRightColor","borderSpacing","borderTopColor","borderTopLeftRadius","borderTopRightRadius","numberToString","clip","color","height","marginBottom","marginLeft","marginRight","lengthUnits","marginTop","parseLengthOrPercent","maxWidth","minHeight","minWidth","opacity","parseAngle","outlineColor","outlineOffset","paddingBottom","paddingLeft","transform","verticalAlign","visibility","width","wordSpacing","consumeLength","zIndex","consumeParenthesised","consumeSizePairList","EffectTime","effectTime","_totalDuration","_isCurrent","KeyframeEffect","keyframeEffect","_update","_clear","_hasSameTarget","id","NullEffect","clear","nullEffect","configureProperty","object","descriptor","enumerable","configurable","defineProperty","AnimatedCSSStyleDeclaration","element","_surrogateStyle","ignore","consumeToken","_style","_length","_isAnimatedProperty","_updateIndices","ensureStyleIsPatched","_webAnimationsPatchedStyle","merged","animatedStyle","mergeDimensions","get","mergeWrappedNestedRepeated","_","styleAttributes","cssText","parentRule","styleMethods","getPropertyCSSValue","getPropertyPriority","getPropertyValue","item","removeProperty","setProperty","styleMutatingMethods","text","transformRegExp","isAffectedProperty","functionName","argTypes","s","T","parsedArgs","index","method","modifiesStyle","list","arguments","documentElement","matrixModulesLoaded","set","_set","propertyName","Element","animate","options","mergeMatrices","timeline","interpolate","leftArgs","to","transformFunctions","leftType","leftResult","convertToString","typeTo2D","max","rightArgs","quat","product","dot","fromQ","theta","sqrt","cos","toQ","w","composeMatrix","leftFunctionData","multiply","leftArgsCopy","k","mergeNumbers","merge","rightArgsCopy","translate","skew","perspective","matrix","types","stringConversions","tmp","rightResult","rotMatrix","stringifiedArgs","args","arg","y","z","deg","temp","rotate","rotatez","scale","cast","scaley","scale3d","is2D","concat","translatey","sequenceNumber","AnimationEvent","currentTime","timelineTime","out","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","now","Animation","_id","_sequenceNumber","_currentTime","dimension","_paused","_inTimeline","_finishedFlag","onfinish","consumeOffset","_finishHandlers","_idle","consumeLengthOrPercent","_currentTimePending","_ensureAlive","_inEffect","_animations","_tickCurrentTime","newTime","ignoreLimit","_isFinished","position","restart","_startTime","_timeline","bottomOrRight","invalidateEffects","token","center","oldCurrentTime","mergeNestedRepeated","playState","play","parseOrigin","consumePosition","mergeOffsetList","circle","consumeList","pause","finish","ellipse","cancel","reverse","polygon","addEventListener","handler","_fireEvents","baseTime","event","setTimeout","mergeNonNegativeSizePair","call","_tick","isAnimationFrame","_needsTick","running","mergeSizePair","processRafCallbacks","processing","rafCallbacks","candidate","entry","applyPendingEffects","compareAnimations","rightAnimation","leftAnimation","InternalTimeline","performance","oncancel","AnimationCancelEvent","originalElementAnimate","animation","_cancelHandlers","originalCancel","originalAddEventListener","originalRemoveEventListener","removeEventListener","splice","animated","originalOpacity","getComputedStyle","testOpacity","error","webAnimationsNextTick","_discardAnimations","ticking","requestAnimationFrame","originalRequestAnimationFrame","_updateAnimationsPromises","AnimationTimeline","getAnimations","animationsWithPromises","_updatePromises","_play","restartWebAnimationsNextTick","remove","e","_holdTime","_isGroup","_childAnimations","_callback","_oldPlayState","oldPlayState","newPlayState","_readyPromise","_rejectReadyPromise","_resolveReadyPromise","_finishedPromise","_rejectFinishedPromise","_resolveFinishedPromise","oldPlaybackRate","oldPaused","oldStartTime","hadUnderlying","_wrapper","newUnderlyingAnimationForKeyframeEffect","bindAnimationForKeyframeEffect","SequenceEffect","GroupEffect","newUnderlyingAnimationForGroup","bindAnimationForGroup","_onsample","bindAnimationForCustomEffect","_updateChildren","childAnimation","_arrangeChildren","groupChildDuration","_setExternalAnimation","children","_constructChildAnimations","_removeChildAnimations","child","finished","Promise","resolve","reject","ABORT_ERR","ready","v","sign","MAX_VALUE","_register","_forEachChild","awaitStartTime","time","wrapped","pop","KeyframeList","_frames","updatePendingGroups","updated","pendingGroups","shift","disassociate","removeMulti","effects","oldParents","_parent","_rebuild","_normalizedKeyframes","_keyframes","getFrames","onsample","callback","parent","nullTarget","groupAnimation","originalGetComputedStyle","register","_registered","callbacks","tick","updating","effectFunction","isKeyframeEffect","last","node","constructor","_reparent","_isAncestor","newChildren","_putChild","isAppend","HIERARCHY_REQUEST_ERR","unshift","append","prepend","firstChild","lastChild","clonedTiming","clonedChildren","create","total","underlyingAnimation","ticker","tf","underlyingEffect","exports"],"mappings":"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","file":"web-animations-next.min.js"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/web-animations-js/web-animations.min.js.map b/dashboard-ui/bower_components/web-animations-js/web-animations.min.js.map
deleted file mode 100644
index 8c6d3075fe..0000000000
--- a/dashboard-ui/bower_components/web-animations-js/web-animations.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/keyframe-interpolations.js","src/property-interpolation.js","src/keyframe-effect.js","src/apply-preserving-inline-style.js","src/element-animatable.js","src/interpolation.js","src/matrix-interpolation.js","src/animation.js","src/tick.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js"],"names":["webAnimationsShared","webAnimations1","webAnimationsNext","webAnimationsTesting","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","undefined","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","toTimingFunction","easing","styleForCleaning","document","createElement","style","animationTimingFunction","validatedEasing","TypeError","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","preset","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","delay","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateScaledActiveTime","activeTime","startOffset","calculateIterationTime","iterationDuration","scaledActiveTime","Infinity","iterationStart","calculateCurrentIteration","iterationTime","floor","calculateTransformedTime","currentIteration","currentIterationIsOdd","currentDirectionIsForwards","direction","directedTime","timeFraction","calculateTimeFraction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","endDelay","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","code","INVALID_MODIFICATION_ERR","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","scope","r","makePropertySpecificKeyframeGroups","leftCopy","propertySpecificKeyframeGroups","bind","addPropertiesHandler","parseShadowList","mergeShadowList","propertySpecificKeyframe","groupName","group","mergeFlex","left","right","round","makeInterpolations","interpolations","startTime","endTime","startValue","endValue","propertyInterpolation","leftInterpolation","rightInterpolation","convertEffectInput","trim","context","target","fraction","interpolation","fillStyle","offsetFraction","localDuration","scaledLocalTime","clamp","join","canvas","toCamelCase","parseColor","toUpperCase","addPropertyHandler","merger","propertyHandlers","parser","properties","ucProperty","test","matchedUnits","string","replace","unitRegExp","initialValues","handlers","parsedRight","parsedLeft","interpolationArgs","interp","Interpolation","t","taggedUnitRegExp","unit","bool","backgroundColor","nonNegative","backgroundPosition","units","borderBottomColor","borderBottomLeftRadius","borderBottomRightRadius","borderLeftColor","borderRightColor","borderSpacing","borderTopColor","borderTopLeftRadius","borderTopRightRadius","numberToString","clip","color","height","marginBottom","marginLeft","marginRight","lengthUnits","marginTop","parseLengthOrPercent","maxWidth","minHeight","minWidth","opacity","parseAngle","outlineColor","outlineOffset","paddingBottom","paddingLeft","transform","verticalAlign","visibility","width","wordSpacing","consumeLength","zIndex","consumeParenthesised","consumeSizePairList","EffectTime","effectTime","_totalDuration","_isCurrent","KeyframeEffect","keyframeEffect","_update","_clear","_hasSameTarget","id","NullEffect","clear","nullEffect","configureProperty","object","descriptor","enumerable","configurable","defineProperty","AnimatedCSSStyleDeclaration","element","_surrogateStyle","ignore","consumeToken","_style","_length","_isAnimatedProperty","_updateIndices","ensureStyleIsPatched","_webAnimationsPatchedStyle","merged","animatedStyle","mergeDimensions","get","mergeWrappedNestedRepeated","_","styleAttributes","cssText","parentRule","styleMethods","getPropertyCSSValue","getPropertyPriority","getPropertyValue","item","removeProperty","setProperty","styleMutatingMethods","text","transformRegExp","isAffectedProperty","functionName","argTypes","s","T","parsedArgs","index","method","modifiesStyle","list","arguments","documentElement","matrixModulesLoaded","set","_set","propertyName","Element","animate","options","mergeMatrices","timeline","interpolate","leftArgs","to","transformFunctions","leftType","leftResult","convertToString","typeTo2D","max","rightArgs","quat","product","dot","fromQ","theta","sqrt","cos","toQ","w","composeMatrix","leftFunctionData","multiply","leftArgsCopy","k","mergeNumbers","merge","rightArgsCopy","translate","skew","perspective","matrix","types","stringConversions","tmp","rightResult","rotMatrix","stringifiedArgs","args","arg","y","z","deg","temp","rotate","rotatez","scale","cast","scaley","scale3d","is2D","concat","translatey","sequenceNumber","AnimationEvent","currentTime","timelineTime","out","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","now","Animation","_id","_sequenceNumber","_currentTime","dimension","_paused","_inTimeline","_finishedFlag","onfinish","consumeOffset","_finishHandlers","_idle","consumeLengthOrPercent","_currentTimePending","_ensureAlive","_inEffect","_animations","_tickCurrentTime","newTime","ignoreLimit","_isFinished","position","restart","_startTime","_timeline","bottomOrRight","invalidateEffects","token","center","oldCurrentTime","mergeNestedRepeated","playState","play","parseOrigin","consumePosition","mergeOffsetList","circle","consumeList","pause","finish","ellipse","cancel","reverse","polygon","addEventListener","handler","_fireEvents","baseTime","event","setTimeout","mergeNonNegativeSizePair","call","_tick","isAnimationFrame","_needsTick","running","mergeSizePair","processRafCallbacks","processing","rafCallbacks","candidate","entry","applyPendingEffects","compareAnimations","rightAnimation","leftAnimation","InternalTimeline","performance","oncancel","AnimationCancelEvent","originalElementAnimate","animation","_cancelHandlers","originalCancel","originalAddEventListener","originalRemoveEventListener","removeEventListener","splice","animated","originalOpacity","getComputedStyle","testOpacity","error","exports"],"mappings":";;;;;;;;;;;;;;CAcA,SAAIA,EAAAA,GAAJ,GAAIA,MACAC,KACAC,KAGEC,EAAuB,MCL7B,SAAUC,EAAQC,GAMhB,QAASC,GAAiBC,GACxB,GAA0B,gBAAfA,GACT,MAAOA,EAET,IAAIC,KACJ,KAAK,GAAIC,KAAKF,GACZC,EAAMC,GAAKF,EAAYE,EAEzB,OAAOD,GAGT,QAASE,KACPC,KAAKC,OAAS,EACdD,KAAKE,UAAY,EACjBF,KAAKG,MAAQ,OACbH,KAAKI,gBAAkB,EACvBJ,KAAKK,YAAc,EACnBL,KAAKM,UAAY,EACjBN,KAAKO,cAAgB,EACrBP,KAAKQ,WAAa,SAClBR,KAAKS,QAAU,SACfT,KAAKU,gBAAkBC,EAGzB,QAASC,KACP,MAAOnB,GAAOoB,aAAa,wBAAyB,aAAc,gDAAA,GA8EpE,QAASC,GAAWlB,EAAamB,EAAUC,GACzC,GAAIC,GAAS,GAAIlB,EA4BjB,OA3BIgB,KACFE,EAAOC,KAAO,OACdD,EAAOE,SAAW,QAEM,gBAAfvB,IAA4BwB,MAAMxB,GAElByB,SAAhBzB,GACT0B,OAAOC,oBAAoB3B,GAAa4B,QAAQ,SAASC,GACvD,GAA6B,QAAzB7B,EAAY6B,GAAqB,CACnC,IAA+B,gBAApBR,GAAOQ,IAAqC,YAAZA,KACL,gBAAzB7B,GAAY6B,IAAyBL,MAAMxB,EAAY6B,KAChE,MAGJ,IAAiB,QAAZA,GAAgE,IAAxCC,EAAMC,QAAQ/B,EAAY6B,IACrD,MAEF,IAAiB,aAAZA,GAA0E,IAA7CG,EAAWD,QAAQ/B,EAAY6B,IAC/D,MAEF,IAAgB,gBAAZA,GAAwD,IAA1B7B,EAAY6B,IAAmBhC,EAAOoB,aAAa,qCAAsC,aAAc,uCACvI,MAEFI,GAAOQ,GAAY7B,EAAY6B,MAlBnCR,EAAOE,SAAWvB,EAsBbqB,EAGT,QAASY,GAAsBjC,GAQ7B,MAP0B,gBAAfA,KAEPA,EADEwB,MAAMxB,IACQuB,SAAU,IAEVA,SAAUvB,IAGvBA,EAGT,QAASkC,GAAqBlC,EAAamB,GAEzC,MADAnB,GAAcH,EAAOoC,sBAAsBjC,GACpCkB,EAAWlB,EAAamB,GAGjC,QAASgB,GAAMC,EAAGC,EAAGC,EAAGC,GACtB,MAAQ,GAAJH,GAASA,EAAI,GAAS,EAAJE,GAASA,EAAI,EAC1BvB,EAEF,SAASyB,GAOZ,QAASC,GAAEL,EAAGC,EAAGnC,GAAK,MAAO,GAAIkC,GAAK,EAAIlC,IAAM,EAAIA,GAAKA,EAAI,EAAImC,GAAK,EAAInC,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EANjG,GAAS,GAALsC,GAAe,GAALA,EACZ,MAAOA,EAGT,KADA,GAAIE,GAAQ,EAAGC,EAAM,IACX,CACR,GAAIC,IAAOF,EAAQC,GAAO,EAEtBE,EAAOJ,EAAEL,EAAGE,EAAGM,EACnB,IAAIE,KAAKC,IAAIP,EAAIK,GAAQ,KACvB,MAAOJ,GAAEJ,EAAGE,EAAGK,EAENJ,GAAPK,EACFH,EAAQE,EAERD,EAAMC,IAUd,QAASI,GAAKC,EAAOC,GACnB,MAAO,UAASV,GACd,GAAIA,GAAK,EACP,MAAO,EAET,IAAIW,GAAW,EAAIF,CAEnB,OADAT,IAAKU,EAAMC,EACJX,EAAIA,EAAIW,GAmBnB,QAASC,GAAiBC,GACnBC,IACHA,EAAmBC,SAASC,cAAc,OAAOC,OAEnDH,EAAiBI,wBAA0B,GAC3CJ,EAAiBI,wBAA0BL,CAC3C,IAAIM,GAAkBL,EAAiBI,uBAEvC,IAAuB,IAAnBC,GAAyB3C,IAC3B,KAAM,IAAI4C,WAAUP,EAAS,mCAG/B,IAAIQ,GAAYC,EAAcC,KAAKJ,EACnC,IAAIE,EACF,MAAO1B,GAAM6B,MAAM5D,KAAMyD,EAAUI,MAAM,GAAGC,IAAIC,QAElD,IAAIC,GAAWC,EAAON,KAAKJ,EAC3B,IAAIS,EACF,MAAOpB,GAAKmB,OAAOC,EAAS,KAAM1B,MAAS4B,EAAOC,OAAUC,EAAQ7B,IAAO8B,GAAKL,EAAS,IAE3F,IAAIM,GAASC,EAAQhB,EACrB,OAAIe,GACKA,EAEF3D,EAGT,QAAS6D,GAAwBvD,GAC/B,MAAOyB,MAAKC,IAAI8B,EAAiBxD,GAAUA,EAAOyD,cAGpD,QAASD,GAAiBxD,GACxB,MAAOA,GAAOE,SAAWF,EAAO0D,WAQlC,QAASC,GAAeC,EAAgBC,EAAW7D,GACjD,MAAiB,OAAb6D,EACKC,EAELD,EAAY7D,EAAO+D,MACdC,EAELH,GAAa7D,EAAO+D,MAAQH,EACvBK,EAEFC,EAGT,QAASC,GAAoBP,EAAgBQ,EAAUP,EAAWQ,EAAON,GACvE,OAAQM,GACN,IAAKL,GACH,MAAgB,aAAZI,GAAuC,QAAZA,EACtB,EACF,IACT,KAAKF,GACH,MAAOL,GAAYE,CACrB,KAAKE,GACH,MAAgB,YAAZG,GAAsC,QAAZA,EACrBR,EACF,IACT,KAAKE,GACH,MAAO,OAIb,QAASQ,GAA0BV,EAAgBW,EAAYC,EAAaxE,GAC1E,OAAQA,EAAOyD,aAAe,EAAIc,EAAaX,EAAiBW,GAAcvE,EAAOyD,aAAee,EAGtG,QAASC,GAAuBC,EAAmBlB,EAAkBmB,EAAkBH,EAAaxE,GAClG,MAAI2E,KAAqBC,EAAAA,GAAYD,MAAsBC,EAAAA,IAAaD,EAAmBH,GAAehB,GAAoBxD,EAAO0D,aAAgB1D,EAAO0D,WAAa1D,EAAO6E,gBAAkB,GAAK,EAC9LH,EAGFC,EAAmBD,EAG5B,QAASI,GAA0BJ,EAAmBK,EAAeJ,EAAkB3E,GACrF,MAAyB,KAArB2E,EACK,EAELI,GAAiBL,EACZ1E,EAAO6E,eAAiB7E,EAAO0D,WAAa,EAE9CjC,KAAKuD,MAAML,EAAmBD,GAGvC,QAASO,GAAyBC,EAAkBR,EAAmBK,EAAe/E,GACpF,GAAImF,GAAwBD,EAAmB,GAAK,EAChDE,EAAiD,UAApBpF,EAAOqF,WAAyBrF,EAAOqF,YAAcF,EAAwB,oBAAsB,aAChIG,EAAeF,EAA6BL,EAAgBL,EAAoBK,EAChFQ,EAAeD,EAAeZ,CAClC,OAAOA,GAAoB1E,EAAOP,gBAAgB8F,GAGpD,QAASC,GAAsB5B,EAAgBC,EAAW7D,GACxD,GAAIqE,GAAQV,EAAeC,EAAgBC,EAAW7D,GAClDuE,EAAaJ,EAAoBP,EAAgB5D,EAAOC,KAAM4D,EAAWQ,EAAOrE,EAAO+D,MAC3F,IAAmB,OAAfQ,EACF,MAAO,KACT,IAAuB,IAAnBX,EACF,MAAOS,KAAUL,EAAc,EAAI,CACrC,IAAIQ,GAAcxE,EAAO6E,eAAiB7E,EAAOE,SAC7CyE,EAAmBL,EAA0BV,EAAgBW,EAAYC,EAAaxE,GACtF+E,EAAgBN,EAAuBzE,EAAOE,SAAUsD,EAAiBxD,GAAS2E,EAAkBH,EAAaxE,GACjHkF,EAAmBJ,EAA0B9E,EAAOE,SAAU6E,EAAeJ,EAAkB3E,EACnG,OAAOiF,GAAyBC,EAAkBlF,EAAOE,SAAU6E,EAAe/E,GAAUA,EAAOE,SAjUrG,GAAIO,GAAQ,+BAA+BgF,MAAM,KAC7C9E,EAAa,sCAAsC8E,MAAM,KACzD/F,EAAS,SAASyB,GAAK,MAAOA,GA8BlCrC,GAAsB4G,WACpBC,WAAY,SAASC,EAAQC,GAC3B9G,KAAK,IAAM6G,GAAUC,EACjB9G,KAAK+G,UACP/G,KAAK+G,QAAQC,aAAaH,GAAUC,EACpC9G,KAAK+G,QAAQE,QAAUxH,EAAOqC,qBAAqB9B,KAAK+G,QAAQC,cAChEhH,KAAK+G,QAAQlC,eAAiBpF,EAAO+E,wBAAwBxE,KAAK+G,QAAQE,SACtEjH,KAAK+G,QAAQG,YACflH,KAAK+G,QAAQG,WAAWC,gCAI9BzC,GAAIA,gBACF,MAAO1E,MAAKO,eAEdyE,GAAIA,OAAM8B,GACR9G,KAAK4G,WAAW,QAASE,IAE3B9B,GAAIA,SACF,MAAOhF,MAAKC,QAEdmH,GAAIA,UAASN,GACX9G,KAAK4G,WAAW,WAAYE,IAE9BM,GAAIA,YACF,MAAOpH,MAAKE,WAEdgB,GAAIA,MAAK4F,GACP9G,KAAK4G,WAAW,OAAQE,IAE1B5F,GAAIA,QACF,MAAOlB,MAAKG,OAEd2F,GAAIA,gBAAegB,GACjB,IAAK1F,MAAM0F,IAAkB,EAARA,IAAclG,IACjC,KAAM,IAAI4C,WAAU,2DAA6DvC,OAAO6E,eAE1F9F,MAAK4G,WAAW,iBAAkBE,IAEpChB,GAAIA,kBACF,MAAO9F,MAAKI,iBAEde,GAAIA,UAAS2F,GACX,GAAa,QAATA,IAAoB1F,MAAM0F,IAAkB,EAARA,IAAclG,IACpD,KAAM,IAAI4C,WAAU,oDAAsDsD,EAE5E9G,MAAK4G,WAAW,WAAYE,IAE9B3F,GAAIA,YACF,MAAOnB,MAAKM,WAEdgG,GAAIA,WAAUQ,GACZ9G,KAAK4G,WAAW,YAAaE,IAE/BR,GAAIA,aACF,MAAOtG,MAAKQ,YAEdyC,GAAIA,QAAO6D,GACT9G,KAAKU,gBAAkBsC,EAAiB8D,GACxC9G,KAAK4G,WAAW,SAAUE,IAE5B7D,GAAIA,UACF,MAAOjD,MAAKS,SAEdkE,GAAIA,YAAWmC,GACb,IAAK1F,MAAM0F,IAAkB,EAARA,IAAclG,IACjC,KAAM,IAAI4C,WAAU,8CAAgDsD,EAEtE9G,MAAK4G,WAAW,aAAcE,IAEhCnC,GAAIA,cACF,MAAO3E,MAAKK,aA6EhB,IAAI6D,GAAQ,EACRE,EAAS,GACTC,EAAM,EAaNE,GACF8C,KAAQtF,EAAM,IAAM,GAAK,IAAM,GAC/BuF,UAAWvF,EAAM,IAAM,EAAG,EAAG,GAC7BwF,WAAYxF,EAAM,EAAG,EAAG,IAAM,GAC9ByF,cAAezF,EAAM,IAAM,EAAG,IAAM,GACpC0F,aAAc7E,EAAK,EAAGsB,GACtBwD,cAAe9E,EAAK,EAAGwB,GACvBuD,WAAY/E,EAAK,EAAGyB,IAGlBnB,EAAmB,KACnB0E,EAAe,qCACflE,EAAgB,GAAImE,QAAO,kBAAoBD,EAAe,IAAMA,EAAe,IAAMA,EAAe,IAAMA,EAAe,OAC7H3D,EAAS,gDAqCTc,EAAY,EACZE,EAAc,EACdC,EAAa,EACbC,EAAc,CA4ElB1F,GAAOE,iBAAmBA,EAC1BF,EAAOqB,WAAaA,EACpBrB,EAAOoC,sBAAwBA,EAC/BpC,EAAOqC,qBAAuBA,EAC9BrC,EAAO+E,wBAA0BA,EACjC/E,EAAOgH,sBAAwBA,EAC/BhH,EAAOmF,eAAiBA,EACxBnF,EAAOuD,iBAAmBA,GAkBzB3D,EAAqBG,GC/VxB,SAAUC,EAAQC,GAmIhB,QAASoI,GAAUrG,EAAUqF,GAC3B,MAAIrF,KAAYsG,GACPA,EAAQtG,GAAUqF,IAAUA,EAE9BA,EAIT,QAASkB,GAA4BvG,EAAUqF,EAAOmB,GACpD,GAAIC,GAAiBC,EAAoB1G,EACzC,IAAIyG,EAAgB,CAClBE,EAAsB/E,MAAM5B,GAAYqF,CACxC,KAAK,GAAIuB,KAAKH,GAAgB,CAC5B,GAAII,GAAeJ,EAAeG,GAC9BE,EAAgBH,EAAsB/E,MAAMiF,EAChDL,GAAOK,GAAgBR,EAAUQ,EAAcC,QAGjDN,GAAOxG,GAAYqG,EAAUrG,EAAUqF,GAI3C,QAAS0B,GAAmBC,GAC1B,GAAIC,KAEJ,KAAK,GAAIjH,KAAYgH,GACnB,KAAIhH,KAAa,SAAU,SAAU,cAArC,CAIA,GAAIkH,GAASF,EAAYhH,EACpBmH,OAAMC,QAAQF,KACjBA,GAAUA,GAKZ,KAAK,GAFDG,GACAC,EAAeJ,EAAOK,OACjBX,EAAI,EAAOU,EAAJV,EAAkBA,IAChCS,KAEI,UAAYL,GACdK,EAASG,OAASR,EAAYQ,OACL,GAAhBF,EACTD,EAASG,OAAS,EAElBH,EAASG,OAASZ,GAAKU,EAAe,GAGpC,UAAYN,KACdK,EAAS7F,OAASwF,EAAYxF,QAG5B,aAAewF,KACjBK,EAASI,UAAYT,EAAYS,WAGnCJ,EAASrH,GAAYkH,EAAON,GAE5BK,EAAsBS,KAAKL,GAK/B,MADAJ,GAAsBU,KAAK,SAASpH,EAAGC,GAAK,MAAOD,GAAEiH,OAAShH,EAAEgH,SACzDP,EAGT,QAASW,GAAmBZ,GA+D1B,QAASa,KACP,GAAIN,GAASO,EAAUP,MACa,OAAhCO,EAAUP,EAAS,GAAGC,SACxBM,EAAUP,EAAS,GAAGC,OAAS,GAC7BD,EAAS,GAA4B,MAAvBO,EAAU,GAAGN,SAC7BM,EAAU,GAAGN,OAAS,EAIxB,KAAK,GAFDO,GAAgB,EAChBC,EAAiBF,EAAU,GAAGN,OACzBZ,EAAI,EAAOW,EAAJX,EAAYA,IAAK,CAC/B,GAAIY,GAASM,EAAUlB,GAAGY,MAC1B,IAAc,MAAVA,EAAgB,CAClB,IAAK,GAAIS,GAAI,EAAOrB,EAAImB,EAARE,EAAuBA,IACrCH,EAAUC,EAAgBE,GAAGT,OAASQ,GAAkBR,EAASQ,GAAkBC,GAAKrB,EAAImB,EAC9FA,GAAgBnB,EAChBoB,EAAiBR,IA7EvB,GAAmB,MAAfR,EACF,QAGEkB,QAAOC,QAAUA,OAAOC,UAAYjB,MAAMjC,UAAUmD,MAAQrB,EAAYmB,OAAOC,YAEjFpB,EAAcG,MAAMkB,KAAKrB,IAGtBG,MAAMC,QAAQJ,KACjBA,EAAcD,EAAmBC,GAgCnC,KAAK,GA7BDc,GAAYd,EAAY3E,IAAI,SAASiG,GACvC,GAAIjB,KACJ,KAAK,GAAIjC,KAAUkD,GAAkB,CACnC,GAAIC,GAAcD,EAAiBlD,EACnC,IAAc,UAAVA,GACF,GAAmB,MAAfmD,IACFA,EAAcjG,OAAOiG,IAChBC,SAASD,IACZ,KAAM,IAAIxG,WAAU,yCAEnB,CAAA,GAAc,aAAVqD,EACT,MACEqD,KAAMC,aAAaC,kBACnBC,KAAM,oBACNC,QAAS,mCAGXN,GAAc,GAAKA,EAErBhC,EAA4BnB,EAAQmD,EAAalB,GAInD,MAFuBzH,SAAnByH,EAASG,SACXH,EAASG,OAAS,MACbH,IAGLyB,GAAAA,EAEAd,IAAkB5D,EAAAA,GACbwC,EAAI,EAAGA,EAAIkB,EAAUP,OAAQX,IAAK,CACzC,GAAIY,GAASM,EAAUlB,GAAGY,MAC1B,IAAc,MAAVA,EAAgB,CAClB,GAAaQ,EAATR,EACF,MACEuB,KAAML,aAAaM,yBACnBJ,KAAM,2BACNC,QAAS,uEAGbb,GAAiBR,MAEjBsB,IAAAA,EA8BJ,MA1BAhB,GAAYA,EAAUmB,OAAO,SAAS5B,GACpC,MAAOA,GAASG,QAAU,GAAKH,EAASG,QAAU,IAsB/CsB,GACHjB,IAEKC,EAzRT,GAAIpB,IACFwC,YACE,kBACA,qBACA,iBACA,mBACA,uBACA,mBACA,iBACA,mBAEFC,QACE,iBACA,iBACA,iBACA,mBACA,mBACA,mBACA,oBACA,oBACA,oBACA,kBACA,kBACA,mBAEFC,cACE,oBACA,oBACA,qBAEFC,aACE,iBACA,mBACA,oBACA,mBAEFC,YACE,kBACA,kBACA,mBAEFC,cACE,sBACA,uBACA,0BACA,0BAEFC,aACE,mBACA,mBACA,oBAEFC,WACE,iBACA,iBACA,kBAEFC,aACE,iBACA,mBACA,oBACA,mBAEFC,MACE,WACA,aACA,aAEFC,MACE,aACA,WACA,YACA,cACA,aACA,cAEFC,QACE,YACA,cACA,eACA,cAEFC,SACE,eACA,eACA,gBAEFC,SACE,aACA,eACA,gBACA,gBAIApD,EAAwBjF,SAASsI,gBAAgB,+BAAgC,OAEjFC,GACFC,KAAM,MACNC,OAAQ,MACRC,MAAO,OAGL9D,GACF+D,kBAAmBJ,EACnBK,gBAAiBL,EACjBM,iBAAkBN,EAClBO,eAAgBP,EAChBQ,UACEC,WAAY,MACZC,UAAW,MACXC,MAAS,MACTT,OAAU,OACVU,MAAS,OACTC,UAAW,OACXC,WAAY,QAEdC,YACEC,OAAQ,MACRC,KAAM,OAERC,aAAclB,EACdmB,YACEC,KAAM,2BAERC,WACED,KAAM,+BA8JVrN,GAAO+I,mBAAqBA,EAC5B/I,EAAO4J,mBAAqBA,GAM3BhK,EAAqBG,GCpSxB,SAAUC,GAER,GAAIuN,KAEJvN,GAAOoB,aAAe,SAASoM,EAASC,EAAMC,EAAQC,GAKpD,GAAIC,GAAUD,EAAS,MAAQ,KAC3BE,EAAQ,GAAIC,MACZC,EAAS,GAAID,MAAKL,EAGtB,OAFAM,GAAOC,SAASD,EAAOE,WAAa,GAExBF,EAARF,GACIL,IAAWD,IACfW,QAAQC,KAAK,mBAAqBX,EAAU,IAAMI,EAAU,wCAA0CG,EAAOK,eAAiB,KAAOV,GAEvIH,EAASC,IAAAA,GAAW,IACb,GAMXxN,EAAOqO,WAAa,SAASb,EAASC,EAAMC,EAAQC,GAClD,GAAIC,GAAUD,EAAS,MAAQ,IAC/B,IAAI3N,EAAOoB,aAAaoM,EAASC,EAAMC,EAAQC,GAC7C,KAAM,IAAIW,OAAMd,EAAU,IAAMI,EAAU,yBAA2BF,KAIxE9N,wmrBChCH8J,KAAU1J,GAAQuO,EAAOtO,KA2BvBuO,GAAA,MAASC,GAAAA,oBAAAA,EAAmC3E,EAG1C4E,EAFIC,GAAAA,GAAAA,GAEK/F,EACPgG,KAAK,KAAIxH,EAAU0C,KAAUlB,GACbiG,qBAAsBC,EAAsBC,GAAV3H,aAC1C4H,iBAAAA,GACMlF,SAAaN,EACrBhG,GAAQsG,QAAUlB,GACXkB,GAAAA,MAAUlB,GAAGxB,QAEtBuH,GAAAA,QAAAA,OAAAA,IAAAA,QAAAA,GAA+BvH,EAAUuH,EAAAA,GAAAA,MAAAA,MAAAA,IAAAA,EAAAA,KAA+BvH,IAAAA,EAAAA,IACxEuH,QAAAA,GAAAA,GAA+BvH,MAAAA,2BAAa4H,KAAAA,GAKzCC,OAAAA,GAAaN,OAAAA,QAAAA,GAAAA,EAChBO,GAAQP,OAAAA,EAAAA,EAAAA,GAA+BM,QAC3CE,GAAID,EAAS1F,GAAiD,MAAlC0F,IAAMA,EAAM3F,EACtC,EAAA,EACEkB,GAAAA,EAAMC,GAAAA,OAAaC,QAAAA,GACbyE,EAAAC,GACNxE,OAASuE,EAAAC,EAAA,SAAA1M,GAAA,MAAAM,MAIfqM,MAAOX,EAAAA,EAAAA,EAAAA,EAAAA,MAAAA,QAAAA,GAIAY,EAAAA,GAAAA,MAAmBZ,UAAAA,EAAAA,GAAAA,OAAAA,EACtBa,EAAAA,SAAAA,GACJ,MAASP,GAAaN,EAAAA,EAAAA,EAAAA,OAAAA,QAEpBW,GAAKF,EADDtF,GAAY6E,OAAAA,EAAAA,EAAAA,KAAAA,OAAAA,EAA+BM,MACtCrG,EAAWkB,EAAAA,qBACd2F,EAAY3F,EACZ4F,EAAAA,EAAAA,IAAU5F,qBACV6F,gBAAa7F,EAAUlB,qBACZkB,EAAiBzC,EACnByC,EAAUlB,IAAGpF,UACtBiM,0BACEC,EACFC,qBAEAC,EAAWD,GAGfH,YAAe9F,gBACF+F,EACXC,qBACAlM,EAAeD,GAA0BC,UAAS,WAClDxB,EAAUiN,qBACKV,EAAMsB,GAAAA,YAAsBZ,EAAAA,YAAuBW,EAOxErB,EAHAiB,aAAAA,EAAoBjB,EAASuB,eAAAA,GAAmBC,EACvCD,GAAkBL,SAAYM,EAAAA,GAAmBN,QAAAA,GAEnDD,EAAAA,GArFTjB,MAAMyB,WAAAA,GAAqB,WAAShH,GAAAA,EAAAA,EAClC,SAAIc,GAAAA,MAAY9J,IAAO4J,EAAAA,EAAAA,GAAAA,EAAAA,EAAmBZ,YAAAA,OACtC2F,EAAAA,qBAAiCF,OAAAA,GAAAA,gBAAAA,GACjCe,SAAAA,EAAiBD,GAAAA,QAAmBZ,GAAAA,GAAAA,EAAAA,EACxCsB,OAAOC,EAASC,UAAQC;AACtBF,EAAIE,UACFZ,CAAAA,IAAAA,GAA+Ba,EAC7BC,SAAQF,IAAAA,EAA4CE,UAA3BD,OAAcZ,EAAAA,UAC/BW,EAAiBC,GACjBD,EAAYC,UAAAA,CAAcZ,EAAAA,SAAaW,EAAAA,EAAYC,EAAAA,EAAAA,IAAAA,GAAcX,EACxE3N,aAAiBsO,EAAAA,EAAAA,EAAAA,GAAAA,IAAAA,GACdE,UAAAA,EAAiBH,EAAAA,EAAAA,EAAAA,IAAWC,GAAAA,EAAcZ,GAAAA,GAC1Ce,QAAAA,EAAgBH,GAAAA,EAAcX,EAAUW,GAAAA,EAAAA,EACxCI,GAAAA,EAAAA,IAAmC,QAAjBD,GAAyBH,EAAAA,GAAc7M,OAAO+M,EAAAA,EAAAA,SAAiBC,GAAAA,QACrFjC,GAAMpK,GAAMgM,MAAQE,MAAAA,IAAAA,EAAAA,KAAcrO,IAAAA,IAAUqO,IAAAA,GAAAA,EAAAA,GAAAA,IAAcA,GAAAA,GAAAA,EAAAA,EAAAA,EAAcI,IAAAA,EAAAA,GAAAA,KAAAA,MAAAA,EAG1E9N,EAAKiG,GAAI5G,EAAAA,IAAAA,OAAY2M,GAAAA,GAAAA,EAAAA,eAAAA,EACH+B,MAAA,EAAZ1O,EAAAA,EAAAA,KAAAA,QAAoCW,EAAAgO,KAAZ3O,KAAAA,MAAoC,GAAA4O,GAAZ5O,SAClDuM,gBAAY4B,+BA2ErBvQ,SAAqBC,GAAAA,MAAgBE,EAAAA,OAAAA,CAAAA,IChGxCmQ,GAAUlQ,EAAQuO,WAAOtO,KAIvBsO,GAASsC,qBACPC,EAAO9O,GAAiB,mBAAqBS,sBAClCsO,oBAIJC,qBAA2BC,mBAClCC,QAAAA,gBAAiBlP,0BAA6BA,EAC9CkP,aAAAA,EAAiBlP,qBAAwBiP,KAAAA,KAE3CH,GAASjC,EAAAA,YAAqBsC,GAAgBC,EAC5CrR,GAA+BwJ,SAAQX,EACjC5G,GAAAA,QAAWoP,GAEfJ,EAAmBG,GAAQF,GAAAA,EAAQJ,EAAY7O,OAAAA,cA2D1C6N,KAAAA,GAAAA,KAAAA,OAAsB7N,IAAgBqN,EAAAA,OACzCgC,GAAAA,EAAAA,IAAAA,gBACIC,KAAKtP,GAAAA,CAAAA,EAAchC,EAAOoB,QAAa,UAAA,IAAA,IAAAmQ,KAA6BC,GAAcA,EAAAC,QAAAC,EAA0B,SAClHL,GAAaR,MAAAA,GAAY7O,GAEf,KAAA,IAARoN,GAA8B,KAAA,GAATC,GACnBD,KAAAA,EACKuC,OAAAA,IAAcN,EAAAA,EACVI,QAATpC,oBACMsC,KAAAA,QAAcN,GAAAA,QAGrB,IADDO,EAAmBvC,KAAAA,KAAa6B,QAAAA,YAAiBG,KAAAA,QACrCO,MAAAA,IAAgBA,GAASrI,UACvC,eAAiBqI,YAAY,cACzBC,EAAAA,EAAAA,EAAcD,EAAYrI,QAAG8F,EACdzN,GAAfkQ,KAAAA,IAA4ClQ,EAAhBiQ,EAC1BE,QAAAA,EAAoBH,GAAAA,MAAShJ,EAAAA,GAAGA,GAAGkJ,IAAAA,KAAYD,EAAAA,CAAAA,IACnD,GAAIE,KAAAA,GACEC,CAAAA,GAAAA,GAAeC,KAAAA,EAAAA,QAAoB,GAAA7J,QAAM2J,IAAAA,EAAAA,KAC7C,IAAAN,QAAO,GAASS,QACdC,EACmB9C,KAAAA,MACZ2C,KAAOE,SAKf3D,GAAM0D,MAAAA,GAA2BG,GAAA5J,EAAS6J,MACxCA,KAAejD,QAvGtB8B,GAmBErC,EAAAA,GAAAA,MAAuBA,GAAAA,EAE7BQ,GAAIsC,GAAAA,QACFW,GAAiBlD,EAAAC,EAAAkD,GACjBC,GAAAA,GAAoBC,IACpBC,KAAAA,IAAAA,GAAmBD,EAAA/I,KAAA0I,EACnBO,KAAAA,IAAAA,GAAAA,EAAwBzQ,QACxB0Q,GAAAA,GAAAA,EAAAA,KAAyBR,EACzB/F,OAAAA,GAAAA,EAAmBhI,IAAA,SACnBwO,GAAAA,MAAiBzD,GAAAgD,IACjB9F,IAAAA,EAAAA,EAAiBjI,IACjByO,SAAAA,GAAAA,MAAkBzD,GAAA+C,IAClB7F,KAAAA,EAAAA,EAAkB,SAElBwG,GAAAA,GAAevK,GACfwK,EAAAA,IAAgB,SAAA3L,EAChB4L,GAAAA,MAAAA,IAAAA,EAAqB1J,QACrB2J,IAAAA,EAAsBjQ,KACtBuJ,IAAAA,EAAAA,IAAAA,EAAgB2G,eAEhBC,GAAMX,EAAA7J,KAAA+H,KAAA,MAAA,OACN0C,GAAO9J,OACPkD,EAAAA,QAAUjE,EACVwE,IAAAA,IACAsG,GAAAA,GACAlE,iDAGAmE,EAAAA,EACAC,KAAY,KACZC,GAAAA,QAAaC,EACbC,MAAWC,EAEXC,EAAUjF,KACVkF,KAAAA,GAAW1L,QACX2L,EACAC,KAAAA,MAASC,EACTC,EACAC,KAAAA,KAAAA,qBACc5F,GACd6F,YAAAA,EACAC,EAAAA,qBACcT,EACFrF,EACZc,uBACYd,EACZnB,qBAAYwB,KAAA,KAAAgF,GAEZU,EACAC,WAAAA,EACAC,EAAAA,gBACAC,CACAC,IAAaC,GACbC,EAAQC,qBAkCJhF,KAAAA,KAAAA,GAAwBA,EAE7BjQ,EAAAA,gBAAqBC,KAAAA,OAAgBE,EAAAA,KC9GxC+U,EAAkBvG,EAAOtO,gBAEd8U,KAAAA,OAAWvT,EAEd4D,KAAAA,GAAiBpF,oBAAO+E,CACxBiQ,IAAAA,GAAsB3P,SACjBrF,GAAAA,GAAOgH,GAAAA,EAAsB5B,EAAgBC,OAAAA,IAAW7D,IAOjEgH,EALAwM,GAAAA,EAAAA,GAAWC,QAAAA,EAAgC7P,EAAAA,oBAC3C4P,KAAAA,OAAWE,EAAsB7P,KAC3BQ,EAA8BT,EAAAA,oBAA2B5D,KAC7D,OAAOqE,EAAyBA,IAAUL,GAAAA,yBAKxC2P,EAA0BhF,EAAQnH,qBAAa7I,EAG/C4G,GAFwB/G,oBAAOqC,EAAqBlC,qBACpDqP,EAAuBQ,GAEvBoF,sBAEF5F,qBAAeW,oBAgBjB,qBAbekF,mBAAmBhQ,aAChC0B,YAAAA,SAAeiO,cACS,aAAjBjO,YAETqO,gBAAeE,UAAS/G,EACtBiB,qBAAuBoE,EAEV2B,GAAiB,4BACvBpF,6BAETiF,yBAA4BJ,0BAC5BI,SAAeH,OAAAA,iBAA4BA,gBAC3CG,cAAqBI,eACdJ,aAGHK,aAAa,YACjB,iBAAiB,iBAEbC,eACQ,gBAGZC,cAAWN,cACT,QAAO,eAEEJ,cAAiB,MAC5BU,iBAAWT,kBACTrV,EAES0V,GAAiB,SAC1BhH,EAEKoH,GAAAA,QAQR/V,GAAqBC,GAAgBE,MAAAA,GAAAA,uBClEvBE,IAsBfsO,EAASqH,aAAAA,QAAkBC,GAAQ7T,QAAU8T,GAC3CA,GAAWC,GAAAA,GAAAA,EACXD,aAAWE,EAAAA,OACXnU,EAAOoU,aAAAA,KAAeJ,KAAQ7T,UAAU8T,EAAAA,OAG1CvH,EAAS2H,aAAAA,KAAAA,KAAAA,QAA4BC,EAOnC5V,gBAAK6V,KAAkB1S,KAAAA,EAAyB,MAAA6K,EAAA8H,OAAA9H,EAAgC+H,aAChF/V,KAAKgW,KAASJ,SAAQvS,EACtBrD,OAAKiW,IACLjW,GAAKkW,EAAAA,GAAAA,OAAAA,EAGL,GAAK,OAAW7N,QAAS2N,GAAe3N,EAClC5G,GAAAA,MAAWzB,QAAKgW,GACpBhW,QAAK6V,IAAAA,GAAAA,EAAgBpU,SAAYzB,GAAAA,GAAKgW,GAAOvU,EAAAA,EAE/CzB,CAAKmW,IAAAA,QAAAA,EA+FP,MAASC,MAAAA,IAAAA,GAAAA,EAAqBR,gBACxBA,EAAQS,EAAAA,OAAAA,GAAAA,GAGZC,EAAIC,MAAAA,EAAgBC,gBAAIb,EAAAA,GAAAA,QAA4BC,GACpD3N,GACEoN,MAAAA,QAAkBO,EAAS,IAAA,GAAWa,GAAKzI,EAAa0I,2BACjDC,KAGPf,KAAAA,EAAQvS,EAAa,KAAS5B,GAAUqF,SACtC8O,EAAQvS,EAAM5B,WAAYqF,EAEpBzD,EAAM0R,qBAAkBtT,EAC9BmU,GAAcnU,UAKlBmU,EAAQS,GAA6BT,SAAQvS,EA7J/C3D,GAAIkX,QAAAA,GACFC,GACA7N,MACA8N,UAAAA,GAGEC,GAAAA,GAAAA,CACFC,OAAAA,GAAAA,IAAAA,SACAC,GAAAA,MAAAA,KAAqBN,EACrBO,EAAAA,KAAAA,KACAC,QACAC,GAAAA,GAAAA,MAAgBhV,GAChBiV,QAAAA,GAGEC,GAAAA,GAAAA,EACFF,EAAAA,cACAC,OA6BF1B,QAAAA,EAAAA,QAAAA,KAA4BhP,GAAAA,GAC1BkQ,EACE,uBAAYhB,KAAgBgB,EAElBU,EAAAA,EAEVC,EADIC,KAAAA,IACS,CAAA,GAAOzX,EAAK6V,OAAAA,EAAgB7M,MACvCyO,GAAAA,EAAmBzX,MAAK6V,EAAAA,GAAAA,MAAgBxN,IAE1CrI,GAAK6V,EAAAA,GAAgBgB,EACrB7W,EACA0X,EAAgBrP,KAAIrI,EAAK6V,MAAgB7M,IAAAA,GACvCyO,EAAAA,GAAAA,MAAAA,KAAmBzX,EAAK6V,EAAgBxN,EAAM,IAEhDsP,EAASlW,OAAAA,EAAYgW,OAAAA,MAAAA,KACdzX,GAAKkW,MAAAA,EAAAA,EAAAA,EAAoBzU,EAAAA,OACvBuU,IAAAA,CAAAA,GAAOqB,GAAY5V,EAAAA,EAAUzB,GAAAA,EAAK6V,EAAAA,EAAAA,IAAgBqB,EAAAA,GAAiBzV,EAAAA,SAAAA,GAI9EuH,MAAIA,KACF4O,EAAAlI,OAAO1P,EAAK6V,EAAAA,WAAgB7M,IAAAA,EAE9B8N,EAAIA,YACFe,EAAA7J,EAAOhO,qBAGTmW,EAAAA,EAAAA,aAAgBjM,EACdsG,eAAYyF,IAAUjW,EAAK6V,EAAAA,EAAAA,EAAgB7M,GAAAA,EAAAA,GACzC1H,GAAOoU,SAAAA,EAAqB1V,MAAKiW,GAC/BR,KAAAA,GACAD,GAAAA,EACAiB,MAAK9E,EAAA+F,EACHvV,EAAA2V,IAAoBN,EAAY3B,WAAAA,EAAgBkC,OAC/C/X,MAAKiW,IAEVjW,QAAKiW,GAEKA,GAAUjW,MAAK6V,GAAAA,QAAAA,GAAgB7M,QACzChJ,UAAKiW,IAAAA,QACEP,GAAe1V,EAAMA,GAAKiW,GAAAA,EAC/BR,oBACAD,EAAAA,CAAY3G,EACZ/H,kBAIAgI,CAAA,IAASrN,GAAUqF,EACvB9G,wBAAwB8G,GACxB9G,GAAKkW,EAAAA,oBAAoBzU,EAAY,CAAAqN,EAEvCiG,kBAAiBtT,CACfzB,IAAKgW,GAAOvU,EAAAA,wBAAiCA,GAAAA,MACtCzB,OAAKkW,EAAAA,IAAAA,MAAAA,EAAoBzU,MAKpC,KAASuW,GAAAA,SAAUjB,GAAAA,MAAAA,GACjBpB,EAAAA,GAAAA,EAAAA,EAAAA,GAAAA,KAAAA,EAA4BhP,GAAAA,KAAUqR,GAAAA,EAAoBA,GAAAA,KAAQC,IAAAA,EAAAA,EACzD,SACLC,GAAIjQ,GAAAA,GAASjI,EAAK6V,KAAAA,EAAgBmC,GAAAA,GAAQpU,EAAWiS,GAAAA,GAAAA,EAAAA,IAAAA,EAAiBsC,EAAAA,cAClEF,EAAAA,GAAAA,EACGjY,GAAKkW,EAAAA,GAAAA,EAAAA,EAAAA,IAAoBiC,EAC5BnY,EAAKgW,IAAAA,GAA0BA,KAAAA,IAAQmC,OAAAA,MACpChC,QAEAlO,GAER+P,GAAQA,MAAUV,GAAAA,QAAAA,OAAAA,IAIvB,QAAS7V,GAAY0B,GAAAA,MAASiV,GAAAA,QAAgB/U,eACxC5B,MAAYmV,QAAAA,GAA+BG,EAAAA,GAAAA,GAG/CsB,GACEhD,EAAAA,0BAAkBM,EAAAA,GAA4BhP,CAAAA,KAAAA,EAAWlF,SACvDgV,EAAKzN,OACH,CAAA6F,EAAO7O,SAAK6V,GAAgBpU,EAAAA,EAAAA,EAE9B6W,KAAcxR,KAAAA,GACZ9G,GAAAA,EAAK6V,EAAAA,EAAAA,OAAAA,IAAgBpU,CAAAA,GAAAA,GAAYqF,EACjC9G,GAAAA,EAAKmW,EAAAA,EAAAA,GAAAA,EAAAA,EACKD,SAAAA,EAAoBzU,OAAAA,EAAAA,GAC5BzB,EAAAA,CAAKgW,GAAAA,MAAOvU,EAAAA,EAAYqF,EAAAA,EAAAA,IAG7BrF,SAyBLuM,GAAMpK,GAAAA,gBAAiBgS,GAASnU,MAAAA,EAC9B2U,IAAAA,KAAAA,KAAqBR,GAAAA,KACrBA,GAAQvS,EAAMkV,GAAKvK,CAAMwK,OAAa/W,QAAWqF,GAGnDkH,GAAuB4H,SAASnU,EAAAA,GAC1BmU,MAAAA,eAAQS,GAAAA,eACVT,IAAQvS,UAAM0R,GAAO/G,YAAMwK,KAAa/W,UAAAA,GAO3CnC,YAAgBE,IAAAA,KAAAA,KChLTwO,IACRrE,IAAO8O,EAAAA,QAAQ9R,EAAU+R,OAAU,CAAA,IAAAL,EAAsBM,MACnD1D,IAAKqB,GAITsC,EAHeD,EAAAA,EACb1D,IAAaA,EAERjH,IAAM6K,GAAe7K,EAAM4G,IAAAA,IAAAA,UAAqBnM,EAAAA,UAAsBwM,KAAAA,GAE9E3V,GAAAA,EAAAA,EAAAA,EAAAA,OCRH+I,IAAU2F,CAAAA,GAAAA,GAAOtO,EAEfmP,EAASiK,GAAAA,EAAAA,EAAYhP,EAAUzH,GAC7BsP,EAAoBoH,EAAAlK,EAAAxG,GAARyB,EAAAA,EAAmCgF,EAAAzG,GAAAlG,EAAN6W,EACxBC,EAEGC,GAARpP,EAAoCmP,EACvC5W,EAOT,IAAIyH,EAA0BoP,EACxBjL,GACgBnE,CAAAA,IAAKd,EAChB8P,MAAAA,IAAYhP,GAASkP,GAE9BnK,EAEFxG,KAAMyG,EAAAzG,IAAA8Q,GAAAhQ,KAAAmN,EAAA,IAAwCxM,EAGhDkE,KAAM0D,EAAAA,IAAAA,EAAgBvI,MAASW,UAAUsP,EAAAA,UACvC,CAAA,GAAOF,GAAS7W,EACP+W,EAAAA,MAAgBN,IAAAA,EAAsBzW,IAQhD/C,EAAgBE,IAAAA,EAAAA,IClCnB6Z,EAAUrL,GAyFR9D,EAAAmP,EAAejX,GAAQkX,EACd5W,EAAkBN,GAAGkX,GAG9BC,EAASC,EACP,GAAIC,OAAgBC,CAAAA,IAAIC,EACdxJ,KAAMsJ,EAEZD,IAAAA,EACYN,IACdM,EAAOG,GAKF,CAAA,IAHDC,EAAkBH,MACd/W,IAAAA,GAAakX,EAAkBC,EAASJ,EAAAA,IAEnCnD,EAAUjO,IACrBmR,GAAUG,EAAYjX,IAAKoX,IAAQF,UAASH,EAClCM,KAASC,OAGvB9P,EAAOsP,EA5GLS,GAAAA,EAAgBC,EACTC,GAAAA,GAEPZ,EADItR,EAA4B,GAAMsR,GAAc,IAAK,GAAMa,MACxC/R,KACEqB,KACE2Q,EAAAA,EACrBpS,EAAAA,EAAUyB,OAAW2Q,IAAKrY,CAAEqY,GAAG3Q,GAIrC,gBAGFqP,GAAcjZ,GACZkO,EACesM,aACAtM,EAANwI,gBAEMF,EAATiE,EACSxB,EAANrP,GACM6P,EAAN7P,GACL5J,GACAA,GAAEwW,EACS,GAATkE,EACA9Q,GAAG4M,EAGX,GAAS2D,EAAcQ,KAAAA,EAAkBC,IAAAA,EAAYC,KAAAA,GAC/CC,EAAoBzR,KAAKqR,GAAuBK,EAAQ1R,MAAMe,EAErD4Q,KACD,GAAKH,EAGjB,CAAA,GAAKI,GAAI1S,CAAcA,GACR2S,EACXJ,EAAgBH,EAAAA,OAAU/Q,EAAYA,EAIlC8P,SAAaA,GAAK,MAAQA,GAASQ,IAAIR,SAE3CyB,EAAAA,GAAc,GAAMC,GAAsBC,EAAMrX,IAAG,SAAcsX,EAErEH,GAAAA,MAAUJ,GAAYxS,GAAKgT,GAAIA,GAAQC,KACvCL,KAAAA,IAAa,OAAU7Y,UACvB6Y,EAAAA,GAAU,IAAG,IAAU7Y,EACvB6Y,MAAa,KAAKjS,SAAiBgR,EACnCiB,GAAAA,GAAU,YAAqB7Y,EAAQkZ,GACvCL,GAAAA,IAAAA,EAAmCjB,MACnCiB,KAAAA,OAAa,GAAU7Y,GAAIkZ,KAAQtB,GACnCiB,GAAAA,GAAAA,GAAaM,IAAUF,GAAIC,GACdV,QAAcxY,UAE3BwY,EAAAA,EAAAA,EAAST,EAAAA,EAAAA,EAAAA,EAASS,EAAAA,EAAAA,EAAAA,EAAQK,EAAAA,EAAAA,EAAAA,EAAAA,GAE1BhG,GAAIuG,UAAe,mBAAyBvG,GAAMwG,QAAW,KACzDf,SAAK,KACPc,SAAad,KAAKgB,SACTvB,KAAAA,UAAiBqB,QAGxBd,aACFc,KAAQG,OACRH,KAAQI,GAAKlB,EAAK/D,EAAA,IAClBiE,GAAST,QAAAA,IAASS,GAAQY,EAAAA,EAAAA,IAGxBd,GAAK/D,EACP6E,KAAKK,QACLL,IAAKI,GAAQlB,EAAAA,EAAAA,IACbE,GAAAA,EAAST,KAAAA,QAASS,IAAQY,GAG5B,EAAA,EAAK7E,KAAQmF,SAAUzT,MAChB4M,GAAIvL,MAAOA,KACdkR,KAAAA,GAAOvS,OAASsT,IAAMtT,KAI1BuT,GAAIG,EAAAA,KAAKnB,OACCA,IAAO,KAAOA,GAAAA,EAAUjE,KAAIiE,WAAcA,KAAAA,GAAUjE,EAAIiE,EAAAA,IAAO3F,GAAO2F,YAAU,IAEnFA,GAAOjE,EAAGqF,EAAAA,IAAOpB,GAAOjE,EAAIiE,KAAOqB,YAAW,IAEvDL,GAAO3B,EAAAA,EAAAA,IAAAA,GA0BTjM,EAAMiM,KAAAA,YAAgBA,IAAAA,GACtBjM,EAAAA,EAAMwL,KAAOA,aAEZla,MAAgBE,GAAAA,GAAAA,qBCnHTC,EAAeC,GAEhBwc,eAEP5c,EAAI6c,GAAkCC,SAAaC,GAAAA,QACjDrc,GAAK4P,GAASA,GACd5P,GAAKoc,OAAAA,EAAcA,OAAAA,OACnBpc,IAAKqc,IAAAA,GAAeA,EAAAA,KAAAA,EAEpBrc,MAAKkK,EAHckS,OAGPE,EACZtc,QAAKuc,GACLvc,GAAKwc,MAAAA,GACLxc,IAAKyc,KAAAA,MAAAA,EAAgB7M,KACrB5P,EAAK0c,EAAAA,MAAAA,IAAmB,IACxB1c,GAAK2c,MAAAA,EAAaC,SAAMC,MACxB7c,EAAK8c,OAAYvP,OAAKwP,GAGxB/O,QAAMgP,GAAYnO,EAAAC,GAAS9N,OACpBiU,EAAKnG,EACN9N,GAAUA,EAAOic,qBACFA,EAEnBjd,GAAKkd,iBAAyBhB,GAAAA,SACzBiB,GAAAA,QACLnd,GAAkBod,GACbC,GAAUpV,KACV1H,KAAAA,GAAAA,KACLP,GAAKsd,EAAAA,IACLtd,EAAKud,EAAAA,OAAgBtV,GAChBuV,QAAWC,GACXC,GAAAA,MACL1d,GAAK+G,aACL/G,qCAAsCiR,IACjC0M,EAAQC,uBACRC,GAGP7P,QAAMgP,GAAUrW,EACdmX,GAAAA,GAAc7V,GAAA+F,EAIRhO,gBAAoByd,EAAUrB,IAAAA,EAChCpc,IAAK+d,GAAAA,IAAY/d,EAAK+G,GAAAA,CAAQ+N,GAAAA,GAAQ7M,EAEjC8V,EAAAA,IAAAA,EAAY/d,GAAK+G,EAAQ+N,IAAAA,SAAasH,EAAAA,GAAAA,EAEnCkB,IAAAA,SAAAA,GAAgBtd,IAAK+d,EAAc/d,GAAAA,EAAKud,KAAAA,GAAAA,IAChDvd,EAAKsd,QAAAA,EACLtP,CAAAA,GAAM6K,aAASmF,KAAAA,EAAiBhe,KAAAA,aAGpCie,KAAAA,EAAkB,IAASC,CAAAA,GAAAA,GAASC,EAAAA,EAAAA,GAC9BD,GAAAA,EAAgBf,GAAAA,EAAAA,GAAAA,EAClBnd,GAAKmd,2BACIiB,KAAAA,EAAgBD,KAAAA,2BACHne,KAAKO,EAAAA,IAAAA,MAAoBP,GAAK0U,IAAAA,SAAiB2J,GAChEP,MAAAA,gBAGL1B,GACFiC,EAAIre,EAAcA,OAAK6d,QAAAA,GAEXV,GAAAA,GAEVf,GAAAA,EAAY8B,gBACdA,EACI9c,IAAM8c,EAAAA,IAEVlQ,EAAMsQ,CAAAA,IAAAA,GACDte,GAAKqd,EAA8B,GAAAf,IAAdiC,IAAAA,KAAAA,IACxBve,KAAKue,EAAAA,EAAAA,GAAkBC,EAAAA,EAAAA,EAAUpC,EAAAA,EAAAA,OAAc8B,IAAUle,CAAAA,GAAKO,GAAAA,EAAAA,EAEhEP,iBAAK6d,IAAsBY,EAClBtB,eAAgBe,KAEzBle,GAAKie,GAAAA,KAAAA,EAAiBC,MAAAA,EAAAA,OACtBlQ,EAAM0Q,IAAAA,EAAAA,OAAAA,GAAAA,GAERxP,EAAIA,GAAAA,EACFyP,GAAO3e,UAAKue,GAEVrP,MAAAA,IACFgP,EAAWA,EACDA,GAENle,EAAKqd,MAAAA,EAAgBM,MAAAA,GAEzB3d,KAAKue,EAAAA,GAAAA,EAAaL,IAClBle,GAAKie,GAAAA,OAAuBO,EAAAA,EAAUpC,KAAAA,QAAcpc,GAAmBA,GAAK0E,GAAAA,GAC5EsJ,EAAM0Q,gBAAAA,EAEJha,KACFuM,EAAOjR,OAAKO,IAAAA,IAEdmE,EAAIA,GAAAA,EAAaoC,GAAAA,OACXA,GAAAA,IAAcvG,MAAAA,IAAAA,GAGlBqe,QAAIC,IAAAA,IAAAA,OAAsBzC,IAAAA,KAAAA,KAC1Bpc,IAAKO,GAAAA,QAAAA,IAAgBuG,MACrB9G,EAAkBgO,EACI8Q,oBAAbC,KAA2C,KAAA/Q,EAAb+Q,gBAChCC,IAAAA,GAEe1Q,qBACpBtO,EAAKoc,KAAcyC,KAAAA,GAAAA,GAGnBT,qBACWT,EAAAA,qBAA+BsB,EAAU9B,KAAAA,KAAgBnd,GAAAA,GAAK0U,uBAC7C1U,EAAKmd,gBAAgB+B,EAEjDxK,EAAmByK,gBAAYpY,CAAQ2N,IAC3CqK,GACE/Q,EAAIhO,oBAEoBqO,KAAnBrO,KAAKue,EAA4BlB,KAAAA,GAAWrd,qBAA2BA,EAAK6d,GAE7E7d,sBAEAA,qBACKV,GAGX0f,SAAMhR,GACJhO,QAAKqd,GACIe,GAAAA,GAAAA,GAAoBT,EAAAA,aACtBR,UAAend,EAAKO,IAAAA,GAAgB6e,EAAQpf,GAAK0U,OAAAA,UACtD1U,OAAKue,EAAac,aAEf9B,EAAAA,OAAgBvP,EAChB2P,aACL3d,KAAK8d,OAAAA,QACL9P,EAEFsR,EAAOxJ,OAAA9H,EACAhO,aAAKoe,KAAgBpe,OAAKqd,QAAYrd,EAAK2d,gBACzCE,EAAAA,OAAAA,EAEP7d,aAAKue,KAAa,OACblB,SAAU+B,EAEjBG,IAAQ,IAAAC,GACFxf,EAAK2d,aAEJvB,WAAcpc,EAAKO,IAAAA,GAAoBP,EAAK0U,GAAAA,OAAiB,WAC7D6J,OAAave,EAAK0U,aAAAA,EAAsB0H,OAAAA,EAC7Cpc,aAAK6d,KAAAA,OAAsB,QACrBa,EAERe,EAAQ3J,OACD9V,EAAK+d,aAEV/d,KAAK+d,OAAAA,QACL/d,EAAK2d,gBACAJ,EAAAA,OACLvd,EAAKoc,aACLpc,KAAKue,OAAAA,SACLve,EAAK+G,IAAQ+N,IAAAA,GAGb9G,EAAM0Q,aAAAA,WAERgB,EAAS,OAAAC,IACFjb,EAAAA,IAAgB,WAChBsa,OAEPY,EAAAA,aAAkB5R,EAAS9D,OAAM2V,EACT9J,aAAA1H,KAAXwR,OAAAA,QAAiC7R,EAAR9D,SAClClK,EAAK0d,aAAgBvU,KAAK0W,OAAAA,6BAET,YAAeA,EACtBtL,oBAERwD,EAAQ/X,OAAK0d,EAAAA,aAAgB/b,KAAQke,OACrC9H,SAAS4H,EACNjC,KAAAA,OAAAA,QAAuB3F,GAEhC+H,EAAAA,GAAa,MAAAjR,GAASkR,KAAAA,EAChB/f,GAAKoe,UAAAA,EACP,GAAKpe,EAAKud,UAAAA,EACR1Z,MAAImc,GAAQlR,EAAIqN,MAAAA,IAAAA,UAAqBnc,EAAKmd,gBAAc4C,OACpD1O,EAAWrR,gBAAK0d,MAAgB1B,WAAYwB,EAAAA,GAAAA,EAAiBA,UAAAA,EACjEyC,MAAAA,GAAAA,EAAWpc,MACTwN,IAAAA,WAAS7P,EAAQ0e,yBACPC,OAAKH,EAAMpQ,gBAGvB5P,MAAKud,WAAAA,EAAgB,IAGvBvd,EAAAA,IAAKud,EAAAA,GAAAA,EAGT6C,UAAOvR,EAASwN,MAAAA,GAAAA,EAAcgE,MAAAA,IAAAA,WAClB1C,EAAAA,GAAU3d,EACK,MAAnBA,OAAKue,OACH8B,GAAAA,GACGnR,EAAYmN,qBAAoBc,KAAAA,KAAend,EAAK0E,sBAE5C0Z,EACVH,EAAkB5B,gBAAoBkC,KAAAA,OAAcve,EAIzDqgB,KAAAA,EACFrgB,EAAK6d,oBACL7d,KAAK8f,OAAAA,EAAYzD,gBAGrBiE,KAAIA,EACMtgB,EAAK+e,oBAAyB1Q,KAAGkS,OAAWC,EAAajD,IAAAA,GAQpEle,qBAAqBC,EAAAA,GAAgBE,mBC5NxCF,GAAyBI,SAqBvBsO,EAASyS,GAAAA,QAAAA,GACPpW,EAAIqW,GAAAA,EAAaC,QACjBA,IAAAA,QACIhP,SAAIkH,GAASuD,IACXvD,UAASuD,gBACP/Y,QACRqd,EAAWlf,GAAQof,KAASC,GAASA,KACrCC,GAAAA,aAAAA,kBAIF,gBAASC,EAAAA,mBAAiCC,0BACjCC,EAAAA,eAAc/D,sBAAiCA,EAAAA,qBAG/CgE,4BACFlD,EAELhe,aAAKoc,SAAczS,GAAOwX,MAAeA,GAAAA,IAAkBA,IAAYpE,EA8ChE+D,OCtFX,WAEE,GAA2Dzf,SAAvD8B,SAASC,cAAc,OAAOsV,YAAY0I,SAA9C,CAKE,GAAIrE,EACC,IAAIpT,OAAOwX,aAAeA,YAAYpE,IAC3C,GAAIA,GAAM,WAAa,MAAOoE,aAAYpE,WAE1C,IAAIA,GAAM,WAAa,MAAOxP,MAAKwP,MAGrC,IAAIsE,GAAuB,SAASzR,EAAQwM,EAAaC,GACvDrc,KAAK4P,OAASA,EACd5P,KAAKoc,YAAcA,EACnBpc,KAAKqc,aAAeA,EAEpBrc,KAAKkK,KAAO,SACZlK,KAAKuc,SAAAA,EACLvc,KAAKwc,YAAAA,EACLxc,KAAKyc,cAAgB7M,EACrB5P,KAAK0c,kBAAAA,EACL1c,KAAK2c,WAAaC,MAAMC,UACxB7c,KAAK8c,UAAYvP,KAAKwP,OAGpBuE,EAAyB3X,OAAO8O,QAAQ9R,UAAU+R,OACtD/O,QAAO8O,QAAQ9R,UAAU+R,QAAU,SAASjQ,EAAakQ,GACvD,GAAI4I,GAAYD,EAAuBnB,KAAKngB,KAAMyI,EAAakQ,EAE/D4I,GAAUC,mBACVD,EAAUH,SAAW,IAErB,IAAIK,GAAiBF,EAAU9B,MAC/B8B,GAAU9B,OAAS,WACjBgC,EAAetB,KAAKngB,KACpB,IAAIggB,GAAQ,GAAIqB,GAAqBrhB,KAAM,KAAM+c,KAC7C1L,EAAWrR,KAAKwhB,gBAAgBxF,OAAOhc,KAAKohB,UAAYphB,KAAKohB,aACjEnB,YAAW,WACT5O,EAAS7P,QAAQ,SAASqe,GACxBA,EAAQM,KAAKH,EAAMpQ,OAAQoQ,MAE5B,GAGL,IAAI0B,GAA2BH,EAAU3B,gBACzC2B,GAAU3B,iBAAmB,SAAS1V,EAAM2V,GACpB,kBAAXA,IAAiC,UAAR3V,EAClClK,KAAKwhB,gBAAgBrY,KAAK0W,GAE1B6B,EAAyBvB,KAAKngB,KAAMkK,EAAM2V,GAG9C,IAAI8B,GAA8BJ,EAAUK,mBAW5C,OAVAL,GAAUK,oBAAsB,SAAS1X,EAAM2V,GAC7C,GAAY,UAAR3V,EAAkB,CACpB,GAAI6N,GAAQ/X,KAAKwhB,gBAAgB7f,QAAQke,EACrC9H,IAAS,GACX/X,KAAKwhB,gBAAgBK,OAAO9J,EAAO,OAErC4J,GAA4BxB,KAAKngB,KAAMkK,EAAM2V,IAI1C0B,OClEX,SAAU9hB,GAgBR,GAAImW,GAAUzS,SAASiV,gBACnBmJ,EAAY,KACZO,GAAAA,CACJ,KACE,GAAIC,GAAkBC,iBAAiBpM,GAASsB,iBAAiB,WAC7D+K,EAAiC,KAAnBF,EAAyB,IAAM,GACjDR,GAAY3L,EAAQ8C,SAASjF,SAAYwO,EAAaA,KACjD9gB,SAAU,IACfogB,EAAUnF,YAAc,EACxB0F,EAAWE,iBAAiBpM,GAASsB,iBAAiB,YAAc+K,EACpE,MAAOC,IACP,QACIX,GACFA,EAAU9B,SAEd,IAAIqC,EAAJ,CAIA,GAAIR,GAAyB3X,OAAO8O,QAAQ9R,UAAU+R,OACtD/O,QAAO8O,QAAQ9R,UAAU+R,QAAU,SAASjQ,EAAakQ,GAUvD,MATIhP,QAAOC,QAAUA,OAAOC,UAAYjB,MAAMjC,UAAUmD,MAAQrB,EAAYmB,OAAOC,YAEjFpB,EAAcG,MAAMkB,KAAKrB,IAGtBG,MAAMC,QAAQJ,IAAgC,OAAhBA,IACjCA,EAAchJ,EAAO+I,mBAAmBC,IAGnC6Y,EAAuBnB,KAAKngB,KAAMyI,EAAakQ,MAEvDtZ,Gd9CCE,EAAAA,QAEJ4iB,MACM3iB,WAAAA,MAAuBQ","file":"web-animations.min.js"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/webcomponentsjs/CustomElements.js b/dashboard-ui/bower_components/webcomponentsjs/CustomElements.js
deleted file mode 100644
index 931f6c22e1..0000000000
--- a/dashboard-ui/bower_components/webcomponentsjs/CustomElements.js
+++ /dev/null
@@ -1,1029 +0,0 @@
-/**
- * @license
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
-// @version 0.7.22
-if (typeof WeakMap === "undefined") {
- (function() {
- var defineProperty = Object.defineProperty;
- var counter = Date.now() % 1e9;
- var WeakMap = function() {
- this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
- };
- WeakMap.prototype = {
- set: function(key, value) {
- var entry = key[this.name];
- if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
- value: [ key, value ],
- writable: true
- });
- return this;
- },
- get: function(key) {
- var entry;
- return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
- },
- "delete": function(key) {
- var entry = key[this.name];
- if (!entry || entry[0] !== key) return false;
- entry[0] = entry[1] = undefined;
- return true;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
- }
- };
- window.WeakMap = WeakMap;
- })();
-}
-
-(function(global) {
- if (global.JsMutationObserver) {
- return;
- }
- var registrationsTable = new WeakMap();
- var setImmediate;
- if (/Trident|Edge/.test(navigator.userAgent)) {
- setImmediate = setTimeout;
- } else if (window.setImmediate) {
- setImmediate = window.setImmediate;
- } else {
- var setImmediateQueue = [];
- var sentinel = String(Math.random());
- window.addEventListener("message", function(e) {
- if (e.data === sentinel) {
- var queue = setImmediateQueue;
- setImmediateQueue = [];
- queue.forEach(function(func) {
- func();
- });
- }
- });
- setImmediate = function(func) {
- setImmediateQueue.push(func);
- window.postMessage(sentinel, "*");
- };
- }
- var isScheduled = false;
- var scheduledObservers = [];
- function scheduleCallback(observer) {
- scheduledObservers.push(observer);
- if (!isScheduled) {
- isScheduled = true;
- setImmediate(dispatchCallbacks);
- }
- }
- function wrapIfNeeded(node) {
- return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
- }
- function dispatchCallbacks() {
- isScheduled = false;
- var observers = scheduledObservers;
- scheduledObservers = [];
- observers.sort(function(o1, o2) {
- return o1.uid_ - o2.uid_;
- });
- var anyNonEmpty = false;
- observers.forEach(function(observer) {
- var queue = observer.takeRecords();
- removeTransientObserversFor(observer);
- if (queue.length) {
- observer.callback_(queue, observer);
- anyNonEmpty = true;
- }
- });
- if (anyNonEmpty) dispatchCallbacks();
- }
- function removeTransientObserversFor(observer) {
- observer.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- registrations.forEach(function(registration) {
- if (registration.observer === observer) registration.removeTransientObservers();
- });
- });
- }
- function forEachAncestorAndObserverEnqueueRecord(target, callback) {
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (registrations) {
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- var record = callback(options);
- if (record) registration.enqueue(record);
- }
- }
- }
- }
- var uidCounter = 0;
- function JsMutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- }
- JsMutationObserver.prototype = {
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
- throw new SyntaxError();
- }
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- var registration;
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeListeners();
- registration.options = options;
- break;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, options);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- registration.addListeners();
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registration.removeListeners();
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = [];
- this.removedNodes = [];
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function copyMutationRecord(original) {
- var record = new MutationRecord(original.type, original.target);
- record.addedNodes = original.addedNodes.slice();
- record.removedNodes = original.removedNodes.slice();
- record.previousSibling = original.previousSibling;
- record.nextSibling = original.nextSibling;
- record.attributeName = original.attributeName;
- record.attributeNamespace = original.attributeNamespace;
- record.oldValue = original.oldValue;
- return record;
- }
- var currentRecord, recordWithOldValue;
- function getRecord(type, target) {
- return currentRecord = new MutationRecord(type, target);
- }
- function getRecordWithOldValue(oldValue) {
- if (recordWithOldValue) return recordWithOldValue;
- recordWithOldValue = copyMutationRecord(currentRecord);
- recordWithOldValue.oldValue = oldValue;
- return recordWithOldValue;
- }
- function clearRecords() {
- currentRecord = recordWithOldValue = undefined;
- }
- function recordRepresentsCurrentMutation(record) {
- return record === recordWithOldValue || record === currentRecord;
- }
- function selectRecord(lastRecord, newRecord) {
- if (lastRecord === newRecord) return lastRecord;
- if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
- return null;
- }
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- enqueue: function(record) {
- var records = this.observer.records_;
- var length = records.length;
- if (records.length > 0) {
- var lastRecord = records[length - 1];
- var recordToReplaceLast = selectRecord(lastRecord, record);
- if (recordToReplaceLast) {
- records[length - 1] = recordToReplaceLast;
- return;
- }
- } else {
- scheduleCallback(this.observer);
- }
- records[length] = record;
- },
- addListeners: function() {
- this.addListeners_(this.target);
- },
- addListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
- },
- removeListeners: function() {
- this.removeListeners_(this.target);
- },
- removeListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
- },
- addTransientObserver: function(node) {
- if (node === this.target) return;
- this.addListeners_(node);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- transientObservedNodes.forEach(function(node) {
- this.removeListeners_(node);
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i] === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- },
- handleEvent: function(e) {
- e.stopImmediatePropagation();
- switch (e.type) {
- case "DOMAttrModified":
- var name = e.attrName;
- var namespace = e.relatedNode.namespaceURI;
- var target = e.target;
- var record = new getRecord("attributes", target);
- record.attributeName = name;
- record.attributeNamespace = namespace;
- var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.attributes) return;
- if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
- return;
- }
- if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMCharacterDataModified":
- var target = e.target;
- var record = getRecord("characterData", target);
- var oldValue = e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.characterData) return;
- if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMNodeRemoved":
- this.addTransientObserver(e.target);
-
- case "DOMNodeInserted":
- var changedNode = e.target;
- var addedNodes, removedNodes;
- if (e.type === "DOMNodeInserted") {
- addedNodes = [ changedNode ];
- removedNodes = [];
- } else {
- addedNodes = [];
- removedNodes = [ changedNode ];
- }
- var previousSibling = changedNode.previousSibling;
- var nextSibling = changedNode.nextSibling;
- var record = getRecord("childList", e.target.parentNode);
- record.addedNodes = addedNodes;
- record.removedNodes = removedNodes;
- record.previousSibling = previousSibling;
- record.nextSibling = nextSibling;
- forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
- if (!options.childList) return;
- return record;
- });
- }
- clearRecords();
- }
- };
- global.JsMutationObserver = JsMutationObserver;
- if (!global.MutationObserver) {
- global.MutationObserver = JsMutationObserver;
- JsMutationObserver._isPolyfilled = true;
- }
-})(self);
-
-(function(scope) {
- "use strict";
- if (!window.performance) {
- var start = Date.now();
- window.performance = {
- now: function() {
- return Date.now() - start;
- }
- };
- }
- if (!window.requestAnimationFrame) {
- window.requestAnimationFrame = function() {
- var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
- return nativeRaf ? function(callback) {
- return nativeRaf(function() {
- callback(performance.now());
- });
- } : function(callback) {
- return window.setTimeout(callback, 1e3 / 60);
- };
- }();
- }
- if (!window.cancelAnimationFrame) {
- window.cancelAnimationFrame = function() {
- return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) {
- clearTimeout(id);
- };
- }();
- }
- var workingDefaultPrevented = function() {
- var e = document.createEvent("Event");
- e.initEvent("foo", true, true);
- e.preventDefault();
- return e.defaultPrevented;
- }();
- if (!workingDefaultPrevented) {
- var origPreventDefault = Event.prototype.preventDefault;
- Event.prototype.preventDefault = function() {
- if (!this.cancelable) {
- return;
- }
- origPreventDefault.call(this);
- Object.defineProperty(this, "defaultPrevented", {
- get: function() {
- return true;
- },
- configurable: true
- });
- };
- }
- var isIE = /Trident/.test(navigator.userAgent);
- if (!window.CustomEvent || isIE && typeof window.CustomEvent !== "function") {
- window.CustomEvent = function(inType, params) {
- params = params || {};
- var e = document.createEvent("CustomEvent");
- e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);
- return e;
- };
- window.CustomEvent.prototype = window.Event.prototype;
- }
- if (!window.Event || isIE && typeof window.Event !== "function") {
- var origEvent = window.Event;
- window.Event = function(inType, params) {
- params = params || {};
- var e = document.createEvent("Event");
- e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));
- return e;
- };
- window.Event.prototype = origEvent.prototype;
- }
-})(window.WebComponents);
-
-window.CustomElements = window.CustomElements || {
- flags: {}
-};
-
-(function(scope) {
- var flags = scope.flags;
- var modules = [];
- var addModule = function(module) {
- modules.push(module);
- };
- var initializeModules = function() {
- modules.forEach(function(module) {
- module(scope);
- });
- };
- scope.addModule = addModule;
- scope.initializeModules = initializeModules;
- scope.hasNative = Boolean(document.registerElement);
- scope.isIE = /Trident/.test(navigator.userAgent);
- scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative);
-})(window.CustomElements);
-
-window.CustomElements.addModule(function(scope) {
- var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none";
- function forSubtree(node, cb) {
- findAllElements(node, function(e) {
- if (cb(e)) {
- return true;
- }
- forRoots(e, cb);
- });
- forRoots(node, cb);
- }
- function findAllElements(node, find, data) {
- var e = node.firstElementChild;
- if (!e) {
- e = node.firstChild;
- while (e && e.nodeType !== Node.ELEMENT_NODE) {
- e = e.nextSibling;
- }
- }
- while (e) {
- if (find(e, data) !== true) {
- findAllElements(e, find, data);
- }
- e = e.nextElementSibling;
- }
- return null;
- }
- function forRoots(node, cb) {
- var root = node.shadowRoot;
- while (root) {
- forSubtree(root, cb);
- root = root.olderShadowRoot;
- }
- }
- function forDocumentTree(doc, cb) {
- _forDocumentTree(doc, cb, []);
- }
- function _forDocumentTree(doc, cb, processingDocuments) {
- doc = window.wrap(doc);
- if (processingDocuments.indexOf(doc) >= 0) {
- return;
- }
- processingDocuments.push(doc);
- var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]");
- for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) {
- if (n.import) {
- _forDocumentTree(n.import, cb, processingDocuments);
- }
- }
- cb(doc);
- }
- scope.forDocumentTree = forDocumentTree;
- scope.forSubtree = forSubtree;
-});
-
-window.CustomElements.addModule(function(scope) {
- var flags = scope.flags;
- var forSubtree = scope.forSubtree;
- var forDocumentTree = scope.forDocumentTree;
- function addedNode(node, isAttached) {
- return added(node, isAttached) || addedSubtree(node, isAttached);
- }
- function added(node, isAttached) {
- if (scope.upgrade(node, isAttached)) {
- return true;
- }
- if (isAttached) {
- attached(node);
- }
- }
- function addedSubtree(node, isAttached) {
- forSubtree(node, function(e) {
- if (added(e, isAttached)) {
- return true;
- }
- });
- }
- var hasThrottledAttached = window.MutationObserver._isPolyfilled && flags["throttle-attached"];
- scope.hasPolyfillMutations = hasThrottledAttached;
- scope.hasThrottledAttached = hasThrottledAttached;
- var isPendingMutations = false;
- var pendingMutations = [];
- function deferMutation(fn) {
- pendingMutations.push(fn);
- if (!isPendingMutations) {
- isPendingMutations = true;
- setTimeout(takeMutations);
- }
- }
- function takeMutations() {
- isPendingMutations = false;
- var $p = pendingMutations;
- for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
- p();
- }
- pendingMutations = [];
- }
- function attached(element) {
- if (hasThrottledAttached) {
- deferMutation(function() {
- _attached(element);
- });
- } else {
- _attached(element);
- }
- }
- function _attached(element) {
- if (element.__upgraded__ && !element.__attached) {
- element.__attached = true;
- if (element.attachedCallback) {
- element.attachedCallback();
- }
- }
- }
- function detachedNode(node) {
- detached(node);
- forSubtree(node, function(e) {
- detached(e);
- });
- }
- function detached(element) {
- if (hasThrottledAttached) {
- deferMutation(function() {
- _detached(element);
- });
- } else {
- _detached(element);
- }
- }
- function _detached(element) {
- if (element.__upgraded__ && element.__attached) {
- element.__attached = false;
- if (element.detachedCallback) {
- element.detachedCallback();
- }
- }
- }
- function inDocument(element) {
- var p = element;
- var doc = window.wrap(document);
- while (p) {
- if (p == doc) {
- return true;
- }
- p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host;
- }
- }
- function watchShadow(node) {
- if (node.shadowRoot && !node.shadowRoot.__watched) {
- flags.dom && console.log("watching shadow-root for: ", node.localName);
- var root = node.shadowRoot;
- while (root) {
- observe(root);
- root = root.olderShadowRoot;
- }
- }
- }
- function handler(root, mutations) {
- if (flags.dom) {
- var mx = mutations[0];
- if (mx && mx.type === "childList" && mx.addedNodes) {
- if (mx.addedNodes) {
- var d = mx.addedNodes[0];
- while (d && d !== document && !d.host) {
- d = d.parentNode;
- }
- var u = d && (d.URL || d._URL || d.host && d.host.localName) || "";
- u = u.split("/?").shift().split("/").pop();
- }
- }
- console.group("mutations (%d) [%s]", mutations.length, u || "");
- }
- var isAttached = inDocument(root);
- mutations.forEach(function(mx) {
- if (mx.type === "childList") {
- forEach(mx.addedNodes, function(n) {
- if (!n.localName) {
- return;
- }
- addedNode(n, isAttached);
- });
- forEach(mx.removedNodes, function(n) {
- if (!n.localName) {
- return;
- }
- detachedNode(n);
- });
- }
- });
- flags.dom && console.groupEnd();
- }
- function takeRecords(node) {
- node = window.wrap(node);
- if (!node) {
- node = window.wrap(document);
- }
- while (node.parentNode) {
- node = node.parentNode;
- }
- var observer = node.__observer;
- if (observer) {
- handler(node, observer.takeRecords());
- takeMutations();
- }
- }
- var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
- function observe(inRoot) {
- if (inRoot.__observer) {
- return;
- }
- var observer = new MutationObserver(handler.bind(this, inRoot));
- observer.observe(inRoot, {
- childList: true,
- subtree: true
- });
- inRoot.__observer = observer;
- }
- function upgradeDocument(doc) {
- doc = window.wrap(doc);
- flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop());
- var isMainDocument = doc === window.wrap(document);
- addedNode(doc, isMainDocument);
- observe(doc);
- flags.dom && console.groupEnd();
- }
- function upgradeDocumentTree(doc) {
- forDocumentTree(doc, upgradeDocument);
- }
- var originalCreateShadowRoot = Element.prototype.createShadowRoot;
- if (originalCreateShadowRoot) {
- Element.prototype.createShadowRoot = function() {
- var root = originalCreateShadowRoot.call(this);
- window.CustomElements.watchShadow(this);
- return root;
- };
- }
- scope.watchShadow = watchShadow;
- scope.upgradeDocumentTree = upgradeDocumentTree;
- scope.upgradeDocument = upgradeDocument;
- scope.upgradeSubtree = addedSubtree;
- scope.upgradeAll = addedNode;
- scope.attached = attached;
- scope.takeRecords = takeRecords;
-});
-
-window.CustomElements.addModule(function(scope) {
- var flags = scope.flags;
- function upgrade(node, isAttached) {
- if (node.localName === "template") {
- if (window.HTMLTemplateElement && HTMLTemplateElement.decorate) {
- HTMLTemplateElement.decorate(node);
- }
- }
- if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
- var is = node.getAttribute("is");
- var definition = scope.getRegisteredDefinition(node.localName) || scope.getRegisteredDefinition(is);
- if (definition) {
- if (is && definition.tag == node.localName || !is && !definition.extends) {
- return upgradeWithDefinition(node, definition, isAttached);
- }
- }
- }
- }
- function upgradeWithDefinition(element, definition, isAttached) {
- flags.upgrade && console.group("upgrade:", element.localName);
- if (definition.is) {
- element.setAttribute("is", definition.is);
- }
- implementPrototype(element, definition);
- element.__upgraded__ = true;
- created(element);
- if (isAttached) {
- scope.attached(element);
- }
- scope.upgradeSubtree(element, isAttached);
- flags.upgrade && console.groupEnd();
- return element;
- }
- function implementPrototype(element, definition) {
- if (Object.__proto__) {
- element.__proto__ = definition.prototype;
- } else {
- customMixin(element, definition.prototype, definition.native);
- element.__proto__ = definition.prototype;
- }
- }
- function customMixin(inTarget, inSrc, inNative) {
- var used = {};
- var p = inSrc;
- while (p !== inNative && p !== HTMLElement.prototype) {
- var keys = Object.getOwnPropertyNames(p);
- for (var i = 0, k; k = keys[i]; i++) {
- if (!used[k]) {
- Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k));
- used[k] = 1;
- }
- }
- p = Object.getPrototypeOf(p);
- }
- }
- function created(element) {
- if (element.createdCallback) {
- element.createdCallback();
- }
- }
- scope.upgrade = upgrade;
- scope.upgradeWithDefinition = upgradeWithDefinition;
- scope.implementPrototype = implementPrototype;
-});
-
-window.CustomElements.addModule(function(scope) {
- var isIE = scope.isIE;
- var upgradeDocumentTree = scope.upgradeDocumentTree;
- var upgradeAll = scope.upgradeAll;
- var upgradeWithDefinition = scope.upgradeWithDefinition;
- var implementPrototype = scope.implementPrototype;
- var useNative = scope.useNative;
- function register(name, options) {
- var definition = options || {};
- if (!name) {
- throw new Error("document.registerElement: first argument `name` must not be empty");
- }
- if (name.indexOf("-") < 0) {
- throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'.");
- }
- if (isReservedTag(name)) {
- throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid.");
- }
- if (getRegisteredDefinition(name)) {
- throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered");
- }
- if (!definition.prototype) {
- definition.prototype = Object.create(HTMLElement.prototype);
- }
- definition.__name = name.toLowerCase();
- if (definition.extends) {
- definition.extends = definition.extends.toLowerCase();
- }
- definition.lifecycle = definition.lifecycle || {};
- definition.ancestry = ancestry(definition.extends);
- resolveTagName(definition);
- resolvePrototypeChain(definition);
- overrideAttributeApi(definition.prototype);
- registerDefinition(definition.__name, definition);
- definition.ctor = generateConstructor(definition);
- definition.ctor.prototype = definition.prototype;
- definition.prototype.constructor = definition.ctor;
- if (scope.ready) {
- upgradeDocumentTree(document);
- }
- return definition.ctor;
- }
- function overrideAttributeApi(prototype) {
- if (prototype.setAttribute._polyfilled) {
- return;
- }
- var setAttribute = prototype.setAttribute;
- prototype.setAttribute = function(name, value) {
- changeAttribute.call(this, name, value, setAttribute);
- };
- var removeAttribute = prototype.removeAttribute;
- prototype.removeAttribute = function(name) {
- changeAttribute.call(this, name, null, removeAttribute);
- };
- prototype.setAttribute._polyfilled = true;
- }
- function changeAttribute(name, value, operation) {
- name = name.toLowerCase();
- var oldValue = this.getAttribute(name);
- operation.apply(this, arguments);
- var newValue = this.getAttribute(name);
- if (this.attributeChangedCallback && newValue !== oldValue) {
- this.attributeChangedCallback(name, oldValue, newValue);
- }
- }
- function isReservedTag(name) {
- for (var i = 0; i < reservedTagList.length; i++) {
- if (name === reservedTagList[i]) {
- return true;
- }
- }
- }
- var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ];
- function ancestry(extnds) {
- var extendee = getRegisteredDefinition(extnds);
- if (extendee) {
- return ancestry(extendee.extends).concat([ extendee ]);
- }
- return [];
- }
- function resolveTagName(definition) {
- var baseTag = definition.extends;
- for (var i = 0, a; a = definition.ancestry[i]; i++) {
- baseTag = a.is && a.tag;
- }
- definition.tag = baseTag || definition.__name;
- if (baseTag) {
- definition.is = definition.__name;
- }
- }
- function resolvePrototypeChain(definition) {
- if (!Object.__proto__) {
- var nativePrototype = HTMLElement.prototype;
- if (definition.is) {
- var inst = document.createElement(definition.tag);
- nativePrototype = Object.getPrototypeOf(inst);
- }
- var proto = definition.prototype, ancestor;
- var foundPrototype = false;
- while (proto) {
- if (proto == nativePrototype) {
- foundPrototype = true;
- }
- ancestor = Object.getPrototypeOf(proto);
- if (ancestor) {
- proto.__proto__ = ancestor;
- }
- proto = ancestor;
- }
- if (!foundPrototype) {
- console.warn(definition.tag + " prototype not found in prototype chain for " + definition.is);
- }
- definition.native = nativePrototype;
- }
- }
- function instantiate(definition) {
- return upgradeWithDefinition(domCreateElement(definition.tag), definition);
- }
- var registry = {};
- function getRegisteredDefinition(name) {
- if (name) {
- return registry[name.toLowerCase()];
- }
- }
- function registerDefinition(name, definition) {
- registry[name] = definition;
- }
- function generateConstructor(definition) {
- return function() {
- return instantiate(definition);
- };
- }
- var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
- function createElementNS(namespace, tag, typeExtension) {
- if (namespace === HTML_NAMESPACE) {
- return createElement(tag, typeExtension);
- } else {
- return domCreateElementNS(namespace, tag);
- }
- }
- function createElement(tag, typeExtension) {
- if (tag) {
- tag = tag.toLowerCase();
- }
- if (typeExtension) {
- typeExtension = typeExtension.toLowerCase();
- }
- var definition = getRegisteredDefinition(typeExtension || tag);
- if (definition) {
- if (tag == definition.tag && typeExtension == definition.is) {
- return new definition.ctor();
- }
- if (!typeExtension && !definition.is) {
- return new definition.ctor();
- }
- }
- var element;
- if (typeExtension) {
- element = createElement(tag);
- element.setAttribute("is", typeExtension);
- return element;
- }
- element = domCreateElement(tag);
- if (tag.indexOf("-") >= 0) {
- implementPrototype(element, HTMLElement);
- }
- return element;
- }
- var domCreateElement = document.createElement.bind(document);
- var domCreateElementNS = document.createElementNS.bind(document);
- var isInstance;
- if (!Object.__proto__ && !useNative) {
- isInstance = function(obj, ctor) {
- if (obj instanceof ctor) {
- return true;
- }
- var p = obj;
- while (p) {
- if (p === ctor.prototype) {
- return true;
- }
- p = p.__proto__;
- }
- return false;
- };
- } else {
- isInstance = function(obj, base) {
- return obj instanceof base;
- };
- }
- function wrapDomMethodToForceUpgrade(obj, methodName) {
- var orig = obj[methodName];
- obj[methodName] = function() {
- var n = orig.apply(this, arguments);
- upgradeAll(n);
- return n;
- };
- }
- wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode");
- wrapDomMethodToForceUpgrade(document, "importNode");
- document.registerElement = register;
- document.createElement = createElement;
- document.createElementNS = createElementNS;
- scope.registry = registry;
- scope.instanceof = isInstance;
- scope.reservedTagList = reservedTagList;
- scope.getRegisteredDefinition = getRegisteredDefinition;
- document.register = document.registerElement;
-});
-
-(function(scope) {
- var useNative = scope.useNative;
- var initializeModules = scope.initializeModules;
- var isIE = scope.isIE;
- if (useNative) {
- var nop = function() {};
- scope.watchShadow = nop;
- scope.upgrade = nop;
- scope.upgradeAll = nop;
- scope.upgradeDocumentTree = nop;
- scope.upgradeSubtree = nop;
- scope.takeRecords = nop;
- scope.instanceof = function(obj, base) {
- return obj instanceof base;
- };
- } else {
- initializeModules();
- }
- var upgradeDocumentTree = scope.upgradeDocumentTree;
- var upgradeDocument = scope.upgradeDocument;
- if (!window.wrap) {
- if (window.ShadowDOMPolyfill) {
- window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded;
- window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded;
- } else {
- window.wrap = window.unwrap = function(node) {
- return node;
- };
- }
- }
- if (window.HTMLImports) {
- window.HTMLImports.__importsParsingHook = function(elt) {
- if (elt.import) {
- upgradeDocument(wrap(elt.import));
- }
- };
- }
- function bootstrap() {
- upgradeDocumentTree(window.wrap(document));
- window.CustomElements.ready = true;
- var requestAnimationFrame = window.requestAnimationFrame || function(f) {
- setTimeout(f, 16);
- };
- requestAnimationFrame(function() {
- setTimeout(function() {
- window.CustomElements.readyTime = Date.now();
- if (window.HTMLImports) {
- window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime;
- }
- document.dispatchEvent(new CustomEvent("WebComponentsReady", {
- bubbles: true
- }));
- });
- });
- }
- if (document.readyState === "complete" || scope.flags.eager) {
- bootstrap();
- } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) {
- bootstrap();
- } else {
- var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded";
- window.addEventListener(loadEvent, bootstrap);
- }
-})(window.CustomElements);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/webcomponentsjs/HTMLImports.js b/dashboard-ui/bower_components/webcomponentsjs/HTMLImports.js
deleted file mode 100644
index cc8ac641d8..0000000000
--- a/dashboard-ui/bower_components/webcomponentsjs/HTMLImports.js
+++ /dev/null
@@ -1,1157 +0,0 @@
-/**
- * @license
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
-// @version 0.7.22
-if (typeof WeakMap === "undefined") {
- (function() {
- var defineProperty = Object.defineProperty;
- var counter = Date.now() % 1e9;
- var WeakMap = function() {
- this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
- };
- WeakMap.prototype = {
- set: function(key, value) {
- var entry = key[this.name];
- if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
- value: [ key, value ],
- writable: true
- });
- return this;
- },
- get: function(key) {
- var entry;
- return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
- },
- "delete": function(key) {
- var entry = key[this.name];
- if (!entry || entry[0] !== key) return false;
- entry[0] = entry[1] = undefined;
- return true;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
- }
- };
- window.WeakMap = WeakMap;
- })();
-}
-
-(function(global) {
- if (global.JsMutationObserver) {
- return;
- }
- var registrationsTable = new WeakMap();
- var setImmediate;
- if (/Trident|Edge/.test(navigator.userAgent)) {
- setImmediate = setTimeout;
- } else if (window.setImmediate) {
- setImmediate = window.setImmediate;
- } else {
- var setImmediateQueue = [];
- var sentinel = String(Math.random());
- window.addEventListener("message", function(e) {
- if (e.data === sentinel) {
- var queue = setImmediateQueue;
- setImmediateQueue = [];
- queue.forEach(function(func) {
- func();
- });
- }
- });
- setImmediate = function(func) {
- setImmediateQueue.push(func);
- window.postMessage(sentinel, "*");
- };
- }
- var isScheduled = false;
- var scheduledObservers = [];
- function scheduleCallback(observer) {
- scheduledObservers.push(observer);
- if (!isScheduled) {
- isScheduled = true;
- setImmediate(dispatchCallbacks);
- }
- }
- function wrapIfNeeded(node) {
- return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
- }
- function dispatchCallbacks() {
- isScheduled = false;
- var observers = scheduledObservers;
- scheduledObservers = [];
- observers.sort(function(o1, o2) {
- return o1.uid_ - o2.uid_;
- });
- var anyNonEmpty = false;
- observers.forEach(function(observer) {
- var queue = observer.takeRecords();
- removeTransientObserversFor(observer);
- if (queue.length) {
- observer.callback_(queue, observer);
- anyNonEmpty = true;
- }
- });
- if (anyNonEmpty) dispatchCallbacks();
- }
- function removeTransientObserversFor(observer) {
- observer.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- registrations.forEach(function(registration) {
- if (registration.observer === observer) registration.removeTransientObservers();
- });
- });
- }
- function forEachAncestorAndObserverEnqueueRecord(target, callback) {
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (registrations) {
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- var record = callback(options);
- if (record) registration.enqueue(record);
- }
- }
- }
- }
- var uidCounter = 0;
- function JsMutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- }
- JsMutationObserver.prototype = {
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
- throw new SyntaxError();
- }
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- var registration;
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeListeners();
- registration.options = options;
- break;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, options);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- registration.addListeners();
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registration.removeListeners();
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = [];
- this.removedNodes = [];
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function copyMutationRecord(original) {
- var record = new MutationRecord(original.type, original.target);
- record.addedNodes = original.addedNodes.slice();
- record.removedNodes = original.removedNodes.slice();
- record.previousSibling = original.previousSibling;
- record.nextSibling = original.nextSibling;
- record.attributeName = original.attributeName;
- record.attributeNamespace = original.attributeNamespace;
- record.oldValue = original.oldValue;
- return record;
- }
- var currentRecord, recordWithOldValue;
- function getRecord(type, target) {
- return currentRecord = new MutationRecord(type, target);
- }
- function getRecordWithOldValue(oldValue) {
- if (recordWithOldValue) return recordWithOldValue;
- recordWithOldValue = copyMutationRecord(currentRecord);
- recordWithOldValue.oldValue = oldValue;
- return recordWithOldValue;
- }
- function clearRecords() {
- currentRecord = recordWithOldValue = undefined;
- }
- function recordRepresentsCurrentMutation(record) {
- return record === recordWithOldValue || record === currentRecord;
- }
- function selectRecord(lastRecord, newRecord) {
- if (lastRecord === newRecord) return lastRecord;
- if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
- return null;
- }
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- enqueue: function(record) {
- var records = this.observer.records_;
- var length = records.length;
- if (records.length > 0) {
- var lastRecord = records[length - 1];
- var recordToReplaceLast = selectRecord(lastRecord, record);
- if (recordToReplaceLast) {
- records[length - 1] = recordToReplaceLast;
- return;
- }
- } else {
- scheduleCallback(this.observer);
- }
- records[length] = record;
- },
- addListeners: function() {
- this.addListeners_(this.target);
- },
- addListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
- },
- removeListeners: function() {
- this.removeListeners_(this.target);
- },
- removeListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
- },
- addTransientObserver: function(node) {
- if (node === this.target) return;
- this.addListeners_(node);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- transientObservedNodes.forEach(function(node) {
- this.removeListeners_(node);
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i] === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- },
- handleEvent: function(e) {
- e.stopImmediatePropagation();
- switch (e.type) {
- case "DOMAttrModified":
- var name = e.attrName;
- var namespace = e.relatedNode.namespaceURI;
- var target = e.target;
- var record = new getRecord("attributes", target);
- record.attributeName = name;
- record.attributeNamespace = namespace;
- var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.attributes) return;
- if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
- return;
- }
- if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMCharacterDataModified":
- var target = e.target;
- var record = getRecord("characterData", target);
- var oldValue = e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.characterData) return;
- if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMNodeRemoved":
- this.addTransientObserver(e.target);
-
- case "DOMNodeInserted":
- var changedNode = e.target;
- var addedNodes, removedNodes;
- if (e.type === "DOMNodeInserted") {
- addedNodes = [ changedNode ];
- removedNodes = [];
- } else {
- addedNodes = [];
- removedNodes = [ changedNode ];
- }
- var previousSibling = changedNode.previousSibling;
- var nextSibling = changedNode.nextSibling;
- var record = getRecord("childList", e.target.parentNode);
- record.addedNodes = addedNodes;
- record.removedNodes = removedNodes;
- record.previousSibling = previousSibling;
- record.nextSibling = nextSibling;
- forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
- if (!options.childList) return;
- return record;
- });
- }
- clearRecords();
- }
- };
- global.JsMutationObserver = JsMutationObserver;
- if (!global.MutationObserver) {
- global.MutationObserver = JsMutationObserver;
- JsMutationObserver._isPolyfilled = true;
- }
-})(self);
-
-(function(scope) {
- "use strict";
- if (!window.performance) {
- var start = Date.now();
- window.performance = {
- now: function() {
- return Date.now() - start;
- }
- };
- }
- if (!window.requestAnimationFrame) {
- window.requestAnimationFrame = function() {
- var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
- return nativeRaf ? function(callback) {
- return nativeRaf(function() {
- callback(performance.now());
- });
- } : function(callback) {
- return window.setTimeout(callback, 1e3 / 60);
- };
- }();
- }
- if (!window.cancelAnimationFrame) {
- window.cancelAnimationFrame = function() {
- return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) {
- clearTimeout(id);
- };
- }();
- }
- var workingDefaultPrevented = function() {
- var e = document.createEvent("Event");
- e.initEvent("foo", true, true);
- e.preventDefault();
- return e.defaultPrevented;
- }();
- if (!workingDefaultPrevented) {
- var origPreventDefault = Event.prototype.preventDefault;
- Event.prototype.preventDefault = function() {
- if (!this.cancelable) {
- return;
- }
- origPreventDefault.call(this);
- Object.defineProperty(this, "defaultPrevented", {
- get: function() {
- return true;
- },
- configurable: true
- });
- };
- }
- var isIE = /Trident/.test(navigator.userAgent);
- if (!window.CustomEvent || isIE && typeof window.CustomEvent !== "function") {
- window.CustomEvent = function(inType, params) {
- params = params || {};
- var e = document.createEvent("CustomEvent");
- e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);
- return e;
- };
- window.CustomEvent.prototype = window.Event.prototype;
- }
- if (!window.Event || isIE && typeof window.Event !== "function") {
- var origEvent = window.Event;
- window.Event = function(inType, params) {
- params = params || {};
- var e = document.createEvent("Event");
- e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));
- return e;
- };
- window.Event.prototype = origEvent.prototype;
- }
-})(window.WebComponents);
-
-window.HTMLImports = window.HTMLImports || {
- flags: {}
-};
-
-(function(scope) {
- var IMPORT_LINK_TYPE = "import";
- var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link"));
- var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill);
- var wrap = function(node) {
- return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node;
- };
- var rootDocument = wrap(document);
- var currentScriptDescriptor = {
- get: function() {
- var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null);
- return wrap(script);
- },
- configurable: true
- };
- Object.defineProperty(document, "_currentScript", currentScriptDescriptor);
- Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor);
- var isIE = /Trident/.test(navigator.userAgent);
- function whenReady(callback, doc) {
- doc = doc || rootDocument;
- whenDocumentReady(function() {
- watchImportsLoad(callback, doc);
- }, doc);
- }
- var requiredReadyState = isIE ? "complete" : "interactive";
- var READY_EVENT = "readystatechange";
- function isDocumentReady(doc) {
- return doc.readyState === "complete" || doc.readyState === requiredReadyState;
- }
- function whenDocumentReady(callback, doc) {
- if (!isDocumentReady(doc)) {
- var checkReady = function() {
- if (doc.readyState === "complete" || doc.readyState === requiredReadyState) {
- doc.removeEventListener(READY_EVENT, checkReady);
- whenDocumentReady(callback, doc);
- }
- };
- doc.addEventListener(READY_EVENT, checkReady);
- } else if (callback) {
- callback();
- }
- }
- function markTargetLoaded(event) {
- event.target.__loaded = true;
- }
- function watchImportsLoad(callback, doc) {
- var imports = doc.querySelectorAll("link[rel=import]");
- var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = [];
- function checkDone() {
- if (parsedCount == importCount && callback) {
- callback({
- allImports: imports,
- loadedImports: newImports,
- errorImports: errorImports
- });
- }
- }
- function loadedImport(e) {
- markTargetLoaded(e);
- newImports.push(this);
- parsedCount++;
- checkDone();
- }
- function errorLoadingImport(e) {
- errorImports.push(this);
- parsedCount++;
- checkDone();
- }
- if (importCount) {
- for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) {
- if (isImportLoaded(imp)) {
- newImports.push(this);
- parsedCount++;
- checkDone();
- } else {
- imp.addEventListener("load", loadedImport);
- imp.addEventListener("error", errorLoadingImport);
- }
- }
- } else {
- checkDone();
- }
- }
- function isImportLoaded(link) {
- return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed;
- }
- if (useNative) {
- new MutationObserver(function(mxns) {
- for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) {
- if (m.addedNodes) {
- handleImports(m.addedNodes);
- }
- }
- }).observe(document.head, {
- childList: true
- });
- function handleImports(nodes) {
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (isImport(n)) {
- handleImport(n);
- }
- }
- }
- function isImport(element) {
- return element.localName === "link" && element.rel === "import";
- }
- function handleImport(element) {
- var loaded = element.import;
- if (loaded) {
- markTargetLoaded({
- target: element
- });
- } else {
- element.addEventListener("load", markTargetLoaded);
- element.addEventListener("error", markTargetLoaded);
- }
- }
- (function() {
- if (document.readyState === "loading") {
- var imports = document.querySelectorAll("link[rel=import]");
- for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) {
- handleImport(imp);
- }
- }
- })();
- }
- whenReady(function(detail) {
- window.HTMLImports.ready = true;
- window.HTMLImports.readyTime = new Date().getTime();
- var evt = rootDocument.createEvent("CustomEvent");
- evt.initCustomEvent("HTMLImportsLoaded", true, true, detail);
- rootDocument.dispatchEvent(evt);
- });
- scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;
- scope.useNative = useNative;
- scope.rootDocument = rootDocument;
- scope.whenReady = whenReady;
- scope.isIE = isIE;
-})(window.HTMLImports);
-
-(function(scope) {
- var modules = [];
- var addModule = function(module) {
- modules.push(module);
- };
- var initializeModules = function() {
- modules.forEach(function(module) {
- module(scope);
- });
- };
- scope.addModule = addModule;
- scope.initializeModules = initializeModules;
-})(window.HTMLImports);
-
-window.HTMLImports.addModule(function(scope) {
- var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g;
- var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g;
- var path = {
- resolveUrlsInStyle: function(style, linkUrl) {
- var doc = style.ownerDocument;
- var resolver = doc.createElement("a");
- style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver);
- return style;
- },
- resolveUrlsInCssText: function(cssText, linkUrl, urlObj) {
- var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP);
- r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP);
- return r;
- },
- replaceUrls: function(text, urlObj, linkUrl, regexp) {
- return text.replace(regexp, function(m, pre, url, post) {
- var urlPath = url.replace(/["']/g, "");
- if (linkUrl) {
- urlPath = new URL(urlPath, linkUrl).href;
- }
- urlObj.href = urlPath;
- urlPath = urlObj.href;
- return pre + "'" + urlPath + "'" + post;
- });
- }
- };
- scope.path = path;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var xhr = {
- async: true,
- ok: function(request) {
- return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0;
- },
- load: function(url, next, nextContext) {
- var request = new XMLHttpRequest();
- if (scope.flags.debug || scope.flags.bust) {
- url += "?" + Math.random();
- }
- request.open("GET", url, xhr.async);
- request.addEventListener("readystatechange", function(e) {
- if (request.readyState === 4) {
- var redirectedUrl = null;
- try {
- var locationHeader = request.getResponseHeader("Location");
- if (locationHeader) {
- redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader;
- }
- } catch (e) {
- console.error(e.message);
- }
- next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl);
- }
- });
- request.send();
- return request;
- },
- loadDocument: function(url, next, nextContext) {
- this.load(url, next, nextContext).responseType = "document";
- }
- };
- scope.xhr = xhr;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var xhr = scope.xhr;
- var flags = scope.flags;
- var Loader = function(onLoad, onComplete) {
- this.cache = {};
- this.onload = onLoad;
- this.oncomplete = onComplete;
- this.inflight = 0;
- this.pending = {};
- };
- Loader.prototype = {
- addNodes: function(nodes) {
- this.inflight += nodes.length;
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- this.require(n);
- }
- this.checkDone();
- },
- addNode: function(node) {
- this.inflight++;
- this.require(node);
- this.checkDone();
- },
- require: function(elt) {
- var url = elt.src || elt.href;
- elt.__nodeUrl = url;
- if (!this.dedupe(url, elt)) {
- this.fetch(url, elt);
- }
- },
- dedupe: function(url, elt) {
- if (this.pending[url]) {
- this.pending[url].push(elt);
- return true;
- }
- var resource;
- if (this.cache[url]) {
- this.onload(url, elt, this.cache[url]);
- this.tail();
- return true;
- }
- this.pending[url] = [ elt ];
- return false;
- },
- fetch: function(url, elt) {
- flags.load && console.log("fetch", url, elt);
- if (!url) {
- setTimeout(function() {
- this.receive(url, elt, {
- error: "href must be specified"
- }, null);
- }.bind(this), 0);
- } else if (url.match(/^data:/)) {
- var pieces = url.split(",");
- var header = pieces[0];
- var body = pieces[1];
- if (header.indexOf(";base64") > -1) {
- body = atob(body);
- } else {
- body = decodeURIComponent(body);
- }
- setTimeout(function() {
- this.receive(url, elt, null, body);
- }.bind(this), 0);
- } else {
- var receiveXhr = function(err, resource, redirectedUrl) {
- this.receive(url, elt, err, resource, redirectedUrl);
- }.bind(this);
- xhr.load(url, receiveXhr);
- }
- },
- receive: function(url, elt, err, resource, redirectedUrl) {
- this.cache[url] = resource;
- var $p = this.pending[url];
- for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
- this.onload(url, p, resource, err, redirectedUrl);
- this.tail();
- }
- this.pending[url] = null;
- },
- tail: function() {
- --this.inflight;
- this.checkDone();
- },
- checkDone: function() {
- if (!this.inflight) {
- this.oncomplete();
- }
- }
- };
- scope.Loader = Loader;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var Observer = function(addCallback) {
- this.addCallback = addCallback;
- this.mo = new MutationObserver(this.handler.bind(this));
- };
- Observer.prototype = {
- handler: function(mutations) {
- for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) {
- if (m.type === "childList" && m.addedNodes.length) {
- this.addedNodes(m.addedNodes);
- }
- }
- },
- addedNodes: function(nodes) {
- if (this.addCallback) {
- this.addCallback(nodes);
- }
- for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) {
- if (n.children && n.children.length) {
- this.addedNodes(n.children);
- }
- }
- },
- observe: function(root) {
- this.mo.observe(root, {
- childList: true,
- subtree: true
- });
- }
- };
- scope.Observer = Observer;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var path = scope.path;
- var rootDocument = scope.rootDocument;
- var flags = scope.flags;
- var isIE = scope.isIE;
- var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
- var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]";
- var importParser = {
- documentSelectors: IMPORT_SELECTOR,
- importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]:not([type])", "style:not([type])", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","),
- map: {
- link: "parseLink",
- script: "parseScript",
- style: "parseStyle"
- },
- dynamicElements: [],
- parseNext: function() {
- var next = this.nextToParse();
- if (next) {
- this.parse(next);
- }
- },
- parse: function(elt) {
- if (this.isParsed(elt)) {
- flags.parse && console.log("[%s] is already parsed", elt.localName);
- return;
- }
- var fn = this[this.map[elt.localName]];
- if (fn) {
- this.markParsing(elt);
- fn.call(this, elt);
- }
- },
- parseDynamic: function(elt, quiet) {
- this.dynamicElements.push(elt);
- if (!quiet) {
- this.parseNext();
- }
- },
- markParsing: function(elt) {
- flags.parse && console.log("parsing", elt);
- this.parsingElement = elt;
- },
- markParsingComplete: function(elt) {
- elt.__importParsed = true;
- this.markDynamicParsingComplete(elt);
- if (elt.__importElement) {
- elt.__importElement.__importParsed = true;
- this.markDynamicParsingComplete(elt.__importElement);
- }
- this.parsingElement = null;
- flags.parse && console.log("completed", elt);
- },
- markDynamicParsingComplete: function(elt) {
- var i = this.dynamicElements.indexOf(elt);
- if (i >= 0) {
- this.dynamicElements.splice(i, 1);
- }
- },
- parseImport: function(elt) {
- elt.import = elt.__doc;
- if (window.HTMLImports.__importsParsingHook) {
- window.HTMLImports.__importsParsingHook(elt);
- }
- if (elt.import) {
- elt.import.__importParsed = true;
- }
- this.markParsingComplete(elt);
- if (elt.__resource && !elt.__error) {
- elt.dispatchEvent(new CustomEvent("load", {
- bubbles: false
- }));
- } else {
- elt.dispatchEvent(new CustomEvent("error", {
- bubbles: false
- }));
- }
- if (elt.__pending) {
- var fn;
- while (elt.__pending.length) {
- fn = elt.__pending.shift();
- if (fn) {
- fn({
- target: elt
- });
- }
- }
- }
- this.parseNext();
- },
- parseLink: function(linkElt) {
- if (nodeIsImport(linkElt)) {
- this.parseImport(linkElt);
- } else {
- linkElt.href = linkElt.href;
- this.parseGeneric(linkElt);
- }
- },
- parseStyle: function(elt) {
- var src = elt;
- elt = cloneStyle(elt);
- src.__appliedElement = elt;
- elt.__importElement = src;
- this.parseGeneric(elt);
- },
- parseGeneric: function(elt) {
- this.trackElement(elt);
- this.addElementToDocument(elt);
- },
- rootImportForElement: function(elt) {
- var n = elt;
- while (n.ownerDocument.__importLink) {
- n = n.ownerDocument.__importLink;
- }
- return n;
- },
- addElementToDocument: function(elt) {
- var port = this.rootImportForElement(elt.__importElement || elt);
- port.parentNode.insertBefore(elt, port);
- },
- trackElement: function(elt, callback) {
- var self = this;
- var done = function(e) {
- elt.removeEventListener("load", done);
- elt.removeEventListener("error", done);
- if (callback) {
- callback(e);
- }
- self.markParsingComplete(elt);
- self.parseNext();
- };
- elt.addEventListener("load", done);
- elt.addEventListener("error", done);
- if (isIE && elt.localName === "style") {
- var fakeLoad = false;
- if (elt.textContent.indexOf("@import") == -1) {
- fakeLoad = true;
- } else if (elt.sheet) {
- fakeLoad = true;
- var csr = elt.sheet.cssRules;
- var len = csr ? csr.length : 0;
- for (var i = 0, r; i < len && (r = csr[i]); i++) {
- if (r.type === CSSRule.IMPORT_RULE) {
- fakeLoad = fakeLoad && Boolean(r.styleSheet);
- }
- }
- }
- if (fakeLoad) {
- setTimeout(function() {
- elt.dispatchEvent(new CustomEvent("load", {
- bubbles: false
- }));
- });
- }
- }
- },
- parseScript: function(scriptElt) {
- var script = document.createElement("script");
- script.__importElement = scriptElt;
- script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt);
- scope.currentScript = scriptElt;
- this.trackElement(script, function(e) {
- if (script.parentNode) {
- script.parentNode.removeChild(script);
- }
- scope.currentScript = null;
- });
- this.addElementToDocument(script);
- },
- nextToParse: function() {
- this._mayParse = [];
- return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic());
- },
- nextToParseInDoc: function(doc, link) {
- if (doc && this._mayParse.indexOf(doc) < 0) {
- this._mayParse.push(doc);
- var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc));
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (!this.isParsed(n)) {
- if (this.hasResource(n)) {
- return nodeIsImport(n) ? this.nextToParseInDoc(n.__doc, n) : n;
- } else {
- return;
- }
- }
- }
- }
- return link;
- },
- nextToParseDynamic: function() {
- return this.dynamicElements[0];
- },
- parseSelectorsForNode: function(node) {
- var doc = node.ownerDocument || node;
- return doc === rootDocument ? this.documentSelectors : this.importsSelectors;
- },
- isParsed: function(node) {
- return node.__importParsed;
- },
- needsDynamicParsing: function(elt) {
- return this.dynamicElements.indexOf(elt) >= 0;
- },
- hasResource: function(node) {
- if (nodeIsImport(node) && node.__doc === undefined) {
- return false;
- }
- return true;
- }
- };
- function nodeIsImport(elt) {
- return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE;
- }
- function generateScriptDataUrl(script) {
- var scriptContent = generateScriptContent(script);
- return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent);
- }
- function generateScriptContent(script) {
- return script.textContent + generateSourceMapHint(script);
- }
- function generateSourceMapHint(script) {
- var owner = script.ownerDocument;
- owner.__importedScripts = owner.__importedScripts || 0;
- var moniker = script.ownerDocument.baseURI;
- var num = owner.__importedScripts ? "-" + owner.__importedScripts : "";
- owner.__importedScripts++;
- return "\n//# sourceURL=" + moniker + num + ".js\n";
- }
- function cloneStyle(style) {
- var clone = style.ownerDocument.createElement("style");
- clone.textContent = style.textContent;
- path.resolveUrlsInStyle(clone);
- return clone;
- }
- scope.parser = importParser;
- scope.IMPORT_SELECTOR = IMPORT_SELECTOR;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var flags = scope.flags;
- var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
- var IMPORT_SELECTOR = scope.IMPORT_SELECTOR;
- var rootDocument = scope.rootDocument;
- var Loader = scope.Loader;
- var Observer = scope.Observer;
- var parser = scope.parser;
- var importer = {
- documents: {},
- documentPreloadSelectors: IMPORT_SELECTOR,
- importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","),
- loadNode: function(node) {
- importLoader.addNode(node);
- },
- loadSubtree: function(parent) {
- var nodes = this.marshalNodes(parent);
- importLoader.addNodes(nodes);
- },
- marshalNodes: function(parent) {
- return parent.querySelectorAll(this.loadSelectorsForNode(parent));
- },
- loadSelectorsForNode: function(node) {
- var doc = node.ownerDocument || node;
- return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors;
- },
- loaded: function(url, elt, resource, err, redirectedUrl) {
- flags.load && console.log("loaded", url, elt);
- elt.__resource = resource;
- elt.__error = err;
- if (isImportLink(elt)) {
- var doc = this.documents[url];
- if (doc === undefined) {
- doc = err ? null : makeDocument(resource, redirectedUrl || url);
- if (doc) {
- doc.__importLink = elt;
- this.bootDocument(doc);
- }
- this.documents[url] = doc;
- }
- elt.__doc = doc;
- }
- parser.parseNext();
- },
- bootDocument: function(doc) {
- this.loadSubtree(doc);
- this.observer.observe(doc);
- parser.parseNext();
- },
- loadedAll: function() {
- parser.parseNext();
- }
- };
- var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer));
- importer.observer = new Observer();
- function isImportLink(elt) {
- return isLinkRel(elt, IMPORT_LINK_TYPE);
- }
- function isLinkRel(elt, rel) {
- return elt.localName === "link" && elt.getAttribute("rel") === rel;
- }
- function hasBaseURIAccessor(doc) {
- return !!Object.getOwnPropertyDescriptor(doc, "baseURI");
- }
- function makeDocument(resource, url) {
- var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE);
- doc._URL = url;
- var base = doc.createElement("base");
- base.setAttribute("href", url);
- if (!doc.baseURI && !hasBaseURIAccessor(doc)) {
- Object.defineProperty(doc, "baseURI", {
- value: url
- });
- }
- var meta = doc.createElement("meta");
- meta.setAttribute("charset", "utf-8");
- doc.head.appendChild(meta);
- doc.head.appendChild(base);
- doc.body.innerHTML = resource;
- if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {
- HTMLTemplateElement.bootstrap(doc);
- }
- return doc;
- }
- if (!document.baseURI) {
- var baseURIDescriptor = {
- get: function() {
- var base = document.querySelector("base");
- return base ? base.href : window.location.href;
- },
- configurable: true
- };
- Object.defineProperty(document, "baseURI", baseURIDescriptor);
- Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor);
- }
- scope.importer = importer;
- scope.importLoader = importLoader;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var parser = scope.parser;
- var importer = scope.importer;
- var dynamic = {
- added: function(nodes) {
- var owner, parsed, loading;
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (!owner) {
- owner = n.ownerDocument;
- parsed = parser.isParsed(owner);
- }
- loading = this.shouldLoadNode(n);
- if (loading) {
- importer.loadNode(n);
- }
- if (this.shouldParseNode(n) && parsed) {
- parser.parseDynamic(n, loading);
- }
- }
- },
- shouldLoadNode: function(node) {
- return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node));
- },
- shouldParseNode: function(node) {
- return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node));
- }
- };
- importer.observer.addCallback = dynamic.added.bind(dynamic);
- var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector;
-});
-
-(function(scope) {
- var initializeModules = scope.initializeModules;
- var isIE = scope.isIE;
- if (scope.useNative) {
- return;
- }
- initializeModules();
- var rootDocument = scope.rootDocument;
- function bootstrap() {
- window.HTMLImports.importer.bootDocument(rootDocument);
- }
- if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) {
- bootstrap();
- } else {
- document.addEventListener("DOMContentLoaded", bootstrap);
- }
-})(window.HTMLImports);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/webcomponentsjs/MutationObserver.js b/dashboard-ui/bower_components/webcomponentsjs/MutationObserver.js
deleted file mode 100644
index e58713b6a8..0000000000
--- a/dashboard-ui/bower_components/webcomponentsjs/MutationObserver.js
+++ /dev/null
@@ -1,350 +0,0 @@
-/**
- * @license
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
-// @version 0.7.22
-if (typeof WeakMap === "undefined") {
- (function() {
- var defineProperty = Object.defineProperty;
- var counter = Date.now() % 1e9;
- var WeakMap = function() {
- this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
- };
- WeakMap.prototype = {
- set: function(key, value) {
- var entry = key[this.name];
- if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
- value: [ key, value ],
- writable: true
- });
- return this;
- },
- get: function(key) {
- var entry;
- return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
- },
- "delete": function(key) {
- var entry = key[this.name];
- if (!entry || entry[0] !== key) return false;
- entry[0] = entry[1] = undefined;
- return true;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
- }
- };
- window.WeakMap = WeakMap;
- })();
-}
-
-(function(global) {
- if (global.JsMutationObserver) {
- return;
- }
- var registrationsTable = new WeakMap();
- var setImmediate;
- if (/Trident|Edge/.test(navigator.userAgent)) {
- setImmediate = setTimeout;
- } else if (window.setImmediate) {
- setImmediate = window.setImmediate;
- } else {
- var setImmediateQueue = [];
- var sentinel = String(Math.random());
- window.addEventListener("message", function(e) {
- if (e.data === sentinel) {
- var queue = setImmediateQueue;
- setImmediateQueue = [];
- queue.forEach(function(func) {
- func();
- });
- }
- });
- setImmediate = function(func) {
- setImmediateQueue.push(func);
- window.postMessage(sentinel, "*");
- };
- }
- var isScheduled = false;
- var scheduledObservers = [];
- function scheduleCallback(observer) {
- scheduledObservers.push(observer);
- if (!isScheduled) {
- isScheduled = true;
- setImmediate(dispatchCallbacks);
- }
- }
- function wrapIfNeeded(node) {
- return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
- }
- function dispatchCallbacks() {
- isScheduled = false;
- var observers = scheduledObservers;
- scheduledObservers = [];
- observers.sort(function(o1, o2) {
- return o1.uid_ - o2.uid_;
- });
- var anyNonEmpty = false;
- observers.forEach(function(observer) {
- var queue = observer.takeRecords();
- removeTransientObserversFor(observer);
- if (queue.length) {
- observer.callback_(queue, observer);
- anyNonEmpty = true;
- }
- });
- if (anyNonEmpty) dispatchCallbacks();
- }
- function removeTransientObserversFor(observer) {
- observer.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- registrations.forEach(function(registration) {
- if (registration.observer === observer) registration.removeTransientObservers();
- });
- });
- }
- function forEachAncestorAndObserverEnqueueRecord(target, callback) {
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (registrations) {
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- var record = callback(options);
- if (record) registration.enqueue(record);
- }
- }
- }
- }
- var uidCounter = 0;
- function JsMutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- }
- JsMutationObserver.prototype = {
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
- throw new SyntaxError();
- }
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- var registration;
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeListeners();
- registration.options = options;
- break;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, options);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- registration.addListeners();
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registration.removeListeners();
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = [];
- this.removedNodes = [];
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function copyMutationRecord(original) {
- var record = new MutationRecord(original.type, original.target);
- record.addedNodes = original.addedNodes.slice();
- record.removedNodes = original.removedNodes.slice();
- record.previousSibling = original.previousSibling;
- record.nextSibling = original.nextSibling;
- record.attributeName = original.attributeName;
- record.attributeNamespace = original.attributeNamespace;
- record.oldValue = original.oldValue;
- return record;
- }
- var currentRecord, recordWithOldValue;
- function getRecord(type, target) {
- return currentRecord = new MutationRecord(type, target);
- }
- function getRecordWithOldValue(oldValue) {
- if (recordWithOldValue) return recordWithOldValue;
- recordWithOldValue = copyMutationRecord(currentRecord);
- recordWithOldValue.oldValue = oldValue;
- return recordWithOldValue;
- }
- function clearRecords() {
- currentRecord = recordWithOldValue = undefined;
- }
- function recordRepresentsCurrentMutation(record) {
- return record === recordWithOldValue || record === currentRecord;
- }
- function selectRecord(lastRecord, newRecord) {
- if (lastRecord === newRecord) return lastRecord;
- if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
- return null;
- }
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- enqueue: function(record) {
- var records = this.observer.records_;
- var length = records.length;
- if (records.length > 0) {
- var lastRecord = records[length - 1];
- var recordToReplaceLast = selectRecord(lastRecord, record);
- if (recordToReplaceLast) {
- records[length - 1] = recordToReplaceLast;
- return;
- }
- } else {
- scheduleCallback(this.observer);
- }
- records[length] = record;
- },
- addListeners: function() {
- this.addListeners_(this.target);
- },
- addListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
- },
- removeListeners: function() {
- this.removeListeners_(this.target);
- },
- removeListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
- },
- addTransientObserver: function(node) {
- if (node === this.target) return;
- this.addListeners_(node);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- transientObservedNodes.forEach(function(node) {
- this.removeListeners_(node);
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i] === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- },
- handleEvent: function(e) {
- e.stopImmediatePropagation();
- switch (e.type) {
- case "DOMAttrModified":
- var name = e.attrName;
- var namespace = e.relatedNode.namespaceURI;
- var target = e.target;
- var record = new getRecord("attributes", target);
- record.attributeName = name;
- record.attributeNamespace = namespace;
- var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.attributes) return;
- if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
- return;
- }
- if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMCharacterDataModified":
- var target = e.target;
- var record = getRecord("characterData", target);
- var oldValue = e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.characterData) return;
- if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMNodeRemoved":
- this.addTransientObserver(e.target);
-
- case "DOMNodeInserted":
- var changedNode = e.target;
- var addedNodes, removedNodes;
- if (e.type === "DOMNodeInserted") {
- addedNodes = [ changedNode ];
- removedNodes = [];
- } else {
- addedNodes = [];
- removedNodes = [ changedNode ];
- }
- var previousSibling = changedNode.previousSibling;
- var nextSibling = changedNode.nextSibling;
- var record = getRecord("childList", e.target.parentNode);
- record.addedNodes = addedNodes;
- record.removedNodes = removedNodes;
- record.previousSibling = previousSibling;
- record.nextSibling = nextSibling;
- forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
- if (!options.childList) return;
- return record;
- });
- }
- clearRecords();
- }
- };
- global.JsMutationObserver = JsMutationObserver;
- if (!global.MutationObserver) {
- global.MutationObserver = JsMutationObserver;
- JsMutationObserver._isPolyfilled = true;
- }
-})(self);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/webcomponentsjs/ShadowDOM.js b/dashboard-ui/bower_components/webcomponentsjs/ShadowDOM.js
deleted file mode 100644
index 5a59b4da12..0000000000
--- a/dashboard-ui/bower_components/webcomponentsjs/ShadowDOM.js
+++ /dev/null
@@ -1,4493 +0,0 @@
-/**
- * @license
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
-// @version 0.7.22
-if (typeof WeakMap === "undefined") {
- (function() {
- var defineProperty = Object.defineProperty;
- var counter = Date.now() % 1e9;
- var WeakMap = function() {
- this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
- };
- WeakMap.prototype = {
- set: function(key, value) {
- var entry = key[this.name];
- if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
- value: [ key, value ],
- writable: true
- });
- return this;
- },
- get: function(key) {
- var entry;
- return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
- },
- "delete": function(key) {
- var entry = key[this.name];
- if (!entry || entry[0] !== key) return false;
- entry[0] = entry[1] = undefined;
- return true;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
- }
- };
- window.WeakMap = WeakMap;
- })();
-}
-
-window.ShadowDOMPolyfill = {};
-
-(function(scope) {
- "use strict";
- var constructorTable = new WeakMap();
- var nativePrototypeTable = new WeakMap();
- var wrappers = Object.create(null);
- function detectEval() {
- if (typeof chrome !== "undefined" && chrome.app && chrome.app.runtime) {
- return false;
- }
- if (navigator.getDeviceStorage) {
- return false;
- }
- try {
- var f = new Function("return true;");
- return f();
- } catch (ex) {
- return false;
- }
- }
- var hasEval = detectEval();
- function assert(b) {
- if (!b) throw new Error("Assertion failed");
- }
- var defineProperty = Object.defineProperty;
- var getOwnPropertyNames = Object.getOwnPropertyNames;
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- function mixin(to, from) {
- var names = getOwnPropertyNames(from);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- defineProperty(to, name, getOwnPropertyDescriptor(from, name));
- }
- return to;
- }
- function mixinStatics(to, from) {
- var names = getOwnPropertyNames(from);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- switch (name) {
- case "arguments":
- case "caller":
- case "length":
- case "name":
- case "prototype":
- case "toString":
- continue;
- }
- defineProperty(to, name, getOwnPropertyDescriptor(from, name));
- }
- return to;
- }
- function oneOf(object, propertyNames) {
- for (var i = 0; i < propertyNames.length; i++) {
- if (propertyNames[i] in object) return propertyNames[i];
- }
- }
- var nonEnumerableDataDescriptor = {
- value: undefined,
- configurable: true,
- enumerable: false,
- writable: true
- };
- function defineNonEnumerableDataProperty(object, name, value) {
- nonEnumerableDataDescriptor.value = value;
- defineProperty(object, name, nonEnumerableDataDescriptor);
- }
- getOwnPropertyNames(window);
- function getWrapperConstructor(node, opt_instance) {
- var nativePrototype = node.__proto__ || Object.getPrototypeOf(node);
- if (isFirefox) {
- try {
- getOwnPropertyNames(nativePrototype);
- } catch (error) {
- nativePrototype = nativePrototype.__proto__;
- }
- }
- var wrapperConstructor = constructorTable.get(nativePrototype);
- if (wrapperConstructor) return wrapperConstructor;
- var parentWrapperConstructor = getWrapperConstructor(nativePrototype);
- var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);
- registerInternal(nativePrototype, GeneratedWrapper, opt_instance);
- return GeneratedWrapper;
- }
- function addForwardingProperties(nativePrototype, wrapperPrototype) {
- installProperty(nativePrototype, wrapperPrototype, true);
- }
- function registerInstanceProperties(wrapperPrototype, instanceObject) {
- installProperty(instanceObject, wrapperPrototype, false);
- }
- var isFirefox = /Firefox/.test(navigator.userAgent);
- var dummyDescriptor = {
- get: function() {},
- set: function(v) {},
- configurable: true,
- enumerable: true
- };
- function isEventHandlerName(name) {
- return /^on[a-z]+$/.test(name);
- }
- function isIdentifierName(name) {
- return /^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(name);
- }
- function getGetter(name) {
- return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name) : function() {
- return this.__impl4cf1e782hg__[name];
- };
- }
- function getSetter(name) {
- return hasEval && isIdentifierName(name) ? new Function("v", "this.__impl4cf1e782hg__." + name + " = v") : function(v) {
- this.__impl4cf1e782hg__[name] = v;
- };
- }
- function getMethod(name) {
- return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name + ".apply(this.__impl4cf1e782hg__, arguments)") : function() {
- return this.__impl4cf1e782hg__[name].apply(this.__impl4cf1e782hg__, arguments);
- };
- }
- function getDescriptor(source, name) {
- try {
- return Object.getOwnPropertyDescriptor(source, name);
- } catch (ex) {
- return dummyDescriptor;
- }
- }
- var isBrokenSafari = function() {
- var descr = Object.getOwnPropertyDescriptor(Node.prototype, "nodeType");
- return descr && !descr.get && !descr.set;
- }();
- function installProperty(source, target, allowMethod, opt_blacklist) {
- var names = getOwnPropertyNames(source);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- if (name === "polymerBlackList_") continue;
- if (name in target) continue;
- if (source.polymerBlackList_ && source.polymerBlackList_[name]) continue;
- if (isFirefox) {
- source.__lookupGetter__(name);
- }
- var descriptor = getDescriptor(source, name);
- var getter, setter;
- if (typeof descriptor.value === "function") {
- if (allowMethod) {
- target[name] = getMethod(name);
- }
- continue;
- }
- var isEvent = isEventHandlerName(name);
- if (isEvent) getter = scope.getEventHandlerGetter(name); else getter = getGetter(name);
- if (descriptor.writable || descriptor.set || isBrokenSafari) {
- if (isEvent) setter = scope.getEventHandlerSetter(name); else setter = getSetter(name);
- }
- var configurable = isBrokenSafari || descriptor.configurable;
- defineProperty(target, name, {
- get: getter,
- set: setter,
- configurable: configurable,
- enumerable: descriptor.enumerable
- });
- }
- }
- function register(nativeConstructor, wrapperConstructor, opt_instance) {
- if (nativeConstructor == null) {
- return;
- }
- var nativePrototype = nativeConstructor.prototype;
- registerInternal(nativePrototype, wrapperConstructor, opt_instance);
- mixinStatics(wrapperConstructor, nativeConstructor);
- }
- function registerInternal(nativePrototype, wrapperConstructor, opt_instance) {
- var wrapperPrototype = wrapperConstructor.prototype;
- assert(constructorTable.get(nativePrototype) === undefined);
- constructorTable.set(nativePrototype, wrapperConstructor);
- nativePrototypeTable.set(wrapperPrototype, nativePrototype);
- addForwardingProperties(nativePrototype, wrapperPrototype);
- if (opt_instance) registerInstanceProperties(wrapperPrototype, opt_instance);
- defineNonEnumerableDataProperty(wrapperPrototype, "constructor", wrapperConstructor);
- wrapperConstructor.prototype = wrapperPrototype;
- }
- function isWrapperFor(wrapperConstructor, nativeConstructor) {
- return constructorTable.get(nativeConstructor.prototype) === wrapperConstructor;
- }
- function registerObject(object) {
- var nativePrototype = Object.getPrototypeOf(object);
- var superWrapperConstructor = getWrapperConstructor(nativePrototype);
- var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);
- registerInternal(nativePrototype, GeneratedWrapper, object);
- return GeneratedWrapper;
- }
- function createWrapperConstructor(superWrapperConstructor) {
- function GeneratedWrapper(node) {
- superWrapperConstructor.call(this, node);
- }
- var p = Object.create(superWrapperConstructor.prototype);
- p.constructor = GeneratedWrapper;
- GeneratedWrapper.prototype = p;
- return GeneratedWrapper;
- }
- function isWrapper(object) {
- return object && object.__impl4cf1e782hg__;
- }
- function isNative(object) {
- return !isWrapper(object);
- }
- function wrap(impl) {
- if (impl === null) return null;
- assert(isNative(impl));
- var wrapper = impl.__wrapper8e3dd93a60__;
- if (wrapper != null) {
- return wrapper;
- }
- return impl.__wrapper8e3dd93a60__ = new (getWrapperConstructor(impl, impl))(impl);
- }
- function unwrap(wrapper) {
- if (wrapper === null) return null;
- assert(isWrapper(wrapper));
- return wrapper.__impl4cf1e782hg__;
- }
- function unsafeUnwrap(wrapper) {
- return wrapper.__impl4cf1e782hg__;
- }
- function setWrapper(impl, wrapper) {
- wrapper.__impl4cf1e782hg__ = impl;
- impl.__wrapper8e3dd93a60__ = wrapper;
- }
- function unwrapIfNeeded(object) {
- return object && isWrapper(object) ? unwrap(object) : object;
- }
- function wrapIfNeeded(object) {
- return object && !isWrapper(object) ? wrap(object) : object;
- }
- function rewrap(node, wrapper) {
- if (wrapper === null) return;
- assert(isNative(node));
- assert(wrapper === undefined || isWrapper(wrapper));
- node.__wrapper8e3dd93a60__ = wrapper;
- }
- var getterDescriptor = {
- get: undefined,
- configurable: true,
- enumerable: true
- };
- function defineGetter(constructor, name, getter) {
- getterDescriptor.get = getter;
- defineProperty(constructor.prototype, name, getterDescriptor);
- }
- function defineWrapGetter(constructor, name) {
- defineGetter(constructor, name, function() {
- return wrap(this.__impl4cf1e782hg__[name]);
- });
- }
- function forwardMethodsToWrapper(constructors, names) {
- constructors.forEach(function(constructor) {
- names.forEach(function(name) {
- constructor.prototype[name] = function() {
- var w = wrapIfNeeded(this);
- return w[name].apply(w, arguments);
- };
- });
- });
- }
- scope.addForwardingProperties = addForwardingProperties;
- scope.assert = assert;
- scope.constructorTable = constructorTable;
- scope.defineGetter = defineGetter;
- scope.defineWrapGetter = defineWrapGetter;
- scope.forwardMethodsToWrapper = forwardMethodsToWrapper;
- scope.isIdentifierName = isIdentifierName;
- scope.isWrapper = isWrapper;
- scope.isWrapperFor = isWrapperFor;
- scope.mixin = mixin;
- scope.nativePrototypeTable = nativePrototypeTable;
- scope.oneOf = oneOf;
- scope.registerObject = registerObject;
- scope.registerWrapper = register;
- scope.rewrap = rewrap;
- scope.setWrapper = setWrapper;
- scope.unsafeUnwrap = unsafeUnwrap;
- scope.unwrap = unwrap;
- scope.unwrapIfNeeded = unwrapIfNeeded;
- scope.wrap = wrap;
- scope.wrapIfNeeded = wrapIfNeeded;
- scope.wrappers = wrappers;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- function newSplice(index, removed, addedCount) {
- return {
- index: index,
- removed: removed,
- addedCount: addedCount
- };
- }
- var EDIT_LEAVE = 0;
- var EDIT_UPDATE = 1;
- var EDIT_ADD = 2;
- var EDIT_DELETE = 3;
- function ArraySplice() {}
- ArraySplice.prototype = {
- calcEditDistances: function(current, currentStart, currentEnd, old, oldStart, oldEnd) {
- var rowCount = oldEnd - oldStart + 1;
- var columnCount = currentEnd - currentStart + 1;
- var distances = new Array(rowCount);
- for (var i = 0; i < rowCount; i++) {
- distances[i] = new Array(columnCount);
- distances[i][0] = i;
- }
- for (var j = 0; j < columnCount; j++) distances[0][j] = j;
- for (var i = 1; i < rowCount; i++) {
- for (var j = 1; j < columnCount; j++) {
- if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1])) distances[i][j] = distances[i - 1][j - 1]; else {
- var north = distances[i - 1][j] + 1;
- var west = distances[i][j - 1] + 1;
- distances[i][j] = north < west ? north : west;
- }
- }
- }
- return distances;
- },
- spliceOperationsFromEditDistances: function(distances) {
- var i = distances.length - 1;
- var j = distances[0].length - 1;
- var current = distances[i][j];
- var edits = [];
- while (i > 0 || j > 0) {
- if (i == 0) {
- edits.push(EDIT_ADD);
- j--;
- continue;
- }
- if (j == 0) {
- edits.push(EDIT_DELETE);
- i--;
- continue;
- }
- var northWest = distances[i - 1][j - 1];
- var west = distances[i - 1][j];
- var north = distances[i][j - 1];
- var min;
- if (west < north) min = west < northWest ? west : northWest; else min = north < northWest ? north : northWest;
- if (min == northWest) {
- if (northWest == current) {
- edits.push(EDIT_LEAVE);
- } else {
- edits.push(EDIT_UPDATE);
- current = northWest;
- }
- i--;
- j--;
- } else if (min == west) {
- edits.push(EDIT_DELETE);
- i--;
- current = west;
- } else {
- edits.push(EDIT_ADD);
- j--;
- current = north;
- }
- }
- edits.reverse();
- return edits;
- },
- calcSplices: function(current, currentStart, currentEnd, old, oldStart, oldEnd) {
- var prefixCount = 0;
- var suffixCount = 0;
- var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
- if (currentStart == 0 && oldStart == 0) prefixCount = this.sharedPrefix(current, old, minLength);
- if (currentEnd == current.length && oldEnd == old.length) suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);
- currentStart += prefixCount;
- oldStart += prefixCount;
- currentEnd -= suffixCount;
- oldEnd -= suffixCount;
- if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0) return [];
- if (currentStart == currentEnd) {
- var splice = newSplice(currentStart, [], 0);
- while (oldStart < oldEnd) splice.removed.push(old[oldStart++]);
- return [ splice ];
- } else if (oldStart == oldEnd) return [ newSplice(currentStart, [], currentEnd - currentStart) ];
- var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));
- var splice = undefined;
- var splices = [];
- var index = currentStart;
- var oldIndex = oldStart;
- for (var i = 0; i < ops.length; i++) {
- switch (ops[i]) {
- case EDIT_LEAVE:
- if (splice) {
- splices.push(splice);
- splice = undefined;
- }
- index++;
- oldIndex++;
- break;
-
- case EDIT_UPDATE:
- if (!splice) splice = newSplice(index, [], 0);
- splice.addedCount++;
- index++;
- splice.removed.push(old[oldIndex]);
- oldIndex++;
- break;
-
- case EDIT_ADD:
- if (!splice) splice = newSplice(index, [], 0);
- splice.addedCount++;
- index++;
- break;
-
- case EDIT_DELETE:
- if (!splice) splice = newSplice(index, [], 0);
- splice.removed.push(old[oldIndex]);
- oldIndex++;
- break;
- }
- }
- if (splice) {
- splices.push(splice);
- }
- return splices;
- },
- sharedPrefix: function(current, old, searchLength) {
- for (var i = 0; i < searchLength; i++) if (!this.equals(current[i], old[i])) return i;
- return searchLength;
- },
- sharedSuffix: function(current, old, searchLength) {
- var index1 = current.length;
- var index2 = old.length;
- var count = 0;
- while (count < searchLength && this.equals(current[--index1], old[--index2])) count++;
- return count;
- },
- calculateSplices: function(current, previous) {
- return this.calcSplices(current, 0, current.length, previous, 0, previous.length);
- },
- equals: function(currentValue, previousValue) {
- return currentValue === previousValue;
- }
- };
- scope.ArraySplice = ArraySplice;
-})(window.ShadowDOMPolyfill);
-
-(function(context) {
- "use strict";
- var OriginalMutationObserver = window.MutationObserver;
- var callbacks = [];
- var pending = false;
- var timerFunc;
- function handle() {
- pending = false;
- var copies = callbacks.slice(0);
- callbacks = [];
- for (var i = 0; i < copies.length; i++) {
- (0, copies[i])();
- }
- }
- if (OriginalMutationObserver) {
- var counter = 1;
- var observer = new OriginalMutationObserver(handle);
- var textNode = document.createTextNode(counter);
- observer.observe(textNode, {
- characterData: true
- });
- timerFunc = function() {
- counter = (counter + 1) % 2;
- textNode.data = counter;
- };
- } else {
- timerFunc = window.setTimeout;
- }
- function setEndOfMicrotask(func) {
- callbacks.push(func);
- if (pending) return;
- pending = true;
- timerFunc(handle, 0);
- }
- context.setEndOfMicrotask = setEndOfMicrotask;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var setEndOfMicrotask = scope.setEndOfMicrotask;
- var wrapIfNeeded = scope.wrapIfNeeded;
- var wrappers = scope.wrappers;
- var registrationsTable = new WeakMap();
- var globalMutationObservers = [];
- var isScheduled = false;
- function scheduleCallback(observer) {
- if (observer.scheduled_) return;
- observer.scheduled_ = true;
- globalMutationObservers.push(observer);
- if (isScheduled) return;
- setEndOfMicrotask(notifyObservers);
- isScheduled = true;
- }
- function notifyObservers() {
- isScheduled = false;
- while (globalMutationObservers.length) {
- var notifyList = globalMutationObservers;
- globalMutationObservers = [];
- notifyList.sort(function(x, y) {
- return x.uid_ - y.uid_;
- });
- for (var i = 0; i < notifyList.length; i++) {
- var mo = notifyList[i];
- mo.scheduled_ = false;
- var queue = mo.takeRecords();
- removeTransientObserversFor(mo);
- if (queue.length) {
- mo.callback_(queue, mo);
- }
- }
- }
- }
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = new wrappers.NodeList();
- this.removedNodes = new wrappers.NodeList();
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function registerTransientObservers(ancestor, node) {
- for (;ancestor; ancestor = ancestor.parentNode) {
- var registrations = registrationsTable.get(ancestor);
- if (!registrations) continue;
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.options.subtree) registration.addTransientObserver(node);
- }
- }
- }
- function removeTransientObserversFor(observer) {
- for (var i = 0; i < observer.nodes_.length; i++) {
- var node = observer.nodes_[i];
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- if (registration.observer === observer) registration.removeTransientObservers();
- }
- }
- }
- function enqueueMutation(target, type, data) {
- var interestedObservers = Object.create(null);
- var associatedStrings = Object.create(null);
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (!registrations) continue;
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- if (type === "attributes" && !options.attributes) continue;
- if (type === "attributes" && options.attributeFilter && (data.namespace !== null || options.attributeFilter.indexOf(data.name) === -1)) {
- continue;
- }
- if (type === "characterData" && !options.characterData) continue;
- if (type === "childList" && !options.childList) continue;
- var observer = registration.observer;
- interestedObservers[observer.uid_] = observer;
- if (type === "attributes" && options.attributeOldValue || type === "characterData" && options.characterDataOldValue) {
- associatedStrings[observer.uid_] = data.oldValue;
- }
- }
- }
- for (var uid in interestedObservers) {
- var observer = interestedObservers[uid];
- var record = new MutationRecord(type, target);
- if ("name" in data && "namespace" in data) {
- record.attributeName = data.name;
- record.attributeNamespace = data.namespace;
- }
- if (data.addedNodes) record.addedNodes = data.addedNodes;
- if (data.removedNodes) record.removedNodes = data.removedNodes;
- if (data.previousSibling) record.previousSibling = data.previousSibling;
- if (data.nextSibling) record.nextSibling = data.nextSibling;
- if (associatedStrings[uid] !== undefined) record.oldValue = associatedStrings[uid];
- scheduleCallback(observer);
- observer.records_.push(record);
- }
- }
- var slice = Array.prototype.slice;
- function MutationObserverOptions(options) {
- this.childList = !!options.childList;
- this.subtree = !!options.subtree;
- if (!("attributes" in options) && ("attributeOldValue" in options || "attributeFilter" in options)) {
- this.attributes = true;
- } else {
- this.attributes = !!options.attributes;
- }
- if ("characterDataOldValue" in options && !("characterData" in options)) this.characterData = true; else this.characterData = !!options.characterData;
- if (!this.attributes && (options.attributeOldValue || "attributeFilter" in options) || !this.characterData && options.characterDataOldValue) {
- throw new TypeError();
- }
- this.characterData = !!options.characterData;
- this.attributeOldValue = !!options.attributeOldValue;
- this.characterDataOldValue = !!options.characterDataOldValue;
- if ("attributeFilter" in options) {
- if (options.attributeFilter == null || typeof options.attributeFilter !== "object") {
- throw new TypeError();
- }
- this.attributeFilter = slice.call(options.attributeFilter);
- } else {
- this.attributeFilter = null;
- }
- }
- var uidCounter = 0;
- function MutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- this.scheduled_ = false;
- }
- MutationObserver.prototype = {
- constructor: MutationObserver,
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- var newOptions = new MutationObserverOptions(options);
- var registration;
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeTransientObservers();
- registration.options = newOptions;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, newOptions);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- addTransientObserver: function(node) {
- if (node === this.target) return;
- scheduleCallback(this.observer);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- for (var i = 0; i < transientObservedNodes.length; i++) {
- var node = transientObservedNodes[i];
- var registrations = registrationsTable.get(node);
- for (var j = 0; j < registrations.length; j++) {
- if (registrations[j] === this) {
- registrations.splice(j, 1);
- break;
- }
- }
- }
- }
- };
- scope.enqueueMutation = enqueueMutation;
- scope.registerTransientObservers = registerTransientObservers;
- scope.wrappers.MutationObserver = MutationObserver;
- scope.wrappers.MutationRecord = MutationRecord;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- function TreeScope(root, parent) {
- this.root = root;
- this.parent = parent;
- }
- TreeScope.prototype = {
- get renderer() {
- if (this.root instanceof scope.wrappers.ShadowRoot) {
- return scope.getRendererForHost(this.root.host);
- }
- return null;
- },
- contains: function(treeScope) {
- for (;treeScope; treeScope = treeScope.parent) {
- if (treeScope === this) return true;
- }
- return false;
- }
- };
- function setTreeScope(node, treeScope) {
- if (node.treeScope_ !== treeScope) {
- node.treeScope_ = treeScope;
- for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {
- sr.treeScope_.parent = treeScope;
- }
- for (var child = node.firstChild; child; child = child.nextSibling) {
- setTreeScope(child, treeScope);
- }
- }
- }
- function getTreeScope(node) {
- if (node instanceof scope.wrappers.Window) {
- debugger;
- }
- if (node.treeScope_) return node.treeScope_;
- var parent = node.parentNode;
- var treeScope;
- if (parent) treeScope = getTreeScope(parent); else treeScope = new TreeScope(node, null);
- return node.treeScope_ = treeScope;
- }
- scope.TreeScope = TreeScope;
- scope.getTreeScope = getTreeScope;
- scope.setTreeScope = setTreeScope;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
- var getTreeScope = scope.getTreeScope;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrappers = scope.wrappers;
- var wrappedFuns = new WeakMap();
- var listenersTable = new WeakMap();
- var handledEventsTable = new WeakMap();
- var currentlyDispatchingEvents = new WeakMap();
- var targetTable = new WeakMap();
- var currentTargetTable = new WeakMap();
- var relatedTargetTable = new WeakMap();
- var eventPhaseTable = new WeakMap();
- var stopPropagationTable = new WeakMap();
- var stopImmediatePropagationTable = new WeakMap();
- var eventHandlersTable = new WeakMap();
- var eventPathTable = new WeakMap();
- function isShadowRoot(node) {
- return node instanceof wrappers.ShadowRoot;
- }
- function rootOfNode(node) {
- return getTreeScope(node).root;
- }
- function getEventPath(node, event) {
- var path = [];
- var current = node;
- path.push(current);
- while (current) {
- var destinationInsertionPoints = getDestinationInsertionPoints(current);
- if (destinationInsertionPoints && destinationInsertionPoints.length > 0) {
- for (var i = 0; i < destinationInsertionPoints.length; i++) {
- var insertionPoint = destinationInsertionPoints[i];
- if (isShadowInsertionPoint(insertionPoint)) {
- var shadowRoot = rootOfNode(insertionPoint);
- var olderShadowRoot = shadowRoot.olderShadowRoot;
- if (olderShadowRoot) path.push(olderShadowRoot);
- }
- path.push(insertionPoint);
- }
- current = destinationInsertionPoints[destinationInsertionPoints.length - 1];
- } else {
- if (isShadowRoot(current)) {
- if (inSameTree(node, current) && eventMustBeStopped(event)) {
- break;
- }
- current = current.host;
- path.push(current);
- } else {
- current = current.parentNode;
- if (current) path.push(current);
- }
- }
- }
- return path;
- }
- function eventMustBeStopped(event) {
- if (!event) return false;
- switch (event.type) {
- case "abort":
- case "error":
- case "select":
- case "change":
- case "load":
- case "reset":
- case "resize":
- case "scroll":
- case "selectstart":
- return true;
- }
- return false;
- }
- function isShadowInsertionPoint(node) {
- return node instanceof HTMLShadowElement;
- }
- function getDestinationInsertionPoints(node) {
- return scope.getDestinationInsertionPoints(node);
- }
- function eventRetargetting(path, currentTarget) {
- if (path.length === 0) return currentTarget;
- if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document;
- var currentTargetTree = getTreeScope(currentTarget);
- var originalTarget = path[0];
- var originalTargetTree = getTreeScope(originalTarget);
- var relativeTargetTree = lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);
- for (var i = 0; i < path.length; i++) {
- var node = path[i];
- if (getTreeScope(node) === relativeTargetTree) return node;
- }
- return path[path.length - 1];
- }
- function getTreeScopeAncestors(treeScope) {
- var ancestors = [];
- for (;treeScope; treeScope = treeScope.parent) {
- ancestors.push(treeScope);
- }
- return ancestors;
- }
- function lowestCommonInclusiveAncestor(tsA, tsB) {
- var ancestorsA = getTreeScopeAncestors(tsA);
- var ancestorsB = getTreeScopeAncestors(tsB);
- var result = null;
- while (ancestorsA.length > 0 && ancestorsB.length > 0) {
- var a = ancestorsA.pop();
- var b = ancestorsB.pop();
- if (a === b) result = a; else break;
- }
- return result;
- }
- function getTreeScopeRoot(ts) {
- if (!ts.parent) return ts;
- return getTreeScopeRoot(ts.parent);
- }
- function relatedTargetResolution(event, currentTarget, relatedTarget) {
- if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document;
- var currentTargetTree = getTreeScope(currentTarget);
- var relatedTargetTree = getTreeScope(relatedTarget);
- var relatedTargetEventPath = getEventPath(relatedTarget, event);
- var lowestCommonAncestorTree;
- var lowestCommonAncestorTree = lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree);
- if (!lowestCommonAncestorTree) lowestCommonAncestorTree = relatedTargetTree.root;
- for (var commonAncestorTree = lowestCommonAncestorTree; commonAncestorTree; commonAncestorTree = commonAncestorTree.parent) {
- var adjustedRelatedTarget;
- for (var i = 0; i < relatedTargetEventPath.length; i++) {
- var node = relatedTargetEventPath[i];
- if (getTreeScope(node) === commonAncestorTree) return node;
- }
- }
- return null;
- }
- function inSameTree(a, b) {
- return getTreeScope(a) === getTreeScope(b);
- }
- var NONE = 0;
- var CAPTURING_PHASE = 1;
- var AT_TARGET = 2;
- var BUBBLING_PHASE = 3;
- var pendingError;
- function dispatchOriginalEvent(originalEvent) {
- if (handledEventsTable.get(originalEvent)) return;
- handledEventsTable.set(originalEvent, true);
- dispatchEvent(wrap(originalEvent), wrap(originalEvent.target));
- if (pendingError) {
- var err = pendingError;
- pendingError = null;
- throw err;
- }
- }
- function isLoadLikeEvent(event) {
- switch (event.type) {
- case "load":
- case "beforeunload":
- case "unload":
- return true;
- }
- return false;
- }
- function dispatchEvent(event, originalWrapperTarget) {
- if (currentlyDispatchingEvents.get(event)) throw new Error("InvalidStateError");
- currentlyDispatchingEvents.set(event, true);
- scope.renderAllPending();
- var eventPath;
- var overrideTarget;
- var win;
- if (isLoadLikeEvent(event) && !event.bubbles) {
- var doc = originalWrapperTarget;
- if (doc instanceof wrappers.Document && (win = doc.defaultView)) {
- overrideTarget = doc;
- eventPath = [];
- }
- }
- if (!eventPath) {
- if (originalWrapperTarget instanceof wrappers.Window) {
- win = originalWrapperTarget;
- eventPath = [];
- } else {
- eventPath = getEventPath(originalWrapperTarget, event);
- if (!isLoadLikeEvent(event)) {
- var doc = eventPath[eventPath.length - 1];
- if (doc instanceof wrappers.Document) win = doc.defaultView;
- }
- }
- }
- eventPathTable.set(event, eventPath);
- if (dispatchCapturing(event, eventPath, win, overrideTarget)) {
- if (dispatchAtTarget(event, eventPath, win, overrideTarget)) {
- dispatchBubbling(event, eventPath, win, overrideTarget);
- }
- }
- eventPhaseTable.set(event, NONE);
- currentTargetTable.delete(event, null);
- currentlyDispatchingEvents.delete(event);
- return event.defaultPrevented;
- }
- function dispatchCapturing(event, eventPath, win, overrideTarget) {
- var phase = CAPTURING_PHASE;
- if (win) {
- if (!invoke(win, event, phase, eventPath, overrideTarget)) return false;
- }
- for (var i = eventPath.length - 1; i > 0; i--) {
- if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return false;
- }
- return true;
- }
- function dispatchAtTarget(event, eventPath, win, overrideTarget) {
- var phase = AT_TARGET;
- var currentTarget = eventPath[0] || win;
- return invoke(currentTarget, event, phase, eventPath, overrideTarget);
- }
- function dispatchBubbling(event, eventPath, win, overrideTarget) {
- var phase = BUBBLING_PHASE;
- for (var i = 1; i < eventPath.length; i++) {
- if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return;
- }
- if (win && eventPath.length > 0) {
- invoke(win, event, phase, eventPath, overrideTarget);
- }
- }
- function invoke(currentTarget, event, phase, eventPath, overrideTarget) {
- var listeners = listenersTable.get(currentTarget);
- if (!listeners) return true;
- var target = overrideTarget || eventRetargetting(eventPath, currentTarget);
- if (target === currentTarget) {
- if (phase === CAPTURING_PHASE) return true;
- if (phase === BUBBLING_PHASE) phase = AT_TARGET;
- } else if (phase === BUBBLING_PHASE && !event.bubbles) {
- return true;
- }
- if ("relatedTarget" in event) {
- var originalEvent = unwrap(event);
- var unwrappedRelatedTarget = originalEvent.relatedTarget;
- if (unwrappedRelatedTarget) {
- if (unwrappedRelatedTarget instanceof Object && unwrappedRelatedTarget.addEventListener) {
- var relatedTarget = wrap(unwrappedRelatedTarget);
- var adjusted = relatedTargetResolution(event, currentTarget, relatedTarget);
- if (adjusted === target) return true;
- } else {
- adjusted = null;
- }
- relatedTargetTable.set(event, adjusted);
- }
- }
- eventPhaseTable.set(event, phase);
- var type = event.type;
- var anyRemoved = false;
- targetTable.set(event, target);
- currentTargetTable.set(event, currentTarget);
- listeners.depth++;
- for (var i = 0, len = listeners.length; i < len; i++) {
- var listener = listeners[i];
- if (listener.removed) {
- anyRemoved = true;
- continue;
- }
- if (listener.type !== type || !listener.capture && phase === CAPTURING_PHASE || listener.capture && phase === BUBBLING_PHASE) {
- continue;
- }
- try {
- if (typeof listener.handler === "function") listener.handler.call(currentTarget, event); else listener.handler.handleEvent(event);
- if (stopImmediatePropagationTable.get(event)) return false;
- } catch (ex) {
- if (!pendingError) pendingError = ex;
- }
- }
- listeners.depth--;
- if (anyRemoved && listeners.depth === 0) {
- var copy = listeners.slice();
- listeners.length = 0;
- for (var i = 0; i < copy.length; i++) {
- if (!copy[i].removed) listeners.push(copy[i]);
- }
- }
- return !stopPropagationTable.get(event);
- }
- function Listener(type, handler, capture) {
- this.type = type;
- this.handler = handler;
- this.capture = Boolean(capture);
- }
- Listener.prototype = {
- equals: function(that) {
- return this.handler === that.handler && this.type === that.type && this.capture === that.capture;
- },
- get removed() {
- return this.handler === null;
- },
- remove: function() {
- this.handler = null;
- }
- };
- var OriginalEvent = window.Event;
- OriginalEvent.prototype.polymerBlackList_ = {
- returnValue: true,
- keyLocation: true
- };
- function Event(type, options) {
- if (type instanceof OriginalEvent) {
- var impl = type;
- if (!OriginalBeforeUnloadEvent && impl.type === "beforeunload" && !(this instanceof BeforeUnloadEvent)) {
- return new BeforeUnloadEvent(impl);
- }
- setWrapper(impl, this);
- } else {
- return wrap(constructEvent(OriginalEvent, "Event", type, options));
- }
- }
- Event.prototype = {
- get target() {
- return targetTable.get(this);
- },
- get currentTarget() {
- return currentTargetTable.get(this);
- },
- get eventPhase() {
- return eventPhaseTable.get(this);
- },
- get path() {
- var eventPath = eventPathTable.get(this);
- if (!eventPath) return [];
- return eventPath.slice();
- },
- stopPropagation: function() {
- stopPropagationTable.set(this, true);
- },
- stopImmediatePropagation: function() {
- stopPropagationTable.set(this, true);
- stopImmediatePropagationTable.set(this, true);
- }
- };
- var supportsDefaultPrevented = function() {
- var e = document.createEvent("Event");
- e.initEvent("test", true, true);
- e.preventDefault();
- return e.defaultPrevented;
- }();
- if (!supportsDefaultPrevented) {
- Event.prototype.preventDefault = function() {
- if (!this.cancelable) return;
- unsafeUnwrap(this).preventDefault();
- Object.defineProperty(this, "defaultPrevented", {
- get: function() {
- return true;
- },
- configurable: true
- });
- };
- }
- registerWrapper(OriginalEvent, Event, document.createEvent("Event"));
- function unwrapOptions(options) {
- if (!options || !options.relatedTarget) return options;
- return Object.create(options, {
- relatedTarget: {
- value: unwrap(options.relatedTarget)
- }
- });
- }
- function registerGenericEvent(name, SuperEvent, prototype) {
- var OriginalEvent = window[name];
- var GenericEvent = function(type, options) {
- if (type instanceof OriginalEvent) setWrapper(type, this); else return wrap(constructEvent(OriginalEvent, name, type, options));
- };
- GenericEvent.prototype = Object.create(SuperEvent.prototype);
- if (prototype) mixin(GenericEvent.prototype, prototype);
- if (OriginalEvent) {
- try {
- registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent("temp"));
- } catch (ex) {
- registerWrapper(OriginalEvent, GenericEvent, document.createEvent(name));
- }
- }
- return GenericEvent;
- }
- var UIEvent = registerGenericEvent("UIEvent", Event);
- var CustomEvent = registerGenericEvent("CustomEvent", Event);
- var relatedTargetProto = {
- get relatedTarget() {
- var relatedTarget = relatedTargetTable.get(this);
- if (relatedTarget !== undefined) return relatedTarget;
- return wrap(unwrap(this).relatedTarget);
- }
- };
- function getInitFunction(name, relatedTargetIndex) {
- return function() {
- arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);
- var impl = unwrap(this);
- impl[name].apply(impl, arguments);
- };
- }
- var mouseEventProto = mixin({
- initMouseEvent: getInitFunction("initMouseEvent", 14)
- }, relatedTargetProto);
- var focusEventProto = mixin({
- initFocusEvent: getInitFunction("initFocusEvent", 5)
- }, relatedTargetProto);
- var MouseEvent = registerGenericEvent("MouseEvent", UIEvent, mouseEventProto);
- var FocusEvent = registerGenericEvent("FocusEvent", UIEvent, focusEventProto);
- var defaultInitDicts = Object.create(null);
- var supportsEventConstructors = function() {
- try {
- new window.FocusEvent("focus");
- } catch (ex) {
- return false;
- }
- return true;
- }();
- function constructEvent(OriginalEvent, name, type, options) {
- if (supportsEventConstructors) return new OriginalEvent(type, unwrapOptions(options));
- var event = unwrap(document.createEvent(name));
- var defaultDict = defaultInitDicts[name];
- var args = [ type ];
- Object.keys(defaultDict).forEach(function(key) {
- var v = options != null && key in options ? options[key] : defaultDict[key];
- if (key === "relatedTarget") v = unwrap(v);
- args.push(v);
- });
- event["init" + name].apply(event, args);
- return event;
- }
- if (!supportsEventConstructors) {
- var configureEventConstructor = function(name, initDict, superName) {
- if (superName) {
- var superDict = defaultInitDicts[superName];
- initDict = mixin(mixin({}, superDict), initDict);
- }
- defaultInitDicts[name] = initDict;
- };
- configureEventConstructor("Event", {
- bubbles: false,
- cancelable: false
- });
- configureEventConstructor("CustomEvent", {
- detail: null
- }, "Event");
- configureEventConstructor("UIEvent", {
- view: null,
- detail: 0
- }, "Event");
- configureEventConstructor("MouseEvent", {
- screenX: 0,
- screenY: 0,
- clientX: 0,
- clientY: 0,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- button: 0,
- relatedTarget: null
- }, "UIEvent");
- configureEventConstructor("FocusEvent", {
- relatedTarget: null
- }, "UIEvent");
- }
- var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;
- function BeforeUnloadEvent(impl) {
- Event.call(this, impl);
- }
- BeforeUnloadEvent.prototype = Object.create(Event.prototype);
- mixin(BeforeUnloadEvent.prototype, {
- get returnValue() {
- return unsafeUnwrap(this).returnValue;
- },
- set returnValue(v) {
- unsafeUnwrap(this).returnValue = v;
- }
- });
- if (OriginalBeforeUnloadEvent) registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);
- function isValidListener(fun) {
- if (typeof fun === "function") return true;
- return fun && fun.handleEvent;
- }
- function isMutationEvent(type) {
- switch (type) {
- case "DOMAttrModified":
- case "DOMAttributeNameChanged":
- case "DOMCharacterDataModified":
- case "DOMElementNameChanged":
- case "DOMNodeInserted":
- case "DOMNodeInsertedIntoDocument":
- case "DOMNodeRemoved":
- case "DOMNodeRemovedFromDocument":
- case "DOMSubtreeModified":
- return true;
- }
- return false;
- }
- var OriginalEventTarget = window.EventTarget;
- function EventTarget(impl) {
- setWrapper(impl, this);
- }
- var methodNames = [ "addEventListener", "removeEventListener", "dispatchEvent" ];
- [ Node, Window ].forEach(function(constructor) {
- var p = constructor.prototype;
- methodNames.forEach(function(name) {
- Object.defineProperty(p, name + "_", {
- value: p[name]
- });
- });
- });
- function getTargetToListenAt(wrapper) {
- if (wrapper instanceof wrappers.ShadowRoot) wrapper = wrapper.host;
- return unwrap(wrapper);
- }
- EventTarget.prototype = {
- addEventListener: function(type, fun, capture) {
- if (!isValidListener(fun) || isMutationEvent(type)) return;
- var listener = new Listener(type, fun, capture);
- var listeners = listenersTable.get(this);
- if (!listeners) {
- listeners = [];
- listeners.depth = 0;
- listenersTable.set(this, listeners);
- } else {
- for (var i = 0; i < listeners.length; i++) {
- if (listener.equals(listeners[i])) return;
- }
- }
- listeners.push(listener);
- var target = getTargetToListenAt(this);
- target.addEventListener_(type, dispatchOriginalEvent, true);
- },
- removeEventListener: function(type, fun, capture) {
- capture = Boolean(capture);
- var listeners = listenersTable.get(this);
- if (!listeners) return;
- var count = 0, found = false;
- for (var i = 0; i < listeners.length; i++) {
- if (listeners[i].type === type && listeners[i].capture === capture) {
- count++;
- if (listeners[i].handler === fun) {
- found = true;
- listeners[i].remove();
- }
- }
- }
- if (found && count === 1) {
- var target = getTargetToListenAt(this);
- target.removeEventListener_(type, dispatchOriginalEvent, true);
- }
- },
- dispatchEvent: function(event) {
- var nativeEvent = unwrap(event);
- var eventType = nativeEvent.type;
- handledEventsTable.set(nativeEvent, false);
- scope.renderAllPending();
- var tempListener;
- if (!hasListenerInAncestors(this, eventType)) {
- tempListener = function() {};
- this.addEventListener(eventType, tempListener, true);
- }
- try {
- return unwrap(this).dispatchEvent_(nativeEvent);
- } finally {
- if (tempListener) this.removeEventListener(eventType, tempListener, true);
- }
- }
- };
- function hasListener(node, type) {
- var listeners = listenersTable.get(node);
- if (listeners) {
- for (var i = 0; i < listeners.length; i++) {
- if (!listeners[i].removed && listeners[i].type === type) return true;
- }
- }
- return false;
- }
- function hasListenerInAncestors(target, type) {
- for (var node = unwrap(target); node; node = node.parentNode) {
- if (hasListener(wrap(node), type)) return true;
- }
- return false;
- }
- if (OriginalEventTarget) registerWrapper(OriginalEventTarget, EventTarget);
- function wrapEventTargetMethods(constructors) {
- forwardMethodsToWrapper(constructors, methodNames);
- }
- var originalElementFromPoint = document.elementFromPoint;
- function elementFromPoint(self, document, x, y) {
- scope.renderAllPending();
- var element = wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));
- if (!element) return null;
- var path = getEventPath(element, null);
- var idx = path.lastIndexOf(self);
- if (idx == -1) return null; else path = path.slice(0, idx);
- return eventRetargetting(path, self);
- }
- function getEventHandlerGetter(name) {
- return function() {
- var inlineEventHandlers = eventHandlersTable.get(this);
- return inlineEventHandlers && inlineEventHandlers[name] && inlineEventHandlers[name].value || null;
- };
- }
- function getEventHandlerSetter(name) {
- var eventType = name.slice(2);
- return function(value) {
- var inlineEventHandlers = eventHandlersTable.get(this);
- if (!inlineEventHandlers) {
- inlineEventHandlers = Object.create(null);
- eventHandlersTable.set(this, inlineEventHandlers);
- }
- var old = inlineEventHandlers[name];
- if (old) this.removeEventListener(eventType, old.wrapped, false);
- if (typeof value === "function") {
- var wrapped = function(e) {
- var rv = value.call(this, e);
- if (rv === false) e.preventDefault(); else if (name === "onbeforeunload" && typeof rv === "string") e.returnValue = rv;
- };
- this.addEventListener(eventType, wrapped, false);
- inlineEventHandlers[name] = {
- value: value,
- wrapped: wrapped
- };
- }
- };
- }
- scope.elementFromPoint = elementFromPoint;
- scope.getEventHandlerGetter = getEventHandlerGetter;
- scope.getEventHandlerSetter = getEventHandlerSetter;
- scope.wrapEventTargetMethods = wrapEventTargetMethods;
- scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;
- scope.wrappers.CustomEvent = CustomEvent;
- scope.wrappers.Event = Event;
- scope.wrappers.EventTarget = EventTarget;
- scope.wrappers.FocusEvent = FocusEvent;
- scope.wrappers.MouseEvent = MouseEvent;
- scope.wrappers.UIEvent = UIEvent;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var UIEvent = scope.wrappers.UIEvent;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var OriginalTouchEvent = window.TouchEvent;
- if (!OriginalTouchEvent) return;
- var nativeEvent;
- try {
- nativeEvent = document.createEvent("TouchEvent");
- } catch (ex) {
- return;
- }
- var nonEnumDescriptor = {
- enumerable: false
- };
- function nonEnum(obj, prop) {
- Object.defineProperty(obj, prop, nonEnumDescriptor);
- }
- function Touch(impl) {
- setWrapper(impl, this);
- }
- Touch.prototype = {
- get target() {
- return wrap(unsafeUnwrap(this).target);
- }
- };
- var descr = {
- configurable: true,
- enumerable: true,
- get: null
- };
- [ "clientX", "clientY", "screenX", "screenY", "pageX", "pageY", "identifier", "webkitRadiusX", "webkitRadiusY", "webkitRotationAngle", "webkitForce" ].forEach(function(name) {
- descr.get = function() {
- return unsafeUnwrap(this)[name];
- };
- Object.defineProperty(Touch.prototype, name, descr);
- });
- function TouchList() {
- this.length = 0;
- nonEnum(this, "length");
- }
- TouchList.prototype = {
- item: function(index) {
- return this[index];
- }
- };
- function wrapTouchList(nativeTouchList) {
- var list = new TouchList();
- for (var i = 0; i < nativeTouchList.length; i++) {
- list[i] = new Touch(nativeTouchList[i]);
- }
- list.length = i;
- return list;
- }
- function TouchEvent(impl) {
- UIEvent.call(this, impl);
- }
- TouchEvent.prototype = Object.create(UIEvent.prototype);
- mixin(TouchEvent.prototype, {
- get touches() {
- return wrapTouchList(unsafeUnwrap(this).touches);
- },
- get targetTouches() {
- return wrapTouchList(unsafeUnwrap(this).targetTouches);
- },
- get changedTouches() {
- return wrapTouchList(unsafeUnwrap(this).changedTouches);
- },
- initTouchEvent: function() {
- throw new Error("Not implemented");
- }
- });
- registerWrapper(OriginalTouchEvent, TouchEvent, nativeEvent);
- scope.wrappers.Touch = Touch;
- scope.wrappers.TouchEvent = TouchEvent;
- scope.wrappers.TouchList = TouchList;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var nonEnumDescriptor = {
- enumerable: false
- };
- function nonEnum(obj, prop) {
- Object.defineProperty(obj, prop, nonEnumDescriptor);
- }
- function NodeList() {
- this.length = 0;
- nonEnum(this, "length");
- }
- NodeList.prototype = {
- item: function(index) {
- return this[index];
- }
- };
- nonEnum(NodeList.prototype, "item");
- function wrapNodeList(list) {
- if (list == null) return list;
- var wrapperList = new NodeList();
- for (var i = 0, length = list.length; i < length; i++) {
- wrapperList[i] = wrap(list[i]);
- }
- wrapperList.length = length;
- return wrapperList;
- }
- function addWrapNodeListMethod(wrapperConstructor, name) {
- wrapperConstructor.prototype[name] = function() {
- return wrapNodeList(unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments));
- };
- }
- scope.wrappers.NodeList = NodeList;
- scope.addWrapNodeListMethod = addWrapNodeListMethod;
- scope.wrapNodeList = wrapNodeList;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- scope.wrapHTMLCollection = scope.wrapNodeList;
- scope.wrappers.HTMLCollection = scope.wrappers.NodeList;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var EventTarget = scope.wrappers.EventTarget;
- var NodeList = scope.wrappers.NodeList;
- var TreeScope = scope.TreeScope;
- var assert = scope.assert;
- var defineWrapGetter = scope.defineWrapGetter;
- var enqueueMutation = scope.enqueueMutation;
- var getTreeScope = scope.getTreeScope;
- var isWrapper = scope.isWrapper;
- var mixin = scope.mixin;
- var registerTransientObservers = scope.registerTransientObservers;
- var registerWrapper = scope.registerWrapper;
- var setTreeScope = scope.setTreeScope;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var wrapIfNeeded = scope.wrapIfNeeded;
- var wrappers = scope.wrappers;
- function assertIsNodeWrapper(node) {
- assert(node instanceof Node);
- }
- function createOneElementNodeList(node) {
- var nodes = new NodeList();
- nodes[0] = node;
- nodes.length = 1;
- return nodes;
- }
- var surpressMutations = false;
- function enqueueRemovalForInsertedNodes(node, parent, nodes) {
- enqueueMutation(parent, "childList", {
- removedNodes: nodes,
- previousSibling: node.previousSibling,
- nextSibling: node.nextSibling
- });
- }
- function enqueueRemovalForInsertedDocumentFragment(df, nodes) {
- enqueueMutation(df, "childList", {
- removedNodes: nodes
- });
- }
- function collectNodes(node, parentNode, previousNode, nextNode) {
- if (node instanceof DocumentFragment) {
- var nodes = collectNodesForDocumentFragment(node);
- surpressMutations = true;
- for (var i = nodes.length - 1; i >= 0; i--) {
- node.removeChild(nodes[i]);
- nodes[i].parentNode_ = parentNode;
- }
- surpressMutations = false;
- for (var i = 0; i < nodes.length; i++) {
- nodes[i].previousSibling_ = nodes[i - 1] || previousNode;
- nodes[i].nextSibling_ = nodes[i + 1] || nextNode;
- }
- if (previousNode) previousNode.nextSibling_ = nodes[0];
- if (nextNode) nextNode.previousSibling_ = nodes[nodes.length - 1];
- return nodes;
- }
- var nodes = createOneElementNodeList(node);
- var oldParent = node.parentNode;
- if (oldParent) {
- oldParent.removeChild(node);
- }
- node.parentNode_ = parentNode;
- node.previousSibling_ = previousNode;
- node.nextSibling_ = nextNode;
- if (previousNode) previousNode.nextSibling_ = node;
- if (nextNode) nextNode.previousSibling_ = node;
- return nodes;
- }
- function collectNodesNative(node) {
- if (node instanceof DocumentFragment) return collectNodesForDocumentFragment(node);
- var nodes = createOneElementNodeList(node);
- var oldParent = node.parentNode;
- if (oldParent) enqueueRemovalForInsertedNodes(node, oldParent, nodes);
- return nodes;
- }
- function collectNodesForDocumentFragment(node) {
- var nodes = new NodeList();
- var i = 0;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- nodes[i++] = child;
- }
- nodes.length = i;
- enqueueRemovalForInsertedDocumentFragment(node, nodes);
- return nodes;
- }
- function snapshotNodeList(nodeList) {
- return nodeList;
- }
- function nodeWasAdded(node, treeScope) {
- setTreeScope(node, treeScope);
- node.nodeIsInserted_();
- }
- function nodesWereAdded(nodes, parent) {
- var treeScope = getTreeScope(parent);
- for (var i = 0; i < nodes.length; i++) {
- nodeWasAdded(nodes[i], treeScope);
- }
- }
- function nodeWasRemoved(node) {
- setTreeScope(node, new TreeScope(node, null));
- }
- function nodesWereRemoved(nodes) {
- for (var i = 0; i < nodes.length; i++) {
- nodeWasRemoved(nodes[i]);
- }
- }
- function ensureSameOwnerDocument(parent, child) {
- var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ? parent : parent.ownerDocument;
- if (ownerDoc !== child.ownerDocument) ownerDoc.adoptNode(child);
- }
- function adoptNodesIfNeeded(owner, nodes) {
- if (!nodes.length) return;
- var ownerDoc = owner.ownerDocument;
- if (ownerDoc === nodes[0].ownerDocument) return;
- for (var i = 0; i < nodes.length; i++) {
- scope.adoptNodeNoRemove(nodes[i], ownerDoc);
- }
- }
- function unwrapNodesForInsertion(owner, nodes) {
- adoptNodesIfNeeded(owner, nodes);
- var length = nodes.length;
- if (length === 1) return unwrap(nodes[0]);
- var df = unwrap(owner.ownerDocument.createDocumentFragment());
- for (var i = 0; i < length; i++) {
- df.appendChild(unwrap(nodes[i]));
- }
- return df;
- }
- function clearChildNodes(wrapper) {
- if (wrapper.firstChild_ !== undefined) {
- var child = wrapper.firstChild_;
- while (child) {
- var tmp = child;
- child = child.nextSibling_;
- tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;
- }
- }
- wrapper.firstChild_ = wrapper.lastChild_ = undefined;
- }
- function removeAllChildNodes(wrapper) {
- if (wrapper.invalidateShadowRenderer()) {
- var childWrapper = wrapper.firstChild;
- while (childWrapper) {
- assert(childWrapper.parentNode === wrapper);
- var nextSibling = childWrapper.nextSibling;
- var childNode = unwrap(childWrapper);
- var parentNode = childNode.parentNode;
- if (parentNode) originalRemoveChild.call(parentNode, childNode);
- childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = null;
- childWrapper = nextSibling;
- }
- wrapper.firstChild_ = wrapper.lastChild_ = null;
- } else {
- var node = unwrap(wrapper);
- var child = node.firstChild;
- var nextSibling;
- while (child) {
- nextSibling = child.nextSibling;
- originalRemoveChild.call(node, child);
- child = nextSibling;
- }
- }
- }
- function invalidateParent(node) {
- var p = node.parentNode;
- return p && p.invalidateShadowRenderer();
- }
- function cleanupNodes(nodes) {
- for (var i = 0, n; i < nodes.length; i++) {
- n = nodes[i];
- n.parentNode.removeChild(n);
- }
- }
- var originalImportNode = document.importNode;
- var originalCloneNode = window.Node.prototype.cloneNode;
- function cloneNode(node, deep, opt_doc) {
- var clone;
- if (opt_doc) clone = wrap(originalImportNode.call(opt_doc, unsafeUnwrap(node), false)); else clone = wrap(originalCloneNode.call(unsafeUnwrap(node), false));
- if (deep) {
- for (var child = node.firstChild; child; child = child.nextSibling) {
- clone.appendChild(cloneNode(child, true, opt_doc));
- }
- if (node instanceof wrappers.HTMLTemplateElement) {
- var cloneContent = clone.content;
- for (var child = node.content.firstChild; child; child = child.nextSibling) {
- cloneContent.appendChild(cloneNode(child, true, opt_doc));
- }
- }
- }
- return clone;
- }
- function contains(self, child) {
- if (!child || getTreeScope(self) !== getTreeScope(child)) return false;
- for (var node = child; node; node = node.parentNode) {
- if (node === self) return true;
- }
- return false;
- }
- var OriginalNode = window.Node;
- function Node(original) {
- assert(original instanceof OriginalNode);
- EventTarget.call(this, original);
- this.parentNode_ = undefined;
- this.firstChild_ = undefined;
- this.lastChild_ = undefined;
- this.nextSibling_ = undefined;
- this.previousSibling_ = undefined;
- this.treeScope_ = undefined;
- }
- var OriginalDocumentFragment = window.DocumentFragment;
- var originalAppendChild = OriginalNode.prototype.appendChild;
- var originalCompareDocumentPosition = OriginalNode.prototype.compareDocumentPosition;
- var originalIsEqualNode = OriginalNode.prototype.isEqualNode;
- var originalInsertBefore = OriginalNode.prototype.insertBefore;
- var originalRemoveChild = OriginalNode.prototype.removeChild;
- var originalReplaceChild = OriginalNode.prototype.replaceChild;
- var isIEOrEdge = /Trident|Edge/.test(navigator.userAgent);
- var removeChildOriginalHelper = isIEOrEdge ? function(parent, child) {
- try {
- originalRemoveChild.call(parent, child);
- } catch (ex) {
- if (!(parent instanceof OriginalDocumentFragment)) throw ex;
- }
- } : function(parent, child) {
- originalRemoveChild.call(parent, child);
- };
- Node.prototype = Object.create(EventTarget.prototype);
- mixin(Node.prototype, {
- appendChild: function(childWrapper) {
- return this.insertBefore(childWrapper, null);
- },
- insertBefore: function(childWrapper, refWrapper) {
- assertIsNodeWrapper(childWrapper);
- var refNode;
- if (refWrapper) {
- if (isWrapper(refWrapper)) {
- refNode = unwrap(refWrapper);
- } else {
- refNode = refWrapper;
- refWrapper = wrap(refNode);
- }
- } else {
- refWrapper = null;
- refNode = null;
- }
- refWrapper && assert(refWrapper.parentNode === this);
- var nodes;
- var previousNode = refWrapper ? refWrapper.previousSibling : this.lastChild;
- var useNative = !this.invalidateShadowRenderer() && !invalidateParent(childWrapper);
- if (useNative) nodes = collectNodesNative(childWrapper); else nodes = collectNodes(childWrapper, this, previousNode, refWrapper);
- if (useNative) {
- ensureSameOwnerDocument(this, childWrapper);
- clearChildNodes(this);
- originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode);
- } else {
- if (!previousNode) this.firstChild_ = nodes[0];
- if (!refWrapper) {
- this.lastChild_ = nodes[nodes.length - 1];
- if (this.firstChild_ === undefined) this.firstChild_ = this.firstChild;
- }
- var parentNode = refNode ? refNode.parentNode : unsafeUnwrap(this);
- if (parentNode) {
- originalInsertBefore.call(parentNode, unwrapNodesForInsertion(this, nodes), refNode);
- } else {
- adoptNodesIfNeeded(this, nodes);
- }
- }
- enqueueMutation(this, "childList", {
- addedNodes: nodes,
- nextSibling: refWrapper,
- previousSibling: previousNode
- });
- nodesWereAdded(nodes, this);
- return childWrapper;
- },
- removeChild: function(childWrapper) {
- assertIsNodeWrapper(childWrapper);
- if (childWrapper.parentNode !== this) {
- var found = false;
- var childNodes = this.childNodes;
- for (var ieChild = this.firstChild; ieChild; ieChild = ieChild.nextSibling) {
- if (ieChild === childWrapper) {
- found = true;
- break;
- }
- }
- if (!found) {
- throw new Error("NotFoundError");
- }
- }
- var childNode = unwrap(childWrapper);
- var childWrapperNextSibling = childWrapper.nextSibling;
- var childWrapperPreviousSibling = childWrapper.previousSibling;
- if (this.invalidateShadowRenderer()) {
- var thisFirstChild = this.firstChild;
- var thisLastChild = this.lastChild;
- var parentNode = childNode.parentNode;
- if (parentNode) removeChildOriginalHelper(parentNode, childNode);
- if (thisFirstChild === childWrapper) this.firstChild_ = childWrapperNextSibling;
- if (thisLastChild === childWrapper) this.lastChild_ = childWrapperPreviousSibling;
- if (childWrapperPreviousSibling) childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;
- if (childWrapperNextSibling) {
- childWrapperNextSibling.previousSibling_ = childWrapperPreviousSibling;
- }
- childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = undefined;
- } else {
- clearChildNodes(this);
- removeChildOriginalHelper(unsafeUnwrap(this), childNode);
- }
- if (!surpressMutations) {
- enqueueMutation(this, "childList", {
- removedNodes: createOneElementNodeList(childWrapper),
- nextSibling: childWrapperNextSibling,
- previousSibling: childWrapperPreviousSibling
- });
- }
- registerTransientObservers(this, childWrapper);
- return childWrapper;
- },
- replaceChild: function(newChildWrapper, oldChildWrapper) {
- assertIsNodeWrapper(newChildWrapper);
- var oldChildNode;
- if (isWrapper(oldChildWrapper)) {
- oldChildNode = unwrap(oldChildWrapper);
- } else {
- oldChildNode = oldChildWrapper;
- oldChildWrapper = wrap(oldChildNode);
- }
- if (oldChildWrapper.parentNode !== this) {
- throw new Error("NotFoundError");
- }
- var nextNode = oldChildWrapper.nextSibling;
- var previousNode = oldChildWrapper.previousSibling;
- var nodes;
- var useNative = !this.invalidateShadowRenderer() && !invalidateParent(newChildWrapper);
- if (useNative) {
- nodes = collectNodesNative(newChildWrapper);
- } else {
- if (nextNode === newChildWrapper) nextNode = newChildWrapper.nextSibling;
- nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);
- }
- if (!useNative) {
- if (this.firstChild === oldChildWrapper) this.firstChild_ = nodes[0];
- if (this.lastChild === oldChildWrapper) this.lastChild_ = nodes[nodes.length - 1];
- oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ = oldChildWrapper.parentNode_ = undefined;
- if (oldChildNode.parentNode) {
- originalReplaceChild.call(oldChildNode.parentNode, unwrapNodesForInsertion(this, nodes), oldChildNode);
- }
- } else {
- ensureSameOwnerDocument(this, newChildWrapper);
- clearChildNodes(this);
- originalReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper), oldChildNode);
- }
- enqueueMutation(this, "childList", {
- addedNodes: nodes,
- removedNodes: createOneElementNodeList(oldChildWrapper),
- nextSibling: nextNode,
- previousSibling: previousNode
- });
- nodeWasRemoved(oldChildWrapper);
- nodesWereAdded(nodes, this);
- return oldChildWrapper;
- },
- nodeIsInserted_: function() {
- for (var child = this.firstChild; child; child = child.nextSibling) {
- child.nodeIsInserted_();
- }
- },
- hasChildNodes: function() {
- return this.firstChild !== null;
- },
- get parentNode() {
- return this.parentNode_ !== undefined ? this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);
- },
- get firstChild() {
- return this.firstChild_ !== undefined ? this.firstChild_ : wrap(unsafeUnwrap(this).firstChild);
- },
- get lastChild() {
- return this.lastChild_ !== undefined ? this.lastChild_ : wrap(unsafeUnwrap(this).lastChild);
- },
- get nextSibling() {
- return this.nextSibling_ !== undefined ? this.nextSibling_ : wrap(unsafeUnwrap(this).nextSibling);
- },
- get previousSibling() {
- return this.previousSibling_ !== undefined ? this.previousSibling_ : wrap(unsafeUnwrap(this).previousSibling);
- },
- get parentElement() {
- var p = this.parentNode;
- while (p && p.nodeType !== Node.ELEMENT_NODE) {
- p = p.parentNode;
- }
- return p;
- },
- get textContent() {
- var s = "";
- for (var child = this.firstChild; child; child = child.nextSibling) {
- if (child.nodeType != Node.COMMENT_NODE) {
- s += child.textContent;
- }
- }
- return s;
- },
- set textContent(textContent) {
- if (textContent == null) textContent = "";
- var removedNodes = snapshotNodeList(this.childNodes);
- if (this.invalidateShadowRenderer()) {
- removeAllChildNodes(this);
- if (textContent !== "") {
- var textNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent);
- this.appendChild(textNode);
- }
- } else {
- clearChildNodes(this);
- unsafeUnwrap(this).textContent = textContent;
- }
- var addedNodes = snapshotNodeList(this.childNodes);
- enqueueMutation(this, "childList", {
- addedNodes: addedNodes,
- removedNodes: removedNodes
- });
- nodesWereRemoved(removedNodes);
- nodesWereAdded(addedNodes, this);
- },
- get childNodes() {
- var wrapperList = new NodeList();
- var i = 0;
- for (var child = this.firstChild; child; child = child.nextSibling) {
- wrapperList[i++] = child;
- }
- wrapperList.length = i;
- return wrapperList;
- },
- cloneNode: function(deep) {
- return cloneNode(this, deep);
- },
- contains: function(child) {
- return contains(this, wrapIfNeeded(child));
- },
- compareDocumentPosition: function(otherNode) {
- return originalCompareDocumentPosition.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode));
- },
- isEqualNode: function(otherNode) {
- return originalIsEqualNode.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode));
- },
- normalize: function() {
- var nodes = snapshotNodeList(this.childNodes);
- var remNodes = [];
- var s = "";
- var modNode;
- for (var i = 0, n; i < nodes.length; i++) {
- n = nodes[i];
- if (n.nodeType === Node.TEXT_NODE) {
- if (!modNode && !n.data.length) this.removeChild(n); else if (!modNode) modNode = n; else {
- s += n.data;
- remNodes.push(n);
- }
- } else {
- if (modNode && remNodes.length) {
- modNode.data += s;
- cleanupNodes(remNodes);
- }
- remNodes = [];
- s = "";
- modNode = null;
- if (n.childNodes.length) n.normalize();
- }
- }
- if (modNode && remNodes.length) {
- modNode.data += s;
- cleanupNodes(remNodes);
- }
- }
- });
- defineWrapGetter(Node, "ownerDocument");
- registerWrapper(OriginalNode, Node, document.createDocumentFragment());
- delete Node.prototype.querySelector;
- delete Node.prototype.querySelectorAll;
- Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype);
- scope.cloneNode = cloneNode;
- scope.nodeWasAdded = nodeWasAdded;
- scope.nodeWasRemoved = nodeWasRemoved;
- scope.nodesWereAdded = nodesWereAdded;
- scope.nodesWereRemoved = nodesWereRemoved;
- scope.originalInsertBefore = originalInsertBefore;
- scope.originalRemoveChild = originalRemoveChild;
- scope.snapshotNodeList = snapshotNodeList;
- scope.wrappers.Node = Node;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLCollection = scope.wrappers.HTMLCollection;
- var NodeList = scope.wrappers.NodeList;
- var getTreeScope = scope.getTreeScope;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var originalDocumentQuerySelector = document.querySelector;
- var originalElementQuerySelector = document.documentElement.querySelector;
- var originalDocumentQuerySelectorAll = document.querySelectorAll;
- var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;
- var originalDocumentGetElementsByTagName = document.getElementsByTagName;
- var originalElementGetElementsByTagName = document.documentElement.getElementsByTagName;
- var originalDocumentGetElementsByTagNameNS = document.getElementsByTagNameNS;
- var originalElementGetElementsByTagNameNS = document.documentElement.getElementsByTagNameNS;
- var OriginalElement = window.Element;
- var OriginalDocument = window.HTMLDocument || window.Document;
- function filterNodeList(list, index, result, deep) {
- var wrappedItem = null;
- var root = null;
- for (var i = 0, length = list.length; i < length; i++) {
- wrappedItem = wrap(list[i]);
- if (!deep && (root = getTreeScope(wrappedItem).root)) {
- if (root instanceof scope.wrappers.ShadowRoot) {
- continue;
- }
- }
- result[index++] = wrappedItem;
- }
- return index;
- }
- function shimSelector(selector) {
- return String(selector).replace(/\/deep\/|::shadow|>>>/g, " ");
- }
- function shimMatchesSelector(selector) {
- return String(selector).replace(/:host\(([^\s]+)\)/g, "$1").replace(/([^\s]):host/g, "$1").replace(":host", "*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g, " ");
- }
- function findOne(node, selector) {
- var m, el = node.firstElementChild;
- while (el) {
- if (el.matches(selector)) return el;
- m = findOne(el, selector);
- if (m) return m;
- el = el.nextElementSibling;
- }
- return null;
- }
- function matchesSelector(el, selector) {
- return el.matches(selector);
- }
- var XHTML_NS = "http://www.w3.org/1999/xhtml";
- function matchesTagName(el, localName, localNameLowerCase) {
- var ln = el.localName;
- return ln === localName || ln === localNameLowerCase && el.namespaceURI === XHTML_NS;
- }
- function matchesEveryThing() {
- return true;
- }
- function matchesLocalNameOnly(el, ns, localName) {
- return el.localName === localName;
- }
- function matchesNameSpace(el, ns) {
- return el.namespaceURI === ns;
- }
- function matchesLocalNameNS(el, ns, localName) {
- return el.namespaceURI === ns && el.localName === localName;
- }
- function findElements(node, index, result, p, arg0, arg1) {
- var el = node.firstElementChild;
- while (el) {
- if (p(el, arg0, arg1)) result[index++] = el;
- index = findElements(el, index, result, p, arg0, arg1);
- el = el.nextElementSibling;
- }
- return index;
- }
- function querySelectorAllFiltered(p, index, result, selector, deep) {
- var target = unsafeUnwrap(this);
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findElements(this, index, result, p, selector, null);
- } else if (target instanceof OriginalElement) {
- list = originalElementQuerySelectorAll.call(target, selector);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentQuerySelectorAll.call(target, selector);
- } else {
- return findElements(this, index, result, p, selector, null);
- }
- return filterNodeList(list, index, result, deep);
- }
- var SelectorsInterface = {
- querySelector: function(selector) {
- var shimmed = shimSelector(selector);
- var deep = shimmed !== selector;
- selector = shimmed;
- var target = unsafeUnwrap(this);
- var wrappedItem;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findOne(this, selector);
- } else if (target instanceof OriginalElement) {
- wrappedItem = wrap(originalElementQuerySelector.call(target, selector));
- } else if (target instanceof OriginalDocument) {
- wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));
- } else {
- return findOne(this, selector);
- }
- if (!wrappedItem) {
- return wrappedItem;
- } else if (!deep && (root = getTreeScope(wrappedItem).root)) {
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findOne(this, selector);
- }
- }
- return wrappedItem;
- },
- querySelectorAll: function(selector) {
- var shimmed = shimSelector(selector);
- var deep = shimmed !== selector;
- selector = shimmed;
- var result = new NodeList();
- result.length = querySelectorAllFiltered.call(this, matchesSelector, 0, result, selector, deep);
- return result;
- }
- };
- var MatchesInterface = {
- matches: function(selector) {
- selector = shimMatchesSelector(selector);
- return scope.originalMatches.call(unsafeUnwrap(this), selector);
- }
- };
- function getElementsByTagNameFiltered(p, index, result, localName, lowercase) {
- var target = unsafeUnwrap(this);
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findElements(this, index, result, p, localName, lowercase);
- } else if (target instanceof OriginalElement) {
- list = originalElementGetElementsByTagName.call(target, localName, lowercase);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentGetElementsByTagName.call(target, localName, lowercase);
- } else {
- return findElements(this, index, result, p, localName, lowercase);
- }
- return filterNodeList(list, index, result, false);
- }
- function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {
- var target = unsafeUnwrap(this);
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findElements(this, index, result, p, ns, localName);
- } else if (target instanceof OriginalElement) {
- list = originalElementGetElementsByTagNameNS.call(target, ns, localName);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentGetElementsByTagNameNS.call(target, ns, localName);
- } else {
- return findElements(this, index, result, p, ns, localName);
- }
- return filterNodeList(list, index, result, false);
- }
- var GetElementsByInterface = {
- getElementsByTagName: function(localName) {
- var result = new HTMLCollection();
- var match = localName === "*" ? matchesEveryThing : matchesTagName;
- result.length = getElementsByTagNameFiltered.call(this, match, 0, result, localName, localName.toLowerCase());
- return result;
- },
- getElementsByClassName: function(className) {
- return this.querySelectorAll("." + className);
- },
- getElementsByTagNameNS: function(ns, localName) {
- var result = new HTMLCollection();
- var match = null;
- if (ns === "*") {
- match = localName === "*" ? matchesEveryThing : matchesLocalNameOnly;
- } else {
- match = localName === "*" ? matchesNameSpace : matchesLocalNameNS;
- }
- result.length = getElementsByTagNameNSFiltered.call(this, match, 0, result, ns || null, localName);
- return result;
- }
- };
- scope.GetElementsByInterface = GetElementsByInterface;
- scope.SelectorsInterface = SelectorsInterface;
- scope.MatchesInterface = MatchesInterface;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var NodeList = scope.wrappers.NodeList;
- function forwardElement(node) {
- while (node && node.nodeType !== Node.ELEMENT_NODE) {
- node = node.nextSibling;
- }
- return node;
- }
- function backwardsElement(node) {
- while (node && node.nodeType !== Node.ELEMENT_NODE) {
- node = node.previousSibling;
- }
- return node;
- }
- var ParentNodeInterface = {
- get firstElementChild() {
- return forwardElement(this.firstChild);
- },
- get lastElementChild() {
- return backwardsElement(this.lastChild);
- },
- get childElementCount() {
- var count = 0;
- for (var child = this.firstElementChild; child; child = child.nextElementSibling) {
- count++;
- }
- return count;
- },
- get children() {
- var wrapperList = new NodeList();
- var i = 0;
- for (var child = this.firstElementChild; child; child = child.nextElementSibling) {
- wrapperList[i++] = child;
- }
- wrapperList.length = i;
- return wrapperList;
- },
- remove: function() {
- var p = this.parentNode;
- if (p) p.removeChild(this);
- }
- };
- var ChildNodeInterface = {
- get nextElementSibling() {
- return forwardElement(this.nextSibling);
- },
- get previousElementSibling() {
- return backwardsElement(this.previousSibling);
- }
- };
- var NonElementParentNodeInterface = {
- getElementById: function(id) {
- if (/[ \t\n\r\f]/.test(id)) return null;
- return this.querySelector('[id="' + id + '"]');
- }
- };
- scope.ChildNodeInterface = ChildNodeInterface;
- scope.NonElementParentNodeInterface = NonElementParentNodeInterface;
- scope.ParentNodeInterface = ParentNodeInterface;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var ChildNodeInterface = scope.ChildNodeInterface;
- var Node = scope.wrappers.Node;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var OriginalCharacterData = window.CharacterData;
- function CharacterData(node) {
- Node.call(this, node);
- }
- CharacterData.prototype = Object.create(Node.prototype);
- mixin(CharacterData.prototype, {
- get nodeValue() {
- return this.data;
- },
- set nodeValue(data) {
- this.data = data;
- },
- get textContent() {
- return this.data;
- },
- set textContent(value) {
- this.data = value;
- },
- get data() {
- return unsafeUnwrap(this).data;
- },
- set data(value) {
- var oldValue = unsafeUnwrap(this).data;
- enqueueMutation(this, "characterData", {
- oldValue: oldValue
- });
- unsafeUnwrap(this).data = value;
- }
- });
- mixin(CharacterData.prototype, ChildNodeInterface);
- registerWrapper(OriginalCharacterData, CharacterData, document.createTextNode(""));
- scope.wrappers.CharacterData = CharacterData;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var CharacterData = scope.wrappers.CharacterData;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- function toUInt32(x) {
- return x >>> 0;
- }
- var OriginalText = window.Text;
- function Text(node) {
- CharacterData.call(this, node);
- }
- Text.prototype = Object.create(CharacterData.prototype);
- mixin(Text.prototype, {
- splitText: function(offset) {
- offset = toUInt32(offset);
- var s = this.data;
- if (offset > s.length) throw new Error("IndexSizeError");
- var head = s.slice(0, offset);
- var tail = s.slice(offset);
- this.data = head;
- var newTextNode = this.ownerDocument.createTextNode(tail);
- if (this.parentNode) this.parentNode.insertBefore(newTextNode, this.nextSibling);
- return newTextNode;
- }
- });
- registerWrapper(OriginalText, Text, document.createTextNode(""));
- scope.wrappers.Text = Text;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- if (!window.DOMTokenList) {
- console.warn("Missing DOMTokenList prototype, please include a " + "compatible classList polyfill such as http://goo.gl/uTcepH.");
- return;
- }
- var unsafeUnwrap = scope.unsafeUnwrap;
- var enqueueMutation = scope.enqueueMutation;
- function getClass(el) {
- return unsafeUnwrap(el).getAttribute("class");
- }
- function enqueueClassAttributeChange(el, oldValue) {
- enqueueMutation(el, "attributes", {
- name: "class",
- namespace: null,
- oldValue: oldValue
- });
- }
- function invalidateClass(el) {
- scope.invalidateRendererBasedOnAttribute(el, "class");
- }
- function changeClass(tokenList, method, args) {
- var ownerElement = tokenList.ownerElement_;
- if (ownerElement == null) {
- return method.apply(tokenList, args);
- }
- var oldValue = getClass(ownerElement);
- var retv = method.apply(tokenList, args);
- if (getClass(ownerElement) !== oldValue) {
- enqueueClassAttributeChange(ownerElement, oldValue);
- invalidateClass(ownerElement);
- }
- return retv;
- }
- var oldAdd = DOMTokenList.prototype.add;
- DOMTokenList.prototype.add = function() {
- changeClass(this, oldAdd, arguments);
- };
- var oldRemove = DOMTokenList.prototype.remove;
- DOMTokenList.prototype.remove = function() {
- changeClass(this, oldRemove, arguments);
- };
- var oldToggle = DOMTokenList.prototype.toggle;
- DOMTokenList.prototype.toggle = function() {
- return changeClass(this, oldToggle, arguments);
- };
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var ChildNodeInterface = scope.ChildNodeInterface;
- var GetElementsByInterface = scope.GetElementsByInterface;
- var Node = scope.wrappers.Node;
- var ParentNodeInterface = scope.ParentNodeInterface;
- var SelectorsInterface = scope.SelectorsInterface;
- var MatchesInterface = scope.MatchesInterface;
- var addWrapNodeListMethod = scope.addWrapNodeListMethod;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var oneOf = scope.oneOf;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrappers = scope.wrappers;
- var OriginalElement = window.Element;
- var matchesNames = [ "matches", "mozMatchesSelector", "msMatchesSelector", "webkitMatchesSelector" ].filter(function(name) {
- return OriginalElement.prototype[name];
- });
- var matchesName = matchesNames[0];
- var originalMatches = OriginalElement.prototype[matchesName];
- function invalidateRendererBasedOnAttribute(element, name) {
- var p = element.parentNode;
- if (!p || !p.shadowRoot) return;
- var renderer = scope.getRendererForHost(p);
- if (renderer.dependsOnAttribute(name)) renderer.invalidate();
- }
- function enqueAttributeChange(element, name, oldValue) {
- enqueueMutation(element, "attributes", {
- name: name,
- namespace: null,
- oldValue: oldValue
- });
- }
- var classListTable = new WeakMap();
- function Element(node) {
- Node.call(this, node);
- }
- Element.prototype = Object.create(Node.prototype);
- mixin(Element.prototype, {
- createShadowRoot: function() {
- var newShadowRoot = new wrappers.ShadowRoot(this);
- unsafeUnwrap(this).polymerShadowRoot_ = newShadowRoot;
- var renderer = scope.getRendererForHost(this);
- renderer.invalidate();
- return newShadowRoot;
- },
- get shadowRoot() {
- return unsafeUnwrap(this).polymerShadowRoot_ || null;
- },
- setAttribute: function(name, value) {
- var oldValue = unsafeUnwrap(this).getAttribute(name);
- unsafeUnwrap(this).setAttribute(name, value);
- enqueAttributeChange(this, name, oldValue);
- invalidateRendererBasedOnAttribute(this, name);
- },
- removeAttribute: function(name) {
- var oldValue = unsafeUnwrap(this).getAttribute(name);
- unsafeUnwrap(this).removeAttribute(name);
- enqueAttributeChange(this, name, oldValue);
- invalidateRendererBasedOnAttribute(this, name);
- },
- get classList() {
- var list = classListTable.get(this);
- if (!list) {
- list = unsafeUnwrap(this).classList;
- if (!list) return;
- list.ownerElement_ = this;
- classListTable.set(this, list);
- }
- return list;
- },
- get className() {
- return unsafeUnwrap(this).className;
- },
- set className(v) {
- this.setAttribute("class", v);
- },
- get id() {
- return unsafeUnwrap(this).id;
- },
- set id(v) {
- this.setAttribute("id", v);
- }
- });
- matchesNames.forEach(function(name) {
- if (name !== "matches") {
- Element.prototype[name] = function(selector) {
- return this.matches(selector);
- };
- }
- });
- if (OriginalElement.prototype.webkitCreateShadowRoot) {
- Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRoot;
- }
- mixin(Element.prototype, ChildNodeInterface);
- mixin(Element.prototype, GetElementsByInterface);
- mixin(Element.prototype, ParentNodeInterface);
- mixin(Element.prototype, SelectorsInterface);
- mixin(Element.prototype, MatchesInterface);
- registerWrapper(OriginalElement, Element, document.createElementNS(null, "x"));
- scope.invalidateRendererBasedOnAttribute = invalidateRendererBasedOnAttribute;
- scope.matchesNames = matchesNames;
- scope.originalMatches = originalMatches;
- scope.wrappers.Element = Element;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var Element = scope.wrappers.Element;
- var defineGetter = scope.defineGetter;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var nodesWereAdded = scope.nodesWereAdded;
- var nodesWereRemoved = scope.nodesWereRemoved;
- var registerWrapper = scope.registerWrapper;
- var snapshotNodeList = scope.snapshotNodeList;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrappers = scope.wrappers;
- var escapeAttrRegExp = /[&\u00A0"]/g;
- var escapeDataRegExp = /[&\u00A0<>]/g;
- function escapeReplace(c) {
- switch (c) {
- case "&":
- return "&";
-
- case "<":
- return "<";
-
- case ">":
- return ">";
-
- case '"':
- return """;
-
- case "Â ":
- return " ";
- }
- }
- function escapeAttr(s) {
- return s.replace(escapeAttrRegExp, escapeReplace);
- }
- function escapeData(s) {
- return s.replace(escapeDataRegExp, escapeReplace);
- }
- function makeSet(arr) {
- var set = {};
- for (var i = 0; i < arr.length; i++) {
- set[arr[i]] = true;
- }
- return set;
- }
- var voidElements = makeSet([ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]);
- var plaintextParents = makeSet([ "style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript" ]);
- var XHTML_NS = "http://www.w3.org/1999/xhtml";
- function needsSelfClosingSlash(node) {
- if (node.namespaceURI !== XHTML_NS) return true;
- var doctype = node.ownerDocument.doctype;
- return doctype && doctype.publicId && doctype.systemId;
- }
- function getOuterHTML(node, parentNode) {
- switch (node.nodeType) {
- case Node.ELEMENT_NODE:
- var tagName = node.tagName.toLowerCase();
- var s = "<" + tagName;
- var attrs = node.attributes;
- for (var i = 0, attr; attr = attrs[i]; i++) {
- s += " " + attr.name + '="' + escapeAttr(attr.value) + '"';
- }
- if (voidElements[tagName]) {
- if (needsSelfClosingSlash(node)) s += "/";
- return s + ">";
- }
- return s + ">" + getInnerHTML(node) + "" + tagName + ">";
-
- case Node.TEXT_NODE:
- var data = node.data;
- if (parentNode && plaintextParents[parentNode.localName]) return data;
- return escapeData(data);
-
- case Node.COMMENT_NODE:
- return "";
-
- default:
- console.error(node);
- throw new Error("not implemented");
- }
- }
- function getInnerHTML(node) {
- if (node instanceof wrappers.HTMLTemplateElement) node = node.content;
- var s = "";
- for (var child = node.firstChild; child; child = child.nextSibling) {
- s += getOuterHTML(child, node);
- }
- return s;
- }
- function setInnerHTML(node, value, opt_tagName) {
- var tagName = opt_tagName || "div";
- node.textContent = "";
- var tempElement = unwrap(node.ownerDocument.createElement(tagName));
- tempElement.innerHTML = value;
- var firstChild;
- while (firstChild = tempElement.firstChild) {
- node.appendChild(wrap(firstChild));
- }
- }
- var oldIe = /MSIE/.test(navigator.userAgent);
- var OriginalHTMLElement = window.HTMLElement;
- var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
- function HTMLElement(node) {
- Element.call(this, node);
- }
- HTMLElement.prototype = Object.create(Element.prototype);
- mixin(HTMLElement.prototype, {
- get innerHTML() {
- return getInnerHTML(this);
- },
- set innerHTML(value) {
- if (oldIe && plaintextParents[this.localName]) {
- this.textContent = value;
- return;
- }
- var removedNodes = snapshotNodeList(this.childNodes);
- if (this.invalidateShadowRenderer()) {
- if (this instanceof wrappers.HTMLTemplateElement) setInnerHTML(this.content, value); else setInnerHTML(this, value, this.tagName);
- } else if (!OriginalHTMLTemplateElement && this instanceof wrappers.HTMLTemplateElement) {
- setInnerHTML(this.content, value);
- } else {
- unsafeUnwrap(this).innerHTML = value;
- }
- var addedNodes = snapshotNodeList(this.childNodes);
- enqueueMutation(this, "childList", {
- addedNodes: addedNodes,
- removedNodes: removedNodes
- });
- nodesWereRemoved(removedNodes);
- nodesWereAdded(addedNodes, this);
- },
- get outerHTML() {
- return getOuterHTML(this, this.parentNode);
- },
- set outerHTML(value) {
- var p = this.parentNode;
- if (p) {
- p.invalidateShadowRenderer();
- var df = frag(p, value);
- p.replaceChild(df, this);
- }
- },
- insertAdjacentHTML: function(position, text) {
- var contextElement, refNode;
- switch (String(position).toLowerCase()) {
- case "beforebegin":
- contextElement = this.parentNode;
- refNode = this;
- break;
-
- case "afterend":
- contextElement = this.parentNode;
- refNode = this.nextSibling;
- break;
-
- case "afterbegin":
- contextElement = this;
- refNode = this.firstChild;
- break;
-
- case "beforeend":
- contextElement = this;
- refNode = null;
- break;
-
- default:
- return;
- }
- var df = frag(contextElement, text);
- contextElement.insertBefore(df, refNode);
- },
- get hidden() {
- return this.hasAttribute("hidden");
- },
- set hidden(v) {
- if (v) {
- this.setAttribute("hidden", "");
- } else {
- this.removeAttribute("hidden");
- }
- }
- });
- function frag(contextElement, html) {
- var p = unwrap(contextElement.cloneNode(false));
- p.innerHTML = html;
- var df = unwrap(document.createDocumentFragment());
- var c;
- while (c = p.firstChild) {
- df.appendChild(c);
- }
- return wrap(df);
- }
- function getter(name) {
- return function() {
- scope.renderAllPending();
- return unsafeUnwrap(this)[name];
- };
- }
- function getterRequiresRendering(name) {
- defineGetter(HTMLElement, name, getter(name));
- }
- [ "clientHeight", "clientLeft", "clientTop", "clientWidth", "offsetHeight", "offsetLeft", "offsetTop", "offsetWidth", "scrollHeight", "scrollWidth" ].forEach(getterRequiresRendering);
- function getterAndSetterRequiresRendering(name) {
- Object.defineProperty(HTMLElement.prototype, name, {
- get: getter(name),
- set: function(v) {
- scope.renderAllPending();
- unsafeUnwrap(this)[name] = v;
- },
- configurable: true,
- enumerable: true
- });
- }
- [ "scrollLeft", "scrollTop" ].forEach(getterAndSetterRequiresRendering);
- function methodRequiresRendering(name) {
- Object.defineProperty(HTMLElement.prototype, name, {
- value: function() {
- scope.renderAllPending();
- return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);
- },
- configurable: true,
- enumerable: true
- });
- }
- [ "focus", "getBoundingClientRect", "getClientRects", "scrollIntoView" ].forEach(methodRequiresRendering);
- registerWrapper(OriginalHTMLElement, HTMLElement, document.createElement("b"));
- scope.wrappers.HTMLElement = HTMLElement;
- scope.getInnerHTML = getInnerHTML;
- scope.setInnerHTML = setInnerHTML;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var OriginalHTMLCanvasElement = window.HTMLCanvasElement;
- function HTMLCanvasElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLCanvasElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLCanvasElement.prototype, {
- getContext: function() {
- var context = unsafeUnwrap(this).getContext.apply(unsafeUnwrap(this), arguments);
- return context && wrap(context);
- }
- });
- registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement, document.createElement("canvas"));
- scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLContentElement = window.HTMLContentElement;
- function HTMLContentElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLContentElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLContentElement.prototype, {
- constructor: HTMLContentElement,
- get select() {
- return this.getAttribute("select");
- },
- set select(value) {
- this.setAttribute("select", value);
- },
- setAttribute: function(n, v) {
- HTMLElement.prototype.setAttribute.call(this, n, v);
- if (String(n).toLowerCase() === "select") this.invalidateShadowRenderer(true);
- }
- });
- if (OriginalHTMLContentElement) registerWrapper(OriginalHTMLContentElement, HTMLContentElement);
- scope.wrappers.HTMLContentElement = HTMLContentElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var unwrap = scope.unwrap;
- var OriginalHTMLFormElement = window.HTMLFormElement;
- function HTMLFormElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLFormElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLFormElement.prototype, {
- get elements() {
- return wrapHTMLCollection(unwrap(this).elements);
- }
- });
- registerWrapper(OriginalHTMLFormElement, HTMLFormElement, document.createElement("form"));
- scope.wrappers.HTMLFormElement = HTMLFormElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var rewrap = scope.rewrap;
- var OriginalHTMLImageElement = window.HTMLImageElement;
- function HTMLImageElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLImageElement.prototype = Object.create(HTMLElement.prototype);
- registerWrapper(OriginalHTMLImageElement, HTMLImageElement, document.createElement("img"));
- function Image(width, height) {
- if (!(this instanceof Image)) {
- throw new TypeError("DOM object constructor cannot be called as a function.");
- }
- var node = unwrap(document.createElement("img"));
- HTMLElement.call(this, node);
- rewrap(node, this);
- if (width !== undefined) node.width = width;
- if (height !== undefined) node.height = height;
- }
- Image.prototype = HTMLImageElement.prototype;
- scope.wrappers.HTMLImageElement = HTMLImageElement;
- scope.wrappers.Image = Image;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var NodeList = scope.wrappers.NodeList;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLShadowElement = window.HTMLShadowElement;
- function HTMLShadowElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLShadowElement.prototype = Object.create(HTMLElement.prototype);
- HTMLShadowElement.prototype.constructor = HTMLShadowElement;
- if (OriginalHTMLShadowElement) registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement);
- scope.wrappers.HTMLShadowElement = HTMLShadowElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var contentTable = new WeakMap();
- var templateContentsOwnerTable = new WeakMap();
- function getTemplateContentsOwner(doc) {
- if (!doc.defaultView) return doc;
- var d = templateContentsOwnerTable.get(doc);
- if (!d) {
- d = doc.implementation.createHTMLDocument("");
- while (d.lastChild) {
- d.removeChild(d.lastChild);
- }
- templateContentsOwnerTable.set(doc, d);
- }
- return d;
- }
- function extractContent(templateElement) {
- var doc = getTemplateContentsOwner(templateElement.ownerDocument);
- var df = unwrap(doc.createDocumentFragment());
- var child;
- while (child = templateElement.firstChild) {
- df.appendChild(child);
- }
- return df;
- }
- var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
- function HTMLTemplateElement(node) {
- HTMLElement.call(this, node);
- if (!OriginalHTMLTemplateElement) {
- var content = extractContent(node);
- contentTable.set(this, wrap(content));
- }
- }
- HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTemplateElement.prototype, {
- constructor: HTMLTemplateElement,
- get content() {
- if (OriginalHTMLTemplateElement) return wrap(unsafeUnwrap(this).content);
- return contentTable.get(this);
- }
- });
- if (OriginalHTMLTemplateElement) registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);
- scope.wrappers.HTMLTemplateElement = HTMLTemplateElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLMediaElement = window.HTMLMediaElement;
- if (!OriginalHTMLMediaElement) return;
- function HTMLMediaElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
- registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement, document.createElement("audio"));
- scope.wrappers.HTMLMediaElement = HTMLMediaElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var rewrap = scope.rewrap;
- var OriginalHTMLAudioElement = window.HTMLAudioElement;
- if (!OriginalHTMLAudioElement) return;
- function HTMLAudioElement(node) {
- HTMLMediaElement.call(this, node);
- }
- HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
- registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement, document.createElement("audio"));
- function Audio(src) {
- if (!(this instanceof Audio)) {
- throw new TypeError("DOM object constructor cannot be called as a function.");
- }
- var node = unwrap(document.createElement("audio"));
- HTMLMediaElement.call(this, node);
- rewrap(node, this);
- node.setAttribute("preload", "auto");
- if (src !== undefined) node.setAttribute("src", src);
- }
- Audio.prototype = HTMLAudioElement.prototype;
- scope.wrappers.HTMLAudioElement = HTMLAudioElement;
- scope.wrappers.Audio = Audio;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var rewrap = scope.rewrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLOptionElement = window.HTMLOptionElement;
- function trimText(s) {
- return s.replace(/\s+/g, " ").trim();
- }
- function HTMLOptionElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLOptionElement.prototype, {
- get text() {
- return trimText(this.textContent);
- },
- set text(value) {
- this.textContent = trimText(String(value));
- },
- get form() {
- return wrap(unwrap(this).form);
- }
- });
- registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement, document.createElement("option"));
- function Option(text, value, defaultSelected, selected) {
- if (!(this instanceof Option)) {
- throw new TypeError("DOM object constructor cannot be called as a function.");
- }
- var node = unwrap(document.createElement("option"));
- HTMLElement.call(this, node);
- rewrap(node, this);
- if (text !== undefined) node.text = text;
- if (value !== undefined) node.setAttribute("value", value);
- if (defaultSelected === true) node.setAttribute("selected", "");
- node.selected = selected === true;
- }
- Option.prototype = HTMLOptionElement.prototype;
- scope.wrappers.HTMLOptionElement = HTMLOptionElement;
- scope.wrappers.Option = Option;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLSelectElement = window.HTMLSelectElement;
- function HTMLSelectElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLSelectElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLSelectElement.prototype, {
- add: function(element, before) {
- if (typeof before === "object") before = unwrap(before);
- unwrap(this).add(unwrap(element), before);
- },
- remove: function(indexOrNode) {
- if (indexOrNode === undefined) {
- HTMLElement.prototype.remove.call(this);
- return;
- }
- if (typeof indexOrNode === "object") indexOrNode = unwrap(indexOrNode);
- unwrap(this).remove(indexOrNode);
- },
- get form() {
- return wrap(unwrap(this).form);
- }
- });
- registerWrapper(OriginalHTMLSelectElement, HTMLSelectElement, document.createElement("select"));
- scope.wrappers.HTMLSelectElement = HTMLSelectElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var OriginalHTMLTableElement = window.HTMLTableElement;
- function HTMLTableElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLTableElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTableElement.prototype, {
- get caption() {
- return wrap(unwrap(this).caption);
- },
- createCaption: function() {
- return wrap(unwrap(this).createCaption());
- },
- get tHead() {
- return wrap(unwrap(this).tHead);
- },
- createTHead: function() {
- return wrap(unwrap(this).createTHead());
- },
- createTFoot: function() {
- return wrap(unwrap(this).createTFoot());
- },
- get tFoot() {
- return wrap(unwrap(this).tFoot);
- },
- get tBodies() {
- return wrapHTMLCollection(unwrap(this).tBodies);
- },
- createTBody: function() {
- return wrap(unwrap(this).createTBody());
- },
- get rows() {
- return wrapHTMLCollection(unwrap(this).rows);
- },
- insertRow: function(index) {
- return wrap(unwrap(this).insertRow(index));
- }
- });
- registerWrapper(OriginalHTMLTableElement, HTMLTableElement, document.createElement("table"));
- scope.wrappers.HTMLTableElement = HTMLTableElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLTableSectionElement = window.HTMLTableSectionElement;
- function HTMLTableSectionElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLTableSectionElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTableSectionElement.prototype, {
- constructor: HTMLTableSectionElement,
- get rows() {
- return wrapHTMLCollection(unwrap(this).rows);
- },
- insertRow: function(index) {
- return wrap(unwrap(this).insertRow(index));
- }
- });
- registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionElement, document.createElement("thead"));
- scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLTableRowElement = window.HTMLTableRowElement;
- function HTMLTableRowElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLTableRowElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTableRowElement.prototype, {
- get cells() {
- return wrapHTMLCollection(unwrap(this).cells);
- },
- insertCell: function(index) {
- return wrap(unwrap(this).insertCell(index));
- }
- });
- registerWrapper(OriginalHTMLTableRowElement, HTMLTableRowElement, document.createElement("tr"));
- scope.wrappers.HTMLTableRowElement = HTMLTableRowElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLContentElement = scope.wrappers.HTMLContentElement;
- var HTMLElement = scope.wrappers.HTMLElement;
- var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
- var HTMLTemplateElement = scope.wrappers.HTMLTemplateElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLUnknownElement = window.HTMLUnknownElement;
- function HTMLUnknownElement(node) {
- switch (node.localName) {
- case "content":
- return new HTMLContentElement(node);
-
- case "shadow":
- return new HTMLShadowElement(node);
-
- case "template":
- return new HTMLTemplateElement(node);
- }
- HTMLElement.call(this, node);
- }
- HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype);
- registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement);
- scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var Element = scope.wrappers.Element;
- var HTMLElement = scope.wrappers.HTMLElement;
- var registerWrapper = scope.registerWrapper;
- var defineWrapGetter = scope.defineWrapGetter;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var mixin = scope.mixin;
- var SVG_NS = "http://www.w3.org/2000/svg";
- var OriginalSVGElement = window.SVGElement;
- var svgTitleElement = document.createElementNS(SVG_NS, "title");
- if (!("classList" in svgTitleElement)) {
- var descr = Object.getOwnPropertyDescriptor(Element.prototype, "classList");
- Object.defineProperty(HTMLElement.prototype, "classList", descr);
- delete Element.prototype.classList;
- }
- function SVGElement(node) {
- Element.call(this, node);
- }
- SVGElement.prototype = Object.create(Element.prototype);
- mixin(SVGElement.prototype, {
- get ownerSVGElement() {
- return wrap(unsafeUnwrap(this).ownerSVGElement);
- }
- });
- registerWrapper(OriginalSVGElement, SVGElement, document.createElementNS(SVG_NS, "title"));
- scope.wrappers.SVGElement = SVGElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalSVGUseElement = window.SVGUseElement;
- var SVG_NS = "http://www.w3.org/2000/svg";
- var gWrapper = wrap(document.createElementNS(SVG_NS, "g"));
- var useElement = document.createElementNS(SVG_NS, "use");
- var SVGGElement = gWrapper.constructor;
- var parentInterfacePrototype = Object.getPrototypeOf(SVGGElement.prototype);
- var parentInterface = parentInterfacePrototype.constructor;
- function SVGUseElement(impl) {
- parentInterface.call(this, impl);
- }
- SVGUseElement.prototype = Object.create(parentInterfacePrototype);
- if ("instanceRoot" in useElement) {
- mixin(SVGUseElement.prototype, {
- get instanceRoot() {
- return wrap(unwrap(this).instanceRoot);
- },
- get animatedInstanceRoot() {
- return wrap(unwrap(this).animatedInstanceRoot);
- }
- });
- }
- registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement);
- scope.wrappers.SVGUseElement = SVGUseElement;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var EventTarget = scope.wrappers.EventTarget;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var OriginalSVGElementInstance = window.SVGElementInstance;
- if (!OriginalSVGElementInstance) return;
- function SVGElementInstance(impl) {
- EventTarget.call(this, impl);
- }
- SVGElementInstance.prototype = Object.create(EventTarget.prototype);
- mixin(SVGElementInstance.prototype, {
- get correspondingElement() {
- return wrap(unsafeUnwrap(this).correspondingElement);
- },
- get correspondingUseElement() {
- return wrap(unsafeUnwrap(this).correspondingUseElement);
- },
- get parentNode() {
- return wrap(unsafeUnwrap(this).parentNode);
- },
- get childNodes() {
- throw new Error("Not implemented");
- },
- get firstChild() {
- return wrap(unsafeUnwrap(this).firstChild);
- },
- get lastChild() {
- return wrap(unsafeUnwrap(this).lastChild);
- },
- get previousSibling() {
- return wrap(unsafeUnwrap(this).previousSibling);
- },
- get nextSibling() {
- return wrap(unsafeUnwrap(this).nextSibling);
- }
- });
- registerWrapper(OriginalSVGElementInstance, SVGElementInstance);
- scope.wrappers.SVGElementInstance = SVGElementInstance;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;
- function CanvasRenderingContext2D(impl) {
- setWrapper(impl, this);
- }
- mixin(CanvasRenderingContext2D.prototype, {
- get canvas() {
- return wrap(unsafeUnwrap(this).canvas);
- },
- drawImage: function() {
- arguments[0] = unwrapIfNeeded(arguments[0]);
- unsafeUnwrap(this).drawImage.apply(unsafeUnwrap(this), arguments);
- },
- createPattern: function() {
- arguments[0] = unwrap(arguments[0]);
- return unsafeUnwrap(this).createPattern.apply(unsafeUnwrap(this), arguments);
- }
- });
- registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D, document.createElement("canvas").getContext("2d"));
- scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var addForwardingProperties = scope.addForwardingProperties;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalWebGLRenderingContext = window.WebGLRenderingContext;
- if (!OriginalWebGLRenderingContext) return;
- function WebGLRenderingContext(impl) {
- setWrapper(impl, this);
- }
- mixin(WebGLRenderingContext.prototype, {
- get canvas() {
- return wrap(unsafeUnwrap(this).canvas);
- },
- texImage2D: function() {
- arguments[5] = unwrapIfNeeded(arguments[5]);
- unsafeUnwrap(this).texImage2D.apply(unsafeUnwrap(this), arguments);
- },
- texSubImage2D: function() {
- arguments[6] = unwrapIfNeeded(arguments[6]);
- unsafeUnwrap(this).texSubImage2D.apply(unsafeUnwrap(this), arguments);
- }
- });
- var OriginalWebGLRenderingContextBase = Object.getPrototypeOf(OriginalWebGLRenderingContext.prototype);
- if (OriginalWebGLRenderingContextBase !== Object.prototype) {
- addForwardingProperties(OriginalWebGLRenderingContextBase, WebGLRenderingContext.prototype);
- }
- var instanceProperties = /WebKit/.test(navigator.userAgent) ? {
- drawingBufferHeight: null,
- drawingBufferWidth: null
- } : {};
- registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext, instanceProperties);
- scope.wrappers.WebGLRenderingContext = WebGLRenderingContext;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var Node = scope.wrappers.Node;
- var GetElementsByInterface = scope.GetElementsByInterface;
- var NonElementParentNodeInterface = scope.NonElementParentNodeInterface;
- var ParentNodeInterface = scope.ParentNodeInterface;
- var SelectorsInterface = scope.SelectorsInterface;
- var mixin = scope.mixin;
- var registerObject = scope.registerObject;
- var registerWrapper = scope.registerWrapper;
- var OriginalDocumentFragment = window.DocumentFragment;
- function DocumentFragment(node) {
- Node.call(this, node);
- }
- DocumentFragment.prototype = Object.create(Node.prototype);
- mixin(DocumentFragment.prototype, ParentNodeInterface);
- mixin(DocumentFragment.prototype, SelectorsInterface);
- mixin(DocumentFragment.prototype, GetElementsByInterface);
- mixin(DocumentFragment.prototype, NonElementParentNodeInterface);
- registerWrapper(OriginalDocumentFragment, DocumentFragment, document.createDocumentFragment());
- scope.wrappers.DocumentFragment = DocumentFragment;
- var Comment = registerObject(document.createComment(""));
- scope.wrappers.Comment = Comment;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var DocumentFragment = scope.wrappers.DocumentFragment;
- var TreeScope = scope.TreeScope;
- var elementFromPoint = scope.elementFromPoint;
- var getInnerHTML = scope.getInnerHTML;
- var getTreeScope = scope.getTreeScope;
- var mixin = scope.mixin;
- var rewrap = scope.rewrap;
- var setInnerHTML = scope.setInnerHTML;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var shadowHostTable = new WeakMap();
- var nextOlderShadowTreeTable = new WeakMap();
- function ShadowRoot(hostWrapper) {
- var node = unwrap(unsafeUnwrap(hostWrapper).ownerDocument.createDocumentFragment());
- DocumentFragment.call(this, node);
- rewrap(node, this);
- var oldShadowRoot = hostWrapper.shadowRoot;
- nextOlderShadowTreeTable.set(this, oldShadowRoot);
- this.treeScope_ = new TreeScope(this, getTreeScope(oldShadowRoot || hostWrapper));
- shadowHostTable.set(this, hostWrapper);
- }
- ShadowRoot.prototype = Object.create(DocumentFragment.prototype);
- mixin(ShadowRoot.prototype, {
- constructor: ShadowRoot,
- get innerHTML() {
- return getInnerHTML(this);
- },
- set innerHTML(value) {
- setInnerHTML(this, value);
- this.invalidateShadowRenderer();
- },
- get olderShadowRoot() {
- return nextOlderShadowTreeTable.get(this) || null;
- },
- get host() {
- return shadowHostTable.get(this) || null;
- },
- invalidateShadowRenderer: function() {
- return shadowHostTable.get(this).invalidateShadowRenderer();
- },
- elementFromPoint: function(x, y) {
- return elementFromPoint(this, this.ownerDocument, x, y);
- },
- getSelection: function() {
- return document.getSelection();
- },
- get activeElement() {
- var unwrappedActiveElement = unwrap(this).ownerDocument.activeElement;
- if (!unwrappedActiveElement || !unwrappedActiveElement.nodeType) return null;
- var activeElement = wrap(unwrappedActiveElement);
- while (!this.contains(activeElement)) {
- while (activeElement.parentNode) {
- activeElement = activeElement.parentNode;
- }
- if (activeElement.host) {
- activeElement = activeElement.host;
- } else {
- return null;
- }
- }
- return activeElement;
- }
- });
- scope.wrappers.ShadowRoot = ShadowRoot;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var getTreeScope = scope.getTreeScope;
- var OriginalRange = window.Range;
- var ShadowRoot = scope.wrappers.ShadowRoot;
- function getHost(node) {
- var root = getTreeScope(node).root;
- if (root instanceof ShadowRoot) {
- return root.host;
- }
- return null;
- }
- function hostNodeToShadowNode(refNode, offset) {
- if (refNode.shadowRoot) {
- offset = Math.min(refNode.childNodes.length - 1, offset);
- var child = refNode.childNodes[offset];
- if (child) {
- var insertionPoint = scope.getDestinationInsertionPoints(child);
- if (insertionPoint.length > 0) {
- var parentNode = insertionPoint[0].parentNode;
- if (parentNode.nodeType == Node.ELEMENT_NODE) {
- refNode = parentNode;
- }
- }
- }
- }
- return refNode;
- }
- function shadowNodeToHostNode(node) {
- node = wrap(node);
- return getHost(node) || node;
- }
- function Range(impl) {
- setWrapper(impl, this);
- }
- Range.prototype = {
- get startContainer() {
- return shadowNodeToHostNode(unsafeUnwrap(this).startContainer);
- },
- get endContainer() {
- return shadowNodeToHostNode(unsafeUnwrap(this).endContainer);
- },
- get commonAncestorContainer() {
- return shadowNodeToHostNode(unsafeUnwrap(this).commonAncestorContainer);
- },
- setStart: function(refNode, offset) {
- refNode = hostNodeToShadowNode(refNode, offset);
- unsafeUnwrap(this).setStart(unwrapIfNeeded(refNode), offset);
- },
- setEnd: function(refNode, offset) {
- refNode = hostNodeToShadowNode(refNode, offset);
- unsafeUnwrap(this).setEnd(unwrapIfNeeded(refNode), offset);
- },
- setStartBefore: function(refNode) {
- unsafeUnwrap(this).setStartBefore(unwrapIfNeeded(refNode));
- },
- setStartAfter: function(refNode) {
- unsafeUnwrap(this).setStartAfter(unwrapIfNeeded(refNode));
- },
- setEndBefore: function(refNode) {
- unsafeUnwrap(this).setEndBefore(unwrapIfNeeded(refNode));
- },
- setEndAfter: function(refNode) {
- unsafeUnwrap(this).setEndAfter(unwrapIfNeeded(refNode));
- },
- selectNode: function(refNode) {
- unsafeUnwrap(this).selectNode(unwrapIfNeeded(refNode));
- },
- selectNodeContents: function(refNode) {
- unsafeUnwrap(this).selectNodeContents(unwrapIfNeeded(refNode));
- },
- compareBoundaryPoints: function(how, sourceRange) {
- return unsafeUnwrap(this).compareBoundaryPoints(how, unwrap(sourceRange));
- },
- extractContents: function() {
- return wrap(unsafeUnwrap(this).extractContents());
- },
- cloneContents: function() {
- return wrap(unsafeUnwrap(this).cloneContents());
- },
- insertNode: function(node) {
- unsafeUnwrap(this).insertNode(unwrapIfNeeded(node));
- },
- surroundContents: function(newParent) {
- unsafeUnwrap(this).surroundContents(unwrapIfNeeded(newParent));
- },
- cloneRange: function() {
- return wrap(unsafeUnwrap(this).cloneRange());
- },
- isPointInRange: function(node, offset) {
- return unsafeUnwrap(this).isPointInRange(unwrapIfNeeded(node), offset);
- },
- comparePoint: function(node, offset) {
- return unsafeUnwrap(this).comparePoint(unwrapIfNeeded(node), offset);
- },
- intersectsNode: function(node) {
- return unsafeUnwrap(this).intersectsNode(unwrapIfNeeded(node));
- },
- toString: function() {
- return unsafeUnwrap(this).toString();
- }
- };
- if (OriginalRange.prototype.createContextualFragment) {
- Range.prototype.createContextualFragment = function(html) {
- return wrap(unsafeUnwrap(this).createContextualFragment(html));
- };
- }
- registerWrapper(window.Range, Range, document.createRange());
- scope.wrappers.Range = Range;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var Element = scope.wrappers.Element;
- var HTMLContentElement = scope.wrappers.HTMLContentElement;
- var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
- var Node = scope.wrappers.Node;
- var ShadowRoot = scope.wrappers.ShadowRoot;
- var assert = scope.assert;
- var getTreeScope = scope.getTreeScope;
- var mixin = scope.mixin;
- var oneOf = scope.oneOf;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var ArraySplice = scope.ArraySplice;
- function updateWrapperUpAndSideways(wrapper) {
- wrapper.previousSibling_ = wrapper.previousSibling;
- wrapper.nextSibling_ = wrapper.nextSibling;
- wrapper.parentNode_ = wrapper.parentNode;
- }
- function updateWrapperDown(wrapper) {
- wrapper.firstChild_ = wrapper.firstChild;
- wrapper.lastChild_ = wrapper.lastChild;
- }
- function updateAllChildNodes(parentNodeWrapper) {
- assert(parentNodeWrapper instanceof Node);
- for (var childWrapper = parentNodeWrapper.firstChild; childWrapper; childWrapper = childWrapper.nextSibling) {
- updateWrapperUpAndSideways(childWrapper);
- }
- updateWrapperDown(parentNodeWrapper);
- }
- function insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) {
- var parentNode = unwrap(parentNodeWrapper);
- var newChild = unwrap(newChildWrapper);
- var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;
- remove(newChildWrapper);
- updateWrapperUpAndSideways(newChildWrapper);
- if (!refChildWrapper) {
- parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild;
- if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild) parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;
- var lastChildWrapper = wrap(parentNode.lastChild);
- if (lastChildWrapper) lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;
- } else {
- if (parentNodeWrapper.firstChild === refChildWrapper) parentNodeWrapper.firstChild_ = refChildWrapper;
- refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;
- }
- scope.originalInsertBefore.call(parentNode, newChild, refChild);
- }
- function remove(nodeWrapper) {
- var node = unwrap(nodeWrapper);
- var parentNode = node.parentNode;
- if (!parentNode) return;
- var parentNodeWrapper = wrap(parentNode);
- updateWrapperUpAndSideways(nodeWrapper);
- if (nodeWrapper.previousSibling) nodeWrapper.previousSibling.nextSibling_ = nodeWrapper;
- if (nodeWrapper.nextSibling) nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;
- if (parentNodeWrapper.lastChild === nodeWrapper) parentNodeWrapper.lastChild_ = nodeWrapper;
- if (parentNodeWrapper.firstChild === nodeWrapper) parentNodeWrapper.firstChild_ = nodeWrapper;
- scope.originalRemoveChild.call(parentNode, node);
- }
- var distributedNodesTable = new WeakMap();
- var destinationInsertionPointsTable = new WeakMap();
- var rendererForHostTable = new WeakMap();
- function resetDistributedNodes(insertionPoint) {
- distributedNodesTable.set(insertionPoint, []);
- }
- function getDistributedNodes(insertionPoint) {
- var rv = distributedNodesTable.get(insertionPoint);
- if (!rv) distributedNodesTable.set(insertionPoint, rv = []);
- return rv;
- }
- function getChildNodesSnapshot(node) {
- var result = [], i = 0;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- result[i++] = child;
- }
- return result;
- }
- var request = oneOf(window, [ "requestAnimationFrame", "mozRequestAnimationFrame", "webkitRequestAnimationFrame", "setTimeout" ]);
- var pendingDirtyRenderers = [];
- var renderTimer;
- function renderAllPending() {
- for (var i = 0; i < pendingDirtyRenderers.length; i++) {
- var renderer = pendingDirtyRenderers[i];
- var parentRenderer = renderer.parentRenderer;
- if (parentRenderer && parentRenderer.dirty) continue;
- renderer.render();
- }
- pendingDirtyRenderers = [];
- }
- function handleRequestAnimationFrame() {
- renderTimer = null;
- renderAllPending();
- }
- function getRendererForHost(host) {
- var renderer = rendererForHostTable.get(host);
- if (!renderer) {
- renderer = new ShadowRenderer(host);
- rendererForHostTable.set(host, renderer);
- }
- return renderer;
- }
- function getShadowRootAncestor(node) {
- var root = getTreeScope(node).root;
- if (root instanceof ShadowRoot) return root;
- return null;
- }
- function getRendererForShadowRoot(shadowRoot) {
- return getRendererForHost(shadowRoot.host);
- }
- var spliceDiff = new ArraySplice();
- spliceDiff.equals = function(renderNode, rawNode) {
- return unwrap(renderNode.node) === rawNode;
- };
- function RenderNode(node) {
- this.skip = false;
- this.node = node;
- this.childNodes = [];
- }
- RenderNode.prototype = {
- append: function(node) {
- var rv = new RenderNode(node);
- this.childNodes.push(rv);
- return rv;
- },
- sync: function(opt_added) {
- if (this.skip) return;
- var nodeWrapper = this.node;
- var newChildren = this.childNodes;
- var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));
- var added = opt_added || new WeakMap();
- var splices = spliceDiff.calculateSplices(newChildren, oldChildren);
- var newIndex = 0, oldIndex = 0;
- var lastIndex = 0;
- for (var i = 0; i < splices.length; i++) {
- var splice = splices[i];
- for (;lastIndex < splice.index; lastIndex++) {
- oldIndex++;
- newChildren[newIndex++].sync(added);
- }
- var removedCount = splice.removed.length;
- for (var j = 0; j < removedCount; j++) {
- var wrapper = wrap(oldChildren[oldIndex++]);
- if (!added.get(wrapper)) remove(wrapper);
- }
- var addedCount = splice.addedCount;
- var refNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]);
- for (var j = 0; j < addedCount; j++) {
- var newChildRenderNode = newChildren[newIndex++];
- var newChildWrapper = newChildRenderNode.node;
- insertBefore(nodeWrapper, newChildWrapper, refNode);
- added.set(newChildWrapper, true);
- newChildRenderNode.sync(added);
- }
- lastIndex += addedCount;
- }
- for (var i = lastIndex; i < newChildren.length; i++) {
- newChildren[i].sync(added);
- }
- }
- };
- function ShadowRenderer(host) {
- this.host = host;
- this.dirty = false;
- this.invalidateAttributes();
- this.associateNode(host);
- }
- ShadowRenderer.prototype = {
- render: function(opt_renderNode) {
- if (!this.dirty) return;
- this.invalidateAttributes();
- var host = this.host;
- this.distribution(host);
- var renderNode = opt_renderNode || new RenderNode(host);
- this.buildRenderTree(renderNode, host);
- var topMostRenderer = !opt_renderNode;
- if (topMostRenderer) renderNode.sync();
- this.dirty = false;
- },
- get parentRenderer() {
- return getTreeScope(this.host).renderer;
- },
- invalidate: function() {
- if (!this.dirty) {
- this.dirty = true;
- var parentRenderer = this.parentRenderer;
- if (parentRenderer) parentRenderer.invalidate();
- pendingDirtyRenderers.push(this);
- if (renderTimer) return;
- renderTimer = window[request](handleRequestAnimationFrame, 0);
- }
- },
- distribution: function(root) {
- this.resetAllSubtrees(root);
- this.distributionResolution(root);
- },
- resetAll: function(node) {
- if (isInsertionPoint(node)) resetDistributedNodes(node); else resetDestinationInsertionPoints(node);
- this.resetAllSubtrees(node);
- },
- resetAllSubtrees: function(node) {
- for (var child = node.firstChild; child; child = child.nextSibling) {
- this.resetAll(child);
- }
- if (node.shadowRoot) this.resetAll(node.shadowRoot);
- if (node.olderShadowRoot) this.resetAll(node.olderShadowRoot);
- },
- distributionResolution: function(node) {
- if (isShadowHost(node)) {
- var shadowHost = node;
- var pool = poolPopulation(shadowHost);
- var shadowTrees = getShadowTrees(shadowHost);
- for (var i = 0; i < shadowTrees.length; i++) {
- this.poolDistribution(shadowTrees[i], pool);
- }
- for (var i = shadowTrees.length - 1; i >= 0; i--) {
- var shadowTree = shadowTrees[i];
- var shadow = getShadowInsertionPoint(shadowTree);
- if (shadow) {
- var olderShadowRoot = shadowTree.olderShadowRoot;
- if (olderShadowRoot) {
- pool = poolPopulation(olderShadowRoot);
- }
- for (var j = 0; j < pool.length; j++) {
- destributeNodeInto(pool[j], shadow);
- }
- }
- this.distributionResolution(shadowTree);
- }
- }
- for (var child = node.firstChild; child; child = child.nextSibling) {
- this.distributionResolution(child);
- }
- },
- poolDistribution: function(node, pool) {
- if (node instanceof HTMLShadowElement) return;
- if (node instanceof HTMLContentElement) {
- var content = node;
- this.updateDependentAttributes(content.getAttribute("select"));
- var anyDistributed = false;
- for (var i = 0; i < pool.length; i++) {
- var node = pool[i];
- if (!node) continue;
- if (matches(node, content)) {
- destributeNodeInto(node, content);
- pool[i] = undefined;
- anyDistributed = true;
- }
- }
- if (!anyDistributed) {
- for (var child = content.firstChild; child; child = child.nextSibling) {
- destributeNodeInto(child, content);
- }
- }
- return;
- }
- for (var child = node.firstChild; child; child = child.nextSibling) {
- this.poolDistribution(child, pool);
- }
- },
- buildRenderTree: function(renderNode, node) {
- var children = this.compose(node);
- for (var i = 0; i < children.length; i++) {
- var child = children[i];
- var childRenderNode = renderNode.append(child);
- this.buildRenderTree(childRenderNode, child);
- }
- if (isShadowHost(node)) {
- var renderer = getRendererForHost(node);
- renderer.dirty = false;
- }
- },
- compose: function(node) {
- var children = [];
- var p = node.shadowRoot || node;
- for (var child = p.firstChild; child; child = child.nextSibling) {
- if (isInsertionPoint(child)) {
- this.associateNode(p);
- var distributedNodes = getDistributedNodes(child);
- for (var j = 0; j < distributedNodes.length; j++) {
- var distributedNode = distributedNodes[j];
- if (isFinalDestination(child, distributedNode)) children.push(distributedNode);
- }
- } else {
- children.push(child);
- }
- }
- return children;
- },
- invalidateAttributes: function() {
- this.attributes = Object.create(null);
- },
- updateDependentAttributes: function(selector) {
- if (!selector) return;
- var attributes = this.attributes;
- if (/\.\w+/.test(selector)) attributes["class"] = true;
- if (/#\w+/.test(selector)) attributes["id"] = true;
- selector.replace(/\[\s*([^\s=\|~\]]+)/g, function(_, name) {
- attributes[name] = true;
- });
- },
- dependsOnAttribute: function(name) {
- return this.attributes[name];
- },
- associateNode: function(node) {
- unsafeUnwrap(node).polymerShadowRenderer_ = this;
- }
- };
- function poolPopulation(node) {
- var pool = [];
- for (var child = node.firstChild; child; child = child.nextSibling) {
- if (isInsertionPoint(child)) {
- pool.push.apply(pool, getDistributedNodes(child));
- } else {
- pool.push(child);
- }
- }
- return pool;
- }
- function getShadowInsertionPoint(node) {
- if (node instanceof HTMLShadowElement) return node;
- if (node instanceof HTMLContentElement) return null;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- var res = getShadowInsertionPoint(child);
- if (res) return res;
- }
- return null;
- }
- function destributeNodeInto(child, insertionPoint) {
- getDistributedNodes(insertionPoint).push(child);
- var points = destinationInsertionPointsTable.get(child);
- if (!points) destinationInsertionPointsTable.set(child, [ insertionPoint ]); else points.push(insertionPoint);
- }
- function getDestinationInsertionPoints(node) {
- return destinationInsertionPointsTable.get(node);
- }
- function resetDestinationInsertionPoints(node) {
- destinationInsertionPointsTable.set(node, undefined);
- }
- var selectorStartCharRe = /^(:not\()?[*.#[a-zA-Z_|]/;
- function matches(node, contentElement) {
- var select = contentElement.getAttribute("select");
- if (!select) return true;
- select = select.trim();
- if (!select) return true;
- if (!(node instanceof Element)) return false;
- if (!selectorStartCharRe.test(select)) return false;
- try {
- return node.matches(select);
- } catch (ex) {
- return false;
- }
- }
- function isFinalDestination(insertionPoint, node) {
- var points = getDestinationInsertionPoints(node);
- return points && points[points.length - 1] === insertionPoint;
- }
- function isInsertionPoint(node) {
- return node instanceof HTMLContentElement || node instanceof HTMLShadowElement;
- }
- function isShadowHost(shadowHost) {
- return shadowHost.shadowRoot;
- }
- function getShadowTrees(host) {
- var trees = [];
- for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {
- trees.push(tree);
- }
- return trees;
- }
- function render(host) {
- new ShadowRenderer(host).render();
- }
- Node.prototype.invalidateShadowRenderer = function(force) {
- var renderer = unsafeUnwrap(this).polymerShadowRenderer_;
- if (renderer) {
- renderer.invalidate();
- return true;
- }
- return false;
- };
- HTMLContentElement.prototype.getDistributedNodes = HTMLShadowElement.prototype.getDistributedNodes = function() {
- renderAllPending();
- return getDistributedNodes(this);
- };
- Element.prototype.getDestinationInsertionPoints = function() {
- renderAllPending();
- return getDestinationInsertionPoints(this) || [];
- };
- HTMLContentElement.prototype.nodeIsInserted_ = HTMLShadowElement.prototype.nodeIsInserted_ = function() {
- this.invalidateShadowRenderer();
- var shadowRoot = getShadowRootAncestor(this);
- var renderer;
- if (shadowRoot) renderer = getRendererForShadowRoot(shadowRoot);
- unsafeUnwrap(this).polymerShadowRenderer_ = renderer;
- if (renderer) renderer.invalidate();
- };
- scope.getRendererForHost = getRendererForHost;
- scope.getShadowTrees = getShadowTrees;
- scope.renderAllPending = renderAllPending;
- scope.getDestinationInsertionPoints = getDestinationInsertionPoints;
- scope.visual = {
- insertBefore: insertBefore,
- remove: remove
- };
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var assert = scope.assert;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var elementsWithFormProperty = [ "HTMLButtonElement", "HTMLFieldSetElement", "HTMLInputElement", "HTMLKeygenElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLObjectElement", "HTMLOutputElement", "HTMLTextAreaElement" ];
- function createWrapperConstructor(name) {
- if (!window[name]) return;
- assert(!scope.wrappers[name]);
- var GeneratedWrapper = function(node) {
- HTMLElement.call(this, node);
- };
- GeneratedWrapper.prototype = Object.create(HTMLElement.prototype);
- mixin(GeneratedWrapper.prototype, {
- get form() {
- return wrap(unwrap(this).form);
- }
- });
- registerWrapper(window[name], GeneratedWrapper, document.createElement(name.slice(4, -7)));
- scope.wrappers[name] = GeneratedWrapper;
- }
- elementsWithFormProperty.forEach(createWrapperConstructor);
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalSelection = window.Selection;
- function Selection(impl) {
- setWrapper(impl, this);
- }
- Selection.prototype = {
- get anchorNode() {
- return wrap(unsafeUnwrap(this).anchorNode);
- },
- get focusNode() {
- return wrap(unsafeUnwrap(this).focusNode);
- },
- addRange: function(range) {
- unsafeUnwrap(this).addRange(unwrapIfNeeded(range));
- },
- collapse: function(node, index) {
- unsafeUnwrap(this).collapse(unwrapIfNeeded(node), index);
- },
- containsNode: function(node, allowPartial) {
- return unsafeUnwrap(this).containsNode(unwrapIfNeeded(node), allowPartial);
- },
- getRangeAt: function(index) {
- return wrap(unsafeUnwrap(this).getRangeAt(index));
- },
- removeRange: function(range) {
- unsafeUnwrap(this).removeRange(unwrap(range));
- },
- selectAllChildren: function(node) {
- unsafeUnwrap(this).selectAllChildren(node instanceof ShadowRoot ? unsafeUnwrap(node.host) : unwrapIfNeeded(node));
- },
- toString: function() {
- return unsafeUnwrap(this).toString();
- }
- };
- if (OriginalSelection.prototype.extend) {
- Selection.prototype.extend = function(node, offset) {
- unsafeUnwrap(this).extend(unwrapIfNeeded(node), offset);
- };
- }
- registerWrapper(window.Selection, Selection, window.getSelection());
- scope.wrappers.Selection = Selection;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalTreeWalker = window.TreeWalker;
- function TreeWalker(impl) {
- setWrapper(impl, this);
- }
- TreeWalker.prototype = {
- get root() {
- return wrap(unsafeUnwrap(this).root);
- },
- get currentNode() {
- return wrap(unsafeUnwrap(this).currentNode);
- },
- set currentNode(node) {
- unsafeUnwrap(this).currentNode = unwrapIfNeeded(node);
- },
- get filter() {
- return unsafeUnwrap(this).filter;
- },
- parentNode: function() {
- return wrap(unsafeUnwrap(this).parentNode());
- },
- firstChild: function() {
- return wrap(unsafeUnwrap(this).firstChild());
- },
- lastChild: function() {
- return wrap(unsafeUnwrap(this).lastChild());
- },
- previousSibling: function() {
- return wrap(unsafeUnwrap(this).previousSibling());
- },
- previousNode: function() {
- return wrap(unsafeUnwrap(this).previousNode());
- },
- nextNode: function() {
- return wrap(unsafeUnwrap(this).nextNode());
- }
- };
- registerWrapper(OriginalTreeWalker, TreeWalker);
- scope.wrappers.TreeWalker = TreeWalker;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var GetElementsByInterface = scope.GetElementsByInterface;
- var Node = scope.wrappers.Node;
- var ParentNodeInterface = scope.ParentNodeInterface;
- var NonElementParentNodeInterface = scope.NonElementParentNodeInterface;
- var Selection = scope.wrappers.Selection;
- var SelectorsInterface = scope.SelectorsInterface;
- var ShadowRoot = scope.wrappers.ShadowRoot;
- var TreeScope = scope.TreeScope;
- var cloneNode = scope.cloneNode;
- var defineGetter = scope.defineGetter;
- var defineWrapGetter = scope.defineWrapGetter;
- var elementFromPoint = scope.elementFromPoint;
- var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
- var matchesNames = scope.matchesNames;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var renderAllPending = scope.renderAllPending;
- var rewrap = scope.rewrap;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrapEventTargetMethods = scope.wrapEventTargetMethods;
- var wrapNodeList = scope.wrapNodeList;
- var implementationTable = new WeakMap();
- function Document(node) {
- Node.call(this, node);
- this.treeScope_ = new TreeScope(this, null);
- }
- Document.prototype = Object.create(Node.prototype);
- defineWrapGetter(Document, "documentElement");
- defineWrapGetter(Document, "body");
- defineWrapGetter(Document, "head");
- defineGetter(Document, "activeElement", function() {
- var unwrappedActiveElement = unwrap(this).activeElement;
- if (!unwrappedActiveElement || !unwrappedActiveElement.nodeType) return null;
- var activeElement = wrap(unwrappedActiveElement);
- while (!this.contains(activeElement)) {
- while (activeElement.parentNode) {
- activeElement = activeElement.parentNode;
- }
- if (activeElement.host) {
- activeElement = activeElement.host;
- } else {
- return null;
- }
- }
- return activeElement;
- });
- function wrapMethod(name) {
- var original = document[name];
- Document.prototype[name] = function() {
- return wrap(original.apply(unsafeUnwrap(this), arguments));
- };
- }
- [ "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode" ].forEach(wrapMethod);
- var originalAdoptNode = document.adoptNode;
- function adoptNodeNoRemove(node, doc) {
- originalAdoptNode.call(unsafeUnwrap(doc), unwrap(node));
- adoptSubtree(node, doc);
- }
- function adoptSubtree(node, doc) {
- if (node.shadowRoot) doc.adoptNode(node.shadowRoot);
- if (node instanceof ShadowRoot) adoptOlderShadowRoots(node, doc);
- for (var child = node.firstChild; child; child = child.nextSibling) {
- adoptSubtree(child, doc);
- }
- }
- function adoptOlderShadowRoots(shadowRoot, doc) {
- var oldShadowRoot = shadowRoot.olderShadowRoot;
- if (oldShadowRoot) doc.adoptNode(oldShadowRoot);
- }
- var originalGetSelection = document.getSelection;
- mixin(Document.prototype, {
- adoptNode: function(node) {
- if (node.parentNode) node.parentNode.removeChild(node);
- adoptNodeNoRemove(node, this);
- return node;
- },
- elementFromPoint: function(x, y) {
- return elementFromPoint(this, this, x, y);
- },
- importNode: function(node, deep) {
- return cloneNode(node, deep, unsafeUnwrap(this));
- },
- getSelection: function() {
- renderAllPending();
- return new Selection(originalGetSelection.call(unwrap(this)));
- },
- getElementsByName: function(name) {
- return SelectorsInterface.querySelectorAll.call(this, "[name=" + JSON.stringify(String(name)) + "]");
- }
- });
- var originalCreateTreeWalker = document.createTreeWalker;
- var TreeWalkerWrapper = scope.wrappers.TreeWalker;
- Document.prototype.createTreeWalker = function(root, whatToShow, filter, expandEntityReferences) {
- var newFilter = null;
- if (filter) {
- if (filter.acceptNode && typeof filter.acceptNode === "function") {
- newFilter = {
- acceptNode: function(node) {
- return filter.acceptNode(wrap(node));
- }
- };
- } else if (typeof filter === "function") {
- newFilter = function(node) {
- return filter(wrap(node));
- };
- }
- }
- return new TreeWalkerWrapper(originalCreateTreeWalker.call(unwrap(this), unwrap(root), whatToShow, newFilter, expandEntityReferences));
- };
- if (document.registerElement) {
- var originalRegisterElement = document.registerElement;
- Document.prototype.registerElement = function(tagName, object) {
- var prototype, extendsOption;
- if (object !== undefined) {
- prototype = object.prototype;
- extendsOption = object.extends;
- }
- if (!prototype) prototype = Object.create(HTMLElement.prototype);
- if (scope.nativePrototypeTable.get(prototype)) {
- throw new Error("NotSupportedError");
- }
- var proto = Object.getPrototypeOf(prototype);
- var nativePrototype;
- var prototypes = [];
- while (proto) {
- nativePrototype = scope.nativePrototypeTable.get(proto);
- if (nativePrototype) break;
- prototypes.push(proto);
- proto = Object.getPrototypeOf(proto);
- }
- if (!nativePrototype) {
- throw new Error("NotSupportedError");
- }
- var newPrototype = Object.create(nativePrototype);
- for (var i = prototypes.length - 1; i >= 0; i--) {
- newPrototype = Object.create(newPrototype);
- }
- [ "createdCallback", "attachedCallback", "detachedCallback", "attributeChangedCallback" ].forEach(function(name) {
- var f = prototype[name];
- if (!f) return;
- newPrototype[name] = function() {
- if (!(wrap(this) instanceof CustomElementConstructor)) {
- rewrap(this);
- }
- f.apply(wrap(this), arguments);
- };
- });
- var p = {
- prototype: newPrototype
- };
- if (extendsOption) p.extends = extendsOption;
- function CustomElementConstructor(node) {
- if (!node) {
- if (extendsOption) {
- return document.createElement(extendsOption, tagName);
- } else {
- return document.createElement(tagName);
- }
- }
- setWrapper(node, this);
- }
- CustomElementConstructor.prototype = prototype;
- CustomElementConstructor.prototype.constructor = CustomElementConstructor;
- scope.constructorTable.set(newPrototype, CustomElementConstructor);
- scope.nativePrototypeTable.set(prototype, newPrototype);
- var nativeConstructor = originalRegisterElement.call(unwrap(this), tagName, p);
- return CustomElementConstructor;
- };
- forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "registerElement" ]);
- }
- forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement, window.HTMLHtmlElement ], [ "appendChild", "compareDocumentPosition", "contains", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "insertBefore", "querySelector", "querySelectorAll", "removeChild", "replaceChild" ]);
- forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLHeadElement, window.HTMLHtmlElement ], matchesNames);
- forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "adoptNode", "importNode", "contains", "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode", "createTreeWalker", "elementFromPoint", "getElementById", "getElementsByName", "getSelection" ]);
- mixin(Document.prototype, GetElementsByInterface);
- mixin(Document.prototype, ParentNodeInterface);
- mixin(Document.prototype, SelectorsInterface);
- mixin(Document.prototype, NonElementParentNodeInterface);
- mixin(Document.prototype, {
- get implementation() {
- var implementation = implementationTable.get(this);
- if (implementation) return implementation;
- implementation = new DOMImplementation(unwrap(this).implementation);
- implementationTable.set(this, implementation);
- return implementation;
- },
- get defaultView() {
- return wrap(unwrap(this).defaultView);
- }
- });
- registerWrapper(window.Document, Document, document.implementation.createHTMLDocument(""));
- if (window.HTMLDocument) registerWrapper(window.HTMLDocument, Document);
- wrapEventTargetMethods([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement ]);
- function DOMImplementation(impl) {
- setWrapper(impl, this);
- }
- var originalCreateDocument = document.implementation.createDocument;
- DOMImplementation.prototype.createDocument = function() {
- arguments[2] = unwrap(arguments[2]);
- return wrap(originalCreateDocument.apply(unsafeUnwrap(this), arguments));
- };
- function wrapImplMethod(constructor, name) {
- var original = document.implementation[name];
- constructor.prototype[name] = function() {
- return wrap(original.apply(unsafeUnwrap(this), arguments));
- };
- }
- function forwardImplMethod(constructor, name) {
- var original = document.implementation[name];
- constructor.prototype[name] = function() {
- return original.apply(unsafeUnwrap(this), arguments);
- };
- }
- wrapImplMethod(DOMImplementation, "createDocumentType");
- wrapImplMethod(DOMImplementation, "createHTMLDocument");
- forwardImplMethod(DOMImplementation, "hasFeature");
- registerWrapper(window.DOMImplementation, DOMImplementation);
- forwardMethodsToWrapper([ window.DOMImplementation ], [ "createDocument", "createDocumentType", "createHTMLDocument", "hasFeature" ]);
- scope.adoptNodeNoRemove = adoptNodeNoRemove;
- scope.wrappers.DOMImplementation = DOMImplementation;
- scope.wrappers.Document = Document;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var EventTarget = scope.wrappers.EventTarget;
- var Selection = scope.wrappers.Selection;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var renderAllPending = scope.renderAllPending;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalWindow = window.Window;
- var originalGetComputedStyle = window.getComputedStyle;
- var originalGetDefaultComputedStyle = window.getDefaultComputedStyle;
- var originalGetSelection = window.getSelection;
- function Window(impl) {
- EventTarget.call(this, impl);
- }
- Window.prototype = Object.create(EventTarget.prototype);
- OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {
- return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);
- };
- if (originalGetDefaultComputedStyle) {
- OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseudo) {
- return wrap(this || window).getDefaultComputedStyle(unwrapIfNeeded(el), pseudo);
- };
- }
- OriginalWindow.prototype.getSelection = function() {
- return wrap(this || window).getSelection();
- };
- delete window.getComputedStyle;
- delete window.getDefaultComputedStyle;
- delete window.getSelection;
- [ "addEventListener", "removeEventListener", "dispatchEvent" ].forEach(function(name) {
- OriginalWindow.prototype[name] = function() {
- var w = wrap(this || window);
- return w[name].apply(w, arguments);
- };
- delete window[name];
- });
- mixin(Window.prototype, {
- getComputedStyle: function(el, pseudo) {
- renderAllPending();
- return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo);
- },
- getSelection: function() {
- renderAllPending();
- return new Selection(originalGetSelection.call(unwrap(this)));
- },
- get document() {
- return wrap(unwrap(this).document);
- }
- });
- if (originalGetDefaultComputedStyle) {
- Window.prototype.getDefaultComputedStyle = function(el, pseudo) {
- renderAllPending();
- return originalGetDefaultComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo);
- };
- }
- registerWrapper(OriginalWindow, Window, window);
- scope.wrappers.Window = Window;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var unwrap = scope.unwrap;
- var OriginalDataTransfer = window.DataTransfer || window.Clipboard;
- var OriginalDataTransferSetDragImage = OriginalDataTransfer.prototype.setDragImage;
- if (OriginalDataTransferSetDragImage) {
- OriginalDataTransfer.prototype.setDragImage = function(image, x, y) {
- OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y);
- };
- }
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unwrap = scope.unwrap;
- var OriginalFormData = window.FormData;
- if (!OriginalFormData) return;
- function FormData(formElement) {
- var impl;
- if (formElement instanceof OriginalFormData) {
- impl = formElement;
- } else {
- impl = new OriginalFormData(formElement && unwrap(formElement));
- }
- setWrapper(impl, this);
- }
- registerWrapper(OriginalFormData, FormData, new OriginalFormData());
- scope.wrappers.FormData = FormData;
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var originalSend = XMLHttpRequest.prototype.send;
- XMLHttpRequest.prototype.send = function(obj) {
- return originalSend.call(this, unwrapIfNeeded(obj));
- };
-})(window.ShadowDOMPolyfill);
-
-(function(scope) {
- "use strict";
- var isWrapperFor = scope.isWrapperFor;
- var elements = {
- a: "HTMLAnchorElement",
- area: "HTMLAreaElement",
- audio: "HTMLAudioElement",
- base: "HTMLBaseElement",
- body: "HTMLBodyElement",
- br: "HTMLBRElement",
- button: "HTMLButtonElement",
- canvas: "HTMLCanvasElement",
- caption: "HTMLTableCaptionElement",
- col: "HTMLTableColElement",
- content: "HTMLContentElement",
- data: "HTMLDataElement",
- datalist: "HTMLDataListElement",
- del: "HTMLModElement",
- dir: "HTMLDirectoryElement",
- div: "HTMLDivElement",
- dl: "HTMLDListElement",
- embed: "HTMLEmbedElement",
- fieldset: "HTMLFieldSetElement",
- font: "HTMLFontElement",
- form: "HTMLFormElement",
- frame: "HTMLFrameElement",
- frameset: "HTMLFrameSetElement",
- h1: "HTMLHeadingElement",
- head: "HTMLHeadElement",
- hr: "HTMLHRElement",
- html: "HTMLHtmlElement",
- iframe: "HTMLIFrameElement",
- img: "HTMLImageElement",
- input: "HTMLInputElement",
- keygen: "HTMLKeygenElement",
- label: "HTMLLabelElement",
- legend: "HTMLLegendElement",
- li: "HTMLLIElement",
- link: "HTMLLinkElement",
- map: "HTMLMapElement",
- marquee: "HTMLMarqueeElement",
- menu: "HTMLMenuElement",
- menuitem: "HTMLMenuItemElement",
- meta: "HTMLMetaElement",
- meter: "HTMLMeterElement",
- object: "HTMLObjectElement",
- ol: "HTMLOListElement",
- optgroup: "HTMLOptGroupElement",
- option: "HTMLOptionElement",
- output: "HTMLOutputElement",
- p: "HTMLParagraphElement",
- param: "HTMLParamElement",
- pre: "HTMLPreElement",
- progress: "HTMLProgressElement",
- q: "HTMLQuoteElement",
- script: "HTMLScriptElement",
- select: "HTMLSelectElement",
- shadow: "HTMLShadowElement",
- source: "HTMLSourceElement",
- span: "HTMLSpanElement",
- style: "HTMLStyleElement",
- table: "HTMLTableElement",
- tbody: "HTMLTableSectionElement",
- template: "HTMLTemplateElement",
- textarea: "HTMLTextAreaElement",
- thead: "HTMLTableSectionElement",
- time: "HTMLTimeElement",
- title: "HTMLTitleElement",
- tr: "HTMLTableRowElement",
- track: "HTMLTrackElement",
- ul: "HTMLUListElement",
- video: "HTMLVideoElement"
- };
- function overrideConstructor(tagName) {
- var nativeConstructorName = elements[tagName];
- var nativeConstructor = window[nativeConstructorName];
- if (!nativeConstructor) return;
- var element = document.createElement(tagName);
- var wrapperConstructor = element.constructor;
- window[nativeConstructorName] = wrapperConstructor;
- }
- Object.keys(elements).forEach(overrideConstructor);
- Object.getOwnPropertyNames(scope.wrappers).forEach(function(name) {
- window[name] = scope.wrappers[name];
- });
-})(window.ShadowDOMPolyfill);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/webcomponentsjs/webcomponents-lite.js b/dashboard-ui/bower_components/webcomponentsjs/webcomponents-lite.js
deleted file mode 100644
index 44059a5b7b..0000000000
--- a/dashboard-ui/bower_components/webcomponentsjs/webcomponents-lite.js
+++ /dev/null
@@ -1,2505 +0,0 @@
-/**
- * @license
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
-// @version 0.7.22
-(function() {
- window.WebComponents = window.WebComponents || {
- flags: {}
- };
- var file = "webcomponents-lite.js";
- var script = document.querySelector('script[src*="' + file + '"]');
- var flags = {};
- if (!flags.noOpts) {
- location.search.slice(1).split("&").forEach(function(option) {
- var parts = option.split("=");
- var match;
- if (parts[0] && (match = parts[0].match(/wc-(.+)/))) {
- flags[match[1]] = parts[1] || true;
- }
- });
- if (script) {
- for (var i = 0, a; a = script.attributes[i]; i++) {
- if (a.name !== "src") {
- flags[a.name] = a.value || true;
- }
- }
- }
- if (flags.log && flags.log.split) {
- var parts = flags.log.split(",");
- flags.log = {};
- parts.forEach(function(f) {
- flags.log[f] = true;
- });
- } else {
- flags.log = {};
- }
- }
- if (flags.register) {
- window.CustomElements = window.CustomElements || {
- flags: {}
- };
- window.CustomElements.flags.register = flags.register;
- }
- WebComponents.flags = flags;
-})();
-
-(function(scope) {
- "use strict";
- var hasWorkingUrl = false;
- if (!scope.forceJURL) {
- try {
- var u = new URL("b", "http://a");
- u.pathname = "c%20d";
- hasWorkingUrl = u.href === "http://a/c%20d";
- } catch (e) {}
- }
- if (hasWorkingUrl) return;
- var relative = Object.create(null);
- relative["ftp"] = 21;
- relative["file"] = 0;
- relative["gopher"] = 70;
- relative["http"] = 80;
- relative["https"] = 443;
- relative["ws"] = 80;
- relative["wss"] = 443;
- var relativePathDotMapping = Object.create(null);
- relativePathDotMapping["%2e"] = ".";
- relativePathDotMapping[".%2e"] = "..";
- relativePathDotMapping["%2e."] = "..";
- relativePathDotMapping["%2e%2e"] = "..";
- function isRelativeScheme(scheme) {
- return relative[scheme] !== undefined;
- }
- function invalid() {
- clear.call(this);
- this._isInvalid = true;
- }
- function IDNAToASCII(h) {
- if ("" == h) {
- invalid.call(this);
- }
- return h.toLowerCase();
- }
- function percentEscape(c) {
- var unicode = c.charCodeAt(0);
- if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 63, 96 ].indexOf(unicode) == -1) {
- return c;
- }
- return encodeURIComponent(c);
- }
- function percentEscapeQuery(c) {
- var unicode = c.charCodeAt(0);
- if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 96 ].indexOf(unicode) == -1) {
- return c;
- }
- return encodeURIComponent(c);
- }
- var EOF = undefined, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/;
- function parse(input, stateOverride, base) {
- function err(message) {
- errors.push(message);
- }
- var state = stateOverride || "scheme start", cursor = 0, buffer = "", seenAt = false, seenBracket = false, errors = [];
- loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) {
- var c = input[cursor];
- switch (state) {
- case "scheme start":
- if (c && ALPHA.test(c)) {
- buffer += c.toLowerCase();
- state = "scheme";
- } else if (!stateOverride) {
- buffer = "";
- state = "no scheme";
- continue;
- } else {
- err("Invalid scheme.");
- break loop;
- }
- break;
-
- case "scheme":
- if (c && ALPHANUMERIC.test(c)) {
- buffer += c.toLowerCase();
- } else if (":" == c) {
- this._scheme = buffer;
- buffer = "";
- if (stateOverride) {
- break loop;
- }
- if (isRelativeScheme(this._scheme)) {
- this._isRelative = true;
- }
- if ("file" == this._scheme) {
- state = "relative";
- } else if (this._isRelative && base && base._scheme == this._scheme) {
- state = "relative or authority";
- } else if (this._isRelative) {
- state = "authority first slash";
- } else {
- state = "scheme data";
- }
- } else if (!stateOverride) {
- buffer = "";
- cursor = 0;
- state = "no scheme";
- continue;
- } else if (EOF == c) {
- break loop;
- } else {
- err("Code point not allowed in scheme: " + c);
- break loop;
- }
- break;
-
- case "scheme data":
- if ("?" == c) {
- this._query = "?";
- state = "query";
- } else if ("#" == c) {
- this._fragment = "#";
- state = "fragment";
- } else {
- if (EOF != c && " " != c && "\n" != c && "\r" != c) {
- this._schemeData += percentEscape(c);
- }
- }
- break;
-
- case "no scheme":
- if (!base || !isRelativeScheme(base._scheme)) {
- err("Missing scheme.");
- invalid.call(this);
- } else {
- state = "relative";
- continue;
- }
- break;
-
- case "relative or authority":
- if ("/" == c && "/" == input[cursor + 1]) {
- state = "authority ignore slashes";
- } else {
- err("Expected /, got: " + c);
- state = "relative";
- continue;
- }
- break;
-
- case "relative":
- this._isRelative = true;
- if ("file" != this._scheme) this._scheme = base._scheme;
- if (EOF == c) {
- this._host = base._host;
- this._port = base._port;
- this._path = base._path.slice();
- this._query = base._query;
- this._username = base._username;
- this._password = base._password;
- break loop;
- } else if ("/" == c || "\\" == c) {
- if ("\\" == c) err("\\ is an invalid code point.");
- state = "relative slash";
- } else if ("?" == c) {
- this._host = base._host;
- this._port = base._port;
- this._path = base._path.slice();
- this._query = "?";
- this._username = base._username;
- this._password = base._password;
- state = "query";
- } else if ("#" == c) {
- this._host = base._host;
- this._port = base._port;
- this._path = base._path.slice();
- this._query = base._query;
- this._fragment = "#";
- this._username = base._username;
- this._password = base._password;
- state = "fragment";
- } else {
- var nextC = input[cursor + 1];
- var nextNextC = input[cursor + 2];
- if ("file" != this._scheme || !ALPHA.test(c) || nextC != ":" && nextC != "|" || EOF != nextNextC && "/" != nextNextC && "\\" != nextNextC && "?" != nextNextC && "#" != nextNextC) {
- this._host = base._host;
- this._port = base._port;
- this._username = base._username;
- this._password = base._password;
- this._path = base._path.slice();
- this._path.pop();
- }
- state = "relative path";
- continue;
- }
- break;
-
- case "relative slash":
- if ("/" == c || "\\" == c) {
- if ("\\" == c) {
- err("\\ is an invalid code point.");
- }
- if ("file" == this._scheme) {
- state = "file host";
- } else {
- state = "authority ignore slashes";
- }
- } else {
- if ("file" != this._scheme) {
- this._host = base._host;
- this._port = base._port;
- this._username = base._username;
- this._password = base._password;
- }
- state = "relative path";
- continue;
- }
- break;
-
- case "authority first slash":
- if ("/" == c) {
- state = "authority second slash";
- } else {
- err("Expected '/', got: " + c);
- state = "authority ignore slashes";
- continue;
- }
- break;
-
- case "authority second slash":
- state = "authority ignore slashes";
- if ("/" != c) {
- err("Expected '/', got: " + c);
- continue;
- }
- break;
-
- case "authority ignore slashes":
- if ("/" != c && "\\" != c) {
- state = "authority";
- continue;
- } else {
- err("Expected authority, got: " + c);
- }
- break;
-
- case "authority":
- if ("@" == c) {
- if (seenAt) {
- err("@ already seen.");
- buffer += "%40";
- }
- seenAt = true;
- for (var i = 0; i < buffer.length; i++) {
- var cp = buffer[i];
- if (" " == cp || "\n" == cp || "\r" == cp) {
- err("Invalid whitespace in authority.");
- continue;
- }
- if (":" == cp && null === this._password) {
- this._password = "";
- continue;
- }
- var tempC = percentEscape(cp);
- null !== this._password ? this._password += tempC : this._username += tempC;
- }
- buffer = "";
- } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
- cursor -= buffer.length;
- buffer = "";
- state = "host";
- continue;
- } else {
- buffer += c;
- }
- break;
-
- case "file host":
- if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
- if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ":" || buffer[1] == "|")) {
- state = "relative path";
- } else if (buffer.length == 0) {
- state = "relative path start";
- } else {
- this._host = IDNAToASCII.call(this, buffer);
- buffer = "";
- state = "relative path start";
- }
- continue;
- } else if (" " == c || "\n" == c || "\r" == c) {
- err("Invalid whitespace in file host.");
- } else {
- buffer += c;
- }
- break;
-
- case "host":
- case "hostname":
- if (":" == c && !seenBracket) {
- this._host = IDNAToASCII.call(this, buffer);
- buffer = "";
- state = "port";
- if ("hostname" == stateOverride) {
- break loop;
- }
- } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
- this._host = IDNAToASCII.call(this, buffer);
- buffer = "";
- state = "relative path start";
- if (stateOverride) {
- break loop;
- }
- continue;
- } else if (" " != c && "\n" != c && "\r" != c) {
- if ("[" == c) {
- seenBracket = true;
- } else if ("]" == c) {
- seenBracket = false;
- }
- buffer += c;
- } else {
- err("Invalid code point in host/hostname: " + c);
- }
- break;
-
- case "port":
- if (/[0-9]/.test(c)) {
- buffer += c;
- } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c || stateOverride) {
- if ("" != buffer) {
- var temp = parseInt(buffer, 10);
- if (temp != relative[this._scheme]) {
- this._port = temp + "";
- }
- buffer = "";
- }
- if (stateOverride) {
- break loop;
- }
- state = "relative path start";
- continue;
- } else if (" " == c || "\n" == c || "\r" == c) {
- err("Invalid code point in port: " + c);
- } else {
- invalid.call(this);
- }
- break;
-
- case "relative path start":
- if ("\\" == c) err("'\\' not allowed in path.");
- state = "relative path";
- if ("/" != c && "\\" != c) {
- continue;
- }
- break;
-
- case "relative path":
- if (EOF == c || "/" == c || "\\" == c || !stateOverride && ("?" == c || "#" == c)) {
- if ("\\" == c) {
- err("\\ not allowed in relative path.");
- }
- var tmp;
- if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {
- buffer = tmp;
- }
- if (".." == buffer) {
- this._path.pop();
- if ("/" != c && "\\" != c) {
- this._path.push("");
- }
- } else if ("." == buffer && "/" != c && "\\" != c) {
- this._path.push("");
- } else if ("." != buffer) {
- if ("file" == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == "|") {
- buffer = buffer[0] + ":";
- }
- this._path.push(buffer);
- }
- buffer = "";
- if ("?" == c) {
- this._query = "?";
- state = "query";
- } else if ("#" == c) {
- this._fragment = "#";
- state = "fragment";
- }
- } else if (" " != c && "\n" != c && "\r" != c) {
- buffer += percentEscape(c);
- }
- break;
-
- case "query":
- if (!stateOverride && "#" == c) {
- this._fragment = "#";
- state = "fragment";
- } else if (EOF != c && " " != c && "\n" != c && "\r" != c) {
- this._query += percentEscapeQuery(c);
- }
- break;
-
- case "fragment":
- if (EOF != c && " " != c && "\n" != c && "\r" != c) {
- this._fragment += c;
- }
- break;
- }
- cursor++;
- }
- }
- function clear() {
- this._scheme = "";
- this._schemeData = "";
- this._username = "";
- this._password = null;
- this._host = "";
- this._port = "";
- this._path = [];
- this._query = "";
- this._fragment = "";
- this._isInvalid = false;
- this._isRelative = false;
- }
- function jURL(url, base) {
- if (base !== undefined && !(base instanceof jURL)) base = new jURL(String(base));
- this._url = url;
- clear.call(this);
- var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, "");
- parse.call(this, input, null, base);
- }
- jURL.prototype = {
- toString: function() {
- return this.href;
- },
- get href() {
- if (this._isInvalid) return this._url;
- var authority = "";
- if ("" != this._username || null != this._password) {
- authority = this._username + (null != this._password ? ":" + this._password : "") + "@";
- }
- return this.protocol + (this._isRelative ? "//" + authority + this.host : "") + this.pathname + this._query + this._fragment;
- },
- set href(href) {
- clear.call(this);
- parse.call(this, href);
- },
- get protocol() {
- return this._scheme + ":";
- },
- set protocol(protocol) {
- if (this._isInvalid) return;
- parse.call(this, protocol + ":", "scheme start");
- },
- get host() {
- return this._isInvalid ? "" : this._port ? this._host + ":" + this._port : this._host;
- },
- set host(host) {
- if (this._isInvalid || !this._isRelative) return;
- parse.call(this, host, "host");
- },
- get hostname() {
- return this._host;
- },
- set hostname(hostname) {
- if (this._isInvalid || !this._isRelative) return;
- parse.call(this, hostname, "hostname");
- },
- get port() {
- return this._port;
- },
- set port(port) {
- if (this._isInvalid || !this._isRelative) return;
- parse.call(this, port, "port");
- },
- get pathname() {
- return this._isInvalid ? "" : this._isRelative ? "/" + this._path.join("/") : this._schemeData;
- },
- set pathname(pathname) {
- if (this._isInvalid || !this._isRelative) return;
- this._path = [];
- parse.call(this, pathname, "relative path start");
- },
- get search() {
- return this._isInvalid || !this._query || "?" == this._query ? "" : this._query;
- },
- set search(search) {
- if (this._isInvalid || !this._isRelative) return;
- this._query = "?";
- if ("?" == search[0]) search = search.slice(1);
- parse.call(this, search, "query");
- },
- get hash() {
- return this._isInvalid || !this._fragment || "#" == this._fragment ? "" : this._fragment;
- },
- set hash(hash) {
- if (this._isInvalid) return;
- this._fragment = "#";
- if ("#" == hash[0]) hash = hash.slice(1);
- parse.call(this, hash, "fragment");
- },
- get origin() {
- var host;
- if (this._isInvalid || !this._scheme) {
- return "";
- }
- switch (this._scheme) {
- case "data":
- case "file":
- case "javascript":
- case "mailto":
- return "null";
- }
- host = this.host;
- if (!host) {
- return "";
- }
- return this._scheme + "://" + host;
- }
- };
- var OriginalURL = scope.URL;
- if (OriginalURL) {
- jURL.createObjectURL = function(blob) {
- return OriginalURL.createObjectURL.apply(OriginalURL, arguments);
- };
- jURL.revokeObjectURL = function(url) {
- OriginalURL.revokeObjectURL(url);
- };
- }
- scope.URL = jURL;
-})(self);
-
-if (typeof WeakMap === "undefined") {
- (function() {
- var defineProperty = Object.defineProperty;
- var counter = Date.now() % 1e9;
- var WeakMap = function() {
- this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
- };
- WeakMap.prototype = {
- set: function(key, value) {
- var entry = key[this.name];
- if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
- value: [ key, value ],
- writable: true
- });
- return this;
- },
- get: function(key) {
- var entry;
- return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
- },
- "delete": function(key) {
- var entry = key[this.name];
- if (!entry || entry[0] !== key) return false;
- entry[0] = entry[1] = undefined;
- return true;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
- }
- };
- window.WeakMap = WeakMap;
- })();
-}
-
-(function(global) {
- if (global.JsMutationObserver) {
- return;
- }
- var registrationsTable = new WeakMap();
- var setImmediate;
- if (/Trident|Edge/.test(navigator.userAgent)) {
- setImmediate = setTimeout;
- } else if (window.setImmediate) {
- setImmediate = window.setImmediate;
- } else {
- var setImmediateQueue = [];
- var sentinel = String(Math.random());
- window.addEventListener("message", function(e) {
- if (e.data === sentinel) {
- var queue = setImmediateQueue;
- setImmediateQueue = [];
- queue.forEach(function(func) {
- func();
- });
- }
- });
- setImmediate = function(func) {
- setImmediateQueue.push(func);
- window.postMessage(sentinel, "*");
- };
- }
- var isScheduled = false;
- var scheduledObservers = [];
- function scheduleCallback(observer) {
- scheduledObservers.push(observer);
- if (!isScheduled) {
- isScheduled = true;
- setImmediate(dispatchCallbacks);
- }
- }
- function wrapIfNeeded(node) {
- return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
- }
- function dispatchCallbacks() {
- isScheduled = false;
- var observers = scheduledObservers;
- scheduledObservers = [];
- observers.sort(function(o1, o2) {
- return o1.uid_ - o2.uid_;
- });
- var anyNonEmpty = false;
- observers.forEach(function(observer) {
- var queue = observer.takeRecords();
- removeTransientObserversFor(observer);
- if (queue.length) {
- observer.callback_(queue, observer);
- anyNonEmpty = true;
- }
- });
- if (anyNonEmpty) dispatchCallbacks();
- }
- function removeTransientObserversFor(observer) {
- observer.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- registrations.forEach(function(registration) {
- if (registration.observer === observer) registration.removeTransientObservers();
- });
- });
- }
- function forEachAncestorAndObserverEnqueueRecord(target, callback) {
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (registrations) {
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- var record = callback(options);
- if (record) registration.enqueue(record);
- }
- }
- }
- }
- var uidCounter = 0;
- function JsMutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- }
- JsMutationObserver.prototype = {
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
- throw new SyntaxError();
- }
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- var registration;
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeListeners();
- registration.options = options;
- break;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, options);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- registration.addListeners();
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registration.removeListeners();
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = [];
- this.removedNodes = [];
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function copyMutationRecord(original) {
- var record = new MutationRecord(original.type, original.target);
- record.addedNodes = original.addedNodes.slice();
- record.removedNodes = original.removedNodes.slice();
- record.previousSibling = original.previousSibling;
- record.nextSibling = original.nextSibling;
- record.attributeName = original.attributeName;
- record.attributeNamespace = original.attributeNamespace;
- record.oldValue = original.oldValue;
- return record;
- }
- var currentRecord, recordWithOldValue;
- function getRecord(type, target) {
- return currentRecord = new MutationRecord(type, target);
- }
- function getRecordWithOldValue(oldValue) {
- if (recordWithOldValue) return recordWithOldValue;
- recordWithOldValue = copyMutationRecord(currentRecord);
- recordWithOldValue.oldValue = oldValue;
- return recordWithOldValue;
- }
- function clearRecords() {
- currentRecord = recordWithOldValue = undefined;
- }
- function recordRepresentsCurrentMutation(record) {
- return record === recordWithOldValue || record === currentRecord;
- }
- function selectRecord(lastRecord, newRecord) {
- if (lastRecord === newRecord) return lastRecord;
- if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
- return null;
- }
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- enqueue: function(record) {
- var records = this.observer.records_;
- var length = records.length;
- if (records.length > 0) {
- var lastRecord = records[length - 1];
- var recordToReplaceLast = selectRecord(lastRecord, record);
- if (recordToReplaceLast) {
- records[length - 1] = recordToReplaceLast;
- return;
- }
- } else {
- scheduleCallback(this.observer);
- }
- records[length] = record;
- },
- addListeners: function() {
- this.addListeners_(this.target);
- },
- addListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
- },
- removeListeners: function() {
- this.removeListeners_(this.target);
- },
- removeListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
- },
- addTransientObserver: function(node) {
- if (node === this.target) return;
- this.addListeners_(node);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- transientObservedNodes.forEach(function(node) {
- this.removeListeners_(node);
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i] === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- },
- handleEvent: function(e) {
- e.stopImmediatePropagation();
- switch (e.type) {
- case "DOMAttrModified":
- var name = e.attrName;
- var namespace = e.relatedNode.namespaceURI;
- var target = e.target;
- var record = new getRecord("attributes", target);
- record.attributeName = name;
- record.attributeNamespace = namespace;
- var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.attributes) return;
- if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
- return;
- }
- if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMCharacterDataModified":
- var target = e.target;
- var record = getRecord("characterData", target);
- var oldValue = e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.characterData) return;
- if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMNodeRemoved":
- this.addTransientObserver(e.target);
-
- case "DOMNodeInserted":
- var changedNode = e.target;
- var addedNodes, removedNodes;
- if (e.type === "DOMNodeInserted") {
- addedNodes = [ changedNode ];
- removedNodes = [];
- } else {
- addedNodes = [];
- removedNodes = [ changedNode ];
- }
- var previousSibling = changedNode.previousSibling;
- var nextSibling = changedNode.nextSibling;
- var record = getRecord("childList", e.target.parentNode);
- record.addedNodes = addedNodes;
- record.removedNodes = removedNodes;
- record.previousSibling = previousSibling;
- record.nextSibling = nextSibling;
- forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
- if (!options.childList) return;
- return record;
- });
- }
- clearRecords();
- }
- };
- global.JsMutationObserver = JsMutationObserver;
- if (!global.MutationObserver) {
- global.MutationObserver = JsMutationObserver;
- JsMutationObserver._isPolyfilled = true;
- }
-})(self);
-
-(function() {
- var needsTemplate = typeof HTMLTemplateElement === "undefined";
- if (/Trident/.test(navigator.userAgent)) {
- (function() {
- var importNode = document.importNode;
- document.importNode = function() {
- var n = importNode.apply(document, arguments);
- if (n.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
- var f = document.createDocumentFragment();
- f.appendChild(n);
- return f;
- } else {
- return n;
- }
- };
- })();
- }
- var needsCloning = function() {
- if (!needsTemplate) {
- var t = document.createElement("template");
- var t2 = document.createElement("template");
- t2.content.appendChild(document.createElement("div"));
- t.content.appendChild(t2);
- var clone = t.cloneNode(true);
- return clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0;
- }
- }();
- var TEMPLATE_TAG = "template";
- var TemplateImpl = function() {};
- if (needsTemplate) {
- var contentDoc = document.implementation.createHTMLDocument("template");
- var canDecorate = true;
- var templateStyle = document.createElement("style");
- templateStyle.textContent = TEMPLATE_TAG + "{display:none;}";
- var head = document.head;
- head.insertBefore(templateStyle, head.firstElementChild);
- TemplateImpl.prototype = Object.create(HTMLElement.prototype);
- TemplateImpl.decorate = function(template) {
- if (template.content) {
- return;
- }
- template.content = contentDoc.createDocumentFragment();
- var child;
- while (child = template.firstChild) {
- template.content.appendChild(child);
- }
- template.cloneNode = function(deep) {
- return TemplateImpl.cloneNode(this, deep);
- };
- if (canDecorate) {
- try {
- Object.defineProperty(template, "innerHTML", {
- get: function() {
- var o = "";
- for (var e = this.content.firstChild; e; e = e.nextSibling) {
- o += e.outerHTML || escapeData(e.data);
- }
- return o;
- },
- set: function(text) {
- contentDoc.body.innerHTML = text;
- TemplateImpl.bootstrap(contentDoc);
- while (this.content.firstChild) {
- this.content.removeChild(this.content.firstChild);
- }
- while (contentDoc.body.firstChild) {
- this.content.appendChild(contentDoc.body.firstChild);
- }
- },
- configurable: true
- });
- } catch (err) {
- canDecorate = false;
- }
- }
- TemplateImpl.bootstrap(template.content);
- };
- TemplateImpl.bootstrap = function(doc) {
- var templates = doc.querySelectorAll(TEMPLATE_TAG);
- for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) {
- TemplateImpl.decorate(t);
- }
- };
- document.addEventListener("DOMContentLoaded", function() {
- TemplateImpl.bootstrap(document);
- });
- var createElement = document.createElement;
- document.createElement = function() {
- "use strict";
- var el = createElement.apply(document, arguments);
- if (el.localName === "template") {
- TemplateImpl.decorate(el);
- }
- return el;
- };
- var escapeDataRegExp = /[&\u00A0<>]/g;
- function escapeReplace(c) {
- switch (c) {
- case "&":
- return "&";
-
- case "<":
- return "<";
-
- case ">":
- return ">";
-
- case "Â ":
- return " ";
- }
- }
- function escapeData(s) {
- return s.replace(escapeDataRegExp, escapeReplace);
- }
- }
- if (needsTemplate || needsCloning) {
- var nativeCloneNode = Node.prototype.cloneNode;
- TemplateImpl.cloneNode = function(template, deep) {
- var clone = nativeCloneNode.call(template, false);
- if (this.decorate) {
- this.decorate(clone);
- }
- if (deep) {
- clone.content.appendChild(nativeCloneNode.call(template.content, true));
- this.fixClonedDom(clone.content, template.content);
- }
- return clone;
- };
- TemplateImpl.fixClonedDom = function(clone, source) {
- if (!source.querySelectorAll) return;
- var s$ = source.querySelectorAll(TEMPLATE_TAG);
- var t$ = clone.querySelectorAll(TEMPLATE_TAG);
- for (var i = 0, l = t$.length, t, s; i < l; i++) {
- s = s$[i];
- t = t$[i];
- if (this.decorate) {
- this.decorate(s);
- }
- t.parentNode.replaceChild(s.cloneNode(true), t);
- }
- };
- var originalImportNode = document.importNode;
- Node.prototype.cloneNode = function(deep) {
- var dom = nativeCloneNode.call(this, deep);
- if (deep) {
- TemplateImpl.fixClonedDom(dom, this);
- }
- return dom;
- };
- document.importNode = function(element, deep) {
- if (element.localName === TEMPLATE_TAG) {
- return TemplateImpl.cloneNode(element, deep);
- } else {
- var dom = originalImportNode.call(document, element, deep);
- if (deep) {
- TemplateImpl.fixClonedDom(dom, element);
- }
- return dom;
- }
- };
- if (needsCloning) {
- HTMLTemplateElement.prototype.cloneNode = function(deep) {
- return TemplateImpl.cloneNode(this, deep);
- };
- }
- }
- if (needsTemplate) {
- window.HTMLTemplateElement = TemplateImpl;
- }
-})();
-
-(function(scope) {
- "use strict";
- if (!window.performance) {
- var start = Date.now();
- window.performance = {
- now: function() {
- return Date.now() - start;
- }
- };
- }
- if (!window.requestAnimationFrame) {
- window.requestAnimationFrame = function() {
- var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
- return nativeRaf ? function(callback) {
- return nativeRaf(function() {
- callback(performance.now());
- });
- } : function(callback) {
- return window.setTimeout(callback, 1e3 / 60);
- };
- }();
- }
- if (!window.cancelAnimationFrame) {
- window.cancelAnimationFrame = function() {
- return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) {
- clearTimeout(id);
- };
- }();
- }
- var workingDefaultPrevented = function() {
- var e = document.createEvent("Event");
- e.initEvent("foo", true, true);
- e.preventDefault();
- return e.defaultPrevented;
- }();
- if (!workingDefaultPrevented) {
- var origPreventDefault = Event.prototype.preventDefault;
- Event.prototype.preventDefault = function() {
- if (!this.cancelable) {
- return;
- }
- origPreventDefault.call(this);
- Object.defineProperty(this, "defaultPrevented", {
- get: function() {
- return true;
- },
- configurable: true
- });
- };
- }
- var isIE = /Trident/.test(navigator.userAgent);
- if (!window.CustomEvent || isIE && typeof window.CustomEvent !== "function") {
- window.CustomEvent = function(inType, params) {
- params = params || {};
- var e = document.createEvent("CustomEvent");
- e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);
- return e;
- };
- window.CustomEvent.prototype = window.Event.prototype;
- }
- if (!window.Event || isIE && typeof window.Event !== "function") {
- var origEvent = window.Event;
- window.Event = function(inType, params) {
- params = params || {};
- var e = document.createEvent("Event");
- e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));
- return e;
- };
- window.Event.prototype = origEvent.prototype;
- }
-})(window.WebComponents);
-
-window.HTMLImports = window.HTMLImports || {
- flags: {}
-};
-
-(function(scope) {
- var IMPORT_LINK_TYPE = "import";
- var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link"));
- var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill);
- var wrap = function(node) {
- return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node;
- };
- var rootDocument = wrap(document);
- var currentScriptDescriptor = {
- get: function() {
- var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null);
- return wrap(script);
- },
- configurable: true
- };
- Object.defineProperty(document, "_currentScript", currentScriptDescriptor);
- Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor);
- var isIE = /Trident/.test(navigator.userAgent);
- function whenReady(callback, doc) {
- doc = doc || rootDocument;
- whenDocumentReady(function() {
- watchImportsLoad(callback, doc);
- }, doc);
- }
- var requiredReadyState = isIE ? "complete" : "interactive";
- var READY_EVENT = "readystatechange";
- function isDocumentReady(doc) {
- return doc.readyState === "complete" || doc.readyState === requiredReadyState;
- }
- function whenDocumentReady(callback, doc) {
- if (!isDocumentReady(doc)) {
- var checkReady = function() {
- if (doc.readyState === "complete" || doc.readyState === requiredReadyState) {
- doc.removeEventListener(READY_EVENT, checkReady);
- whenDocumentReady(callback, doc);
- }
- };
- doc.addEventListener(READY_EVENT, checkReady);
- } else if (callback) {
- callback();
- }
- }
- function markTargetLoaded(event) {
- event.target.__loaded = true;
- }
- function watchImportsLoad(callback, doc) {
- var imports = doc.querySelectorAll("link[rel=import]");
- var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = [];
- function checkDone() {
- if (parsedCount == importCount && callback) {
- callback({
- allImports: imports,
- loadedImports: newImports,
- errorImports: errorImports
- });
- }
- }
- function loadedImport(e) {
- markTargetLoaded(e);
- newImports.push(this);
- parsedCount++;
- checkDone();
- }
- function errorLoadingImport(e) {
- errorImports.push(this);
- parsedCount++;
- checkDone();
- }
- if (importCount) {
- for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) {
- if (isImportLoaded(imp)) {
- newImports.push(this);
- parsedCount++;
- checkDone();
- } else {
- imp.addEventListener("load", loadedImport);
- imp.addEventListener("error", errorLoadingImport);
- }
- }
- } else {
- checkDone();
- }
- }
- function isImportLoaded(link) {
- return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed;
- }
- if (useNative) {
- new MutationObserver(function(mxns) {
- for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) {
- if (m.addedNodes) {
- handleImports(m.addedNodes);
- }
- }
- }).observe(document.head, {
- childList: true
- });
- function handleImports(nodes) {
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (isImport(n)) {
- handleImport(n);
- }
- }
- }
- function isImport(element) {
- return element.localName === "link" && element.rel === "import";
- }
- function handleImport(element) {
- var loaded = element.import;
- if (loaded) {
- markTargetLoaded({
- target: element
- });
- } else {
- element.addEventListener("load", markTargetLoaded);
- element.addEventListener("error", markTargetLoaded);
- }
- }
- (function() {
- if (document.readyState === "loading") {
- var imports = document.querySelectorAll("link[rel=import]");
- for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) {
- handleImport(imp);
- }
- }
- })();
- }
- whenReady(function(detail) {
- window.HTMLImports.ready = true;
- window.HTMLImports.readyTime = new Date().getTime();
- var evt = rootDocument.createEvent("CustomEvent");
- evt.initCustomEvent("HTMLImportsLoaded", true, true, detail);
- rootDocument.dispatchEvent(evt);
- });
- scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;
- scope.useNative = useNative;
- scope.rootDocument = rootDocument;
- scope.whenReady = whenReady;
- scope.isIE = isIE;
-})(window.HTMLImports);
-
-(function(scope) {
- var modules = [];
- var addModule = function(module) {
- modules.push(module);
- };
- var initializeModules = function() {
- modules.forEach(function(module) {
- module(scope);
- });
- };
- scope.addModule = addModule;
- scope.initializeModules = initializeModules;
-})(window.HTMLImports);
-
-window.HTMLImports.addModule(function(scope) {
- var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g;
- var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g;
- var path = {
- resolveUrlsInStyle: function(style, linkUrl) {
- var doc = style.ownerDocument;
- var resolver = doc.createElement("a");
- style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver);
- return style;
- },
- resolveUrlsInCssText: function(cssText, linkUrl, urlObj) {
- var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP);
- r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP);
- return r;
- },
- replaceUrls: function(text, urlObj, linkUrl, regexp) {
- return text.replace(regexp, function(m, pre, url, post) {
- var urlPath = url.replace(/["']/g, "");
- if (linkUrl) {
- urlPath = new URL(urlPath, linkUrl).href;
- }
- urlObj.href = urlPath;
- urlPath = urlObj.href;
- return pre + "'" + urlPath + "'" + post;
- });
- }
- };
- scope.path = path;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var xhr = {
- async: true,
- ok: function(request) {
- return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0;
- },
- load: function(url, next, nextContext) {
- var request = new XMLHttpRequest();
- if (scope.flags.debug || scope.flags.bust) {
- url += "?" + Math.random();
- }
- request.open("GET", url, xhr.async);
- request.addEventListener("readystatechange", function(e) {
- if (request.readyState === 4) {
- var redirectedUrl = null;
- try {
- var locationHeader = request.getResponseHeader("Location");
- if (locationHeader) {
- redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader;
- }
- } catch (e) {
- console.error(e.message);
- }
- next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl);
- }
- });
- request.send();
- return request;
- },
- loadDocument: function(url, next, nextContext) {
- this.load(url, next, nextContext).responseType = "document";
- }
- };
- scope.xhr = xhr;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var xhr = scope.xhr;
- var flags = scope.flags;
- var Loader = function(onLoad, onComplete) {
- this.cache = {};
- this.onload = onLoad;
- this.oncomplete = onComplete;
- this.inflight = 0;
- this.pending = {};
- };
- Loader.prototype = {
- addNodes: function(nodes) {
- this.inflight += nodes.length;
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- this.require(n);
- }
- this.checkDone();
- },
- addNode: function(node) {
- this.inflight++;
- this.require(node);
- this.checkDone();
- },
- require: function(elt) {
- var url = elt.src || elt.href;
- elt.__nodeUrl = url;
- if (!this.dedupe(url, elt)) {
- this.fetch(url, elt);
- }
- },
- dedupe: function(url, elt) {
- if (this.pending[url]) {
- this.pending[url].push(elt);
- return true;
- }
- var resource;
- if (this.cache[url]) {
- this.onload(url, elt, this.cache[url]);
- this.tail();
- return true;
- }
- this.pending[url] = [ elt ];
- return false;
- },
- fetch: function(url, elt) {
- flags.load && console.log("fetch", url, elt);
- if (!url) {
- setTimeout(function() {
- this.receive(url, elt, {
- error: "href must be specified"
- }, null);
- }.bind(this), 0);
- } else if (url.match(/^data:/)) {
- var pieces = url.split(",");
- var header = pieces[0];
- var body = pieces[1];
- if (header.indexOf(";base64") > -1) {
- body = atob(body);
- } else {
- body = decodeURIComponent(body);
- }
- setTimeout(function() {
- this.receive(url, elt, null, body);
- }.bind(this), 0);
- } else {
- var receiveXhr = function(err, resource, redirectedUrl) {
- this.receive(url, elt, err, resource, redirectedUrl);
- }.bind(this);
- xhr.load(url, receiveXhr);
- }
- },
- receive: function(url, elt, err, resource, redirectedUrl) {
- this.cache[url] = resource;
- var $p = this.pending[url];
- for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
- this.onload(url, p, resource, err, redirectedUrl);
- this.tail();
- }
- this.pending[url] = null;
- },
- tail: function() {
- --this.inflight;
- this.checkDone();
- },
- checkDone: function() {
- if (!this.inflight) {
- this.oncomplete();
- }
- }
- };
- scope.Loader = Loader;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var Observer = function(addCallback) {
- this.addCallback = addCallback;
- this.mo = new MutationObserver(this.handler.bind(this));
- };
- Observer.prototype = {
- handler: function(mutations) {
- for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) {
- if (m.type === "childList" && m.addedNodes.length) {
- this.addedNodes(m.addedNodes);
- }
- }
- },
- addedNodes: function(nodes) {
- if (this.addCallback) {
- this.addCallback(nodes);
- }
- for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) {
- if (n.children && n.children.length) {
- this.addedNodes(n.children);
- }
- }
- },
- observe: function(root) {
- this.mo.observe(root, {
- childList: true,
- subtree: true
- });
- }
- };
- scope.Observer = Observer;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var path = scope.path;
- var rootDocument = scope.rootDocument;
- var flags = scope.flags;
- var isIE = scope.isIE;
- var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
- var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]";
- var importParser = {
- documentSelectors: IMPORT_SELECTOR,
- importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]:not([type])", "style:not([type])", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","),
- map: {
- link: "parseLink",
- script: "parseScript",
- style: "parseStyle"
- },
- dynamicElements: [],
- parseNext: function() {
- var next = this.nextToParse();
- if (next) {
- this.parse(next);
- }
- },
- parse: function(elt) {
- if (this.isParsed(elt)) {
- flags.parse && console.log("[%s] is already parsed", elt.localName);
- return;
- }
- var fn = this[this.map[elt.localName]];
- if (fn) {
- this.markParsing(elt);
- fn.call(this, elt);
- }
- },
- parseDynamic: function(elt, quiet) {
- this.dynamicElements.push(elt);
- if (!quiet) {
- this.parseNext();
- }
- },
- markParsing: function(elt) {
- flags.parse && console.log("parsing", elt);
- this.parsingElement = elt;
- },
- markParsingComplete: function(elt) {
- elt.__importParsed = true;
- this.markDynamicParsingComplete(elt);
- if (elt.__importElement) {
- elt.__importElement.__importParsed = true;
- this.markDynamicParsingComplete(elt.__importElement);
- }
- this.parsingElement = null;
- flags.parse && console.log("completed", elt);
- },
- markDynamicParsingComplete: function(elt) {
- var i = this.dynamicElements.indexOf(elt);
- if (i >= 0) {
- this.dynamicElements.splice(i, 1);
- }
- },
- parseImport: function(elt) {
- elt.import = elt.__doc;
- if (window.HTMLImports.__importsParsingHook) {
- window.HTMLImports.__importsParsingHook(elt);
- }
- if (elt.import) {
- elt.import.__importParsed = true;
- }
- this.markParsingComplete(elt);
- if (elt.__resource && !elt.__error) {
- elt.dispatchEvent(new CustomEvent("load", {
- bubbles: false
- }));
- } else {
- elt.dispatchEvent(new CustomEvent("error", {
- bubbles: false
- }));
- }
- if (elt.__pending) {
- var fn;
- while (elt.__pending.length) {
- fn = elt.__pending.shift();
- if (fn) {
- fn({
- target: elt
- });
- }
- }
- }
- this.parseNext();
- },
- parseLink: function(linkElt) {
- if (nodeIsImport(linkElt)) {
- this.parseImport(linkElt);
- } else {
- linkElt.href = linkElt.href;
- this.parseGeneric(linkElt);
- }
- },
- parseStyle: function(elt) {
- var src = elt;
- elt = cloneStyle(elt);
- src.__appliedElement = elt;
- elt.__importElement = src;
- this.parseGeneric(elt);
- },
- parseGeneric: function(elt) {
- this.trackElement(elt);
- this.addElementToDocument(elt);
- },
- rootImportForElement: function(elt) {
- var n = elt;
- while (n.ownerDocument.__importLink) {
- n = n.ownerDocument.__importLink;
- }
- return n;
- },
- addElementToDocument: function(elt) {
- var port = this.rootImportForElement(elt.__importElement || elt);
- port.parentNode.insertBefore(elt, port);
- },
- trackElement: function(elt, callback) {
- var self = this;
- var done = function(e) {
- elt.removeEventListener("load", done);
- elt.removeEventListener("error", done);
- if (callback) {
- callback(e);
- }
- self.markParsingComplete(elt);
- self.parseNext();
- };
- elt.addEventListener("load", done);
- elt.addEventListener("error", done);
- if (isIE && elt.localName === "style") {
- var fakeLoad = false;
- if (elt.textContent.indexOf("@import") == -1) {
- fakeLoad = true;
- } else if (elt.sheet) {
- fakeLoad = true;
- var csr = elt.sheet.cssRules;
- var len = csr ? csr.length : 0;
- for (var i = 0, r; i < len && (r = csr[i]); i++) {
- if (r.type === CSSRule.IMPORT_RULE) {
- fakeLoad = fakeLoad && Boolean(r.styleSheet);
- }
- }
- }
- if (fakeLoad) {
- setTimeout(function() {
- elt.dispatchEvent(new CustomEvent("load", {
- bubbles: false
- }));
- });
- }
- }
- },
- parseScript: function(scriptElt) {
- var script = document.createElement("script");
- script.__importElement = scriptElt;
- script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt);
- scope.currentScript = scriptElt;
- this.trackElement(script, function(e) {
- if (script.parentNode) {
- script.parentNode.removeChild(script);
- }
- scope.currentScript = null;
- });
- this.addElementToDocument(script);
- },
- nextToParse: function() {
- this._mayParse = [];
- return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic());
- },
- nextToParseInDoc: function(doc, link) {
- if (doc && this._mayParse.indexOf(doc) < 0) {
- this._mayParse.push(doc);
- var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc));
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (!this.isParsed(n)) {
- if (this.hasResource(n)) {
- return nodeIsImport(n) ? this.nextToParseInDoc(n.__doc, n) : n;
- } else {
- return;
- }
- }
- }
- }
- return link;
- },
- nextToParseDynamic: function() {
- return this.dynamicElements[0];
- },
- parseSelectorsForNode: function(node) {
- var doc = node.ownerDocument || node;
- return doc === rootDocument ? this.documentSelectors : this.importsSelectors;
- },
- isParsed: function(node) {
- return node.__importParsed;
- },
- needsDynamicParsing: function(elt) {
- return this.dynamicElements.indexOf(elt) >= 0;
- },
- hasResource: function(node) {
- if (nodeIsImport(node) && node.__doc === undefined) {
- return false;
- }
- return true;
- }
- };
- function nodeIsImport(elt) {
- return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE;
- }
- function generateScriptDataUrl(script) {
- var scriptContent = generateScriptContent(script);
- return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent);
- }
- function generateScriptContent(script) {
- return script.textContent + generateSourceMapHint(script);
- }
- function generateSourceMapHint(script) {
- var owner = script.ownerDocument;
- owner.__importedScripts = owner.__importedScripts || 0;
- var moniker = script.ownerDocument.baseURI;
- var num = owner.__importedScripts ? "-" + owner.__importedScripts : "";
- owner.__importedScripts++;
- return "\n//# sourceURL=" + moniker + num + ".js\n";
- }
- function cloneStyle(style) {
- var clone = style.ownerDocument.createElement("style");
- clone.textContent = style.textContent;
- path.resolveUrlsInStyle(clone);
- return clone;
- }
- scope.parser = importParser;
- scope.IMPORT_SELECTOR = IMPORT_SELECTOR;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var flags = scope.flags;
- var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
- var IMPORT_SELECTOR = scope.IMPORT_SELECTOR;
- var rootDocument = scope.rootDocument;
- var Loader = scope.Loader;
- var Observer = scope.Observer;
- var parser = scope.parser;
- var importer = {
- documents: {},
- documentPreloadSelectors: IMPORT_SELECTOR,
- importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","),
- loadNode: function(node) {
- importLoader.addNode(node);
- },
- loadSubtree: function(parent) {
- var nodes = this.marshalNodes(parent);
- importLoader.addNodes(nodes);
- },
- marshalNodes: function(parent) {
- return parent.querySelectorAll(this.loadSelectorsForNode(parent));
- },
- loadSelectorsForNode: function(node) {
- var doc = node.ownerDocument || node;
- return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors;
- },
- loaded: function(url, elt, resource, err, redirectedUrl) {
- flags.load && console.log("loaded", url, elt);
- elt.__resource = resource;
- elt.__error = err;
- if (isImportLink(elt)) {
- var doc = this.documents[url];
- if (doc === undefined) {
- doc = err ? null : makeDocument(resource, redirectedUrl || url);
- if (doc) {
- doc.__importLink = elt;
- this.bootDocument(doc);
- }
- this.documents[url] = doc;
- }
- elt.__doc = doc;
- }
- parser.parseNext();
- },
- bootDocument: function(doc) {
- this.loadSubtree(doc);
- this.observer.observe(doc);
- parser.parseNext();
- },
- loadedAll: function() {
- parser.parseNext();
- }
- };
- var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer));
- importer.observer = new Observer();
- function isImportLink(elt) {
- return isLinkRel(elt, IMPORT_LINK_TYPE);
- }
- function isLinkRel(elt, rel) {
- return elt.localName === "link" && elt.getAttribute("rel") === rel;
- }
- function hasBaseURIAccessor(doc) {
- return !!Object.getOwnPropertyDescriptor(doc, "baseURI");
- }
- function makeDocument(resource, url) {
- var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE);
- doc._URL = url;
- var base = doc.createElement("base");
- base.setAttribute("href", url);
- if (!doc.baseURI && !hasBaseURIAccessor(doc)) {
- Object.defineProperty(doc, "baseURI", {
- value: url
- });
- }
- var meta = doc.createElement("meta");
- meta.setAttribute("charset", "utf-8");
- doc.head.appendChild(meta);
- doc.head.appendChild(base);
- doc.body.innerHTML = resource;
- if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {
- HTMLTemplateElement.bootstrap(doc);
- }
- return doc;
- }
- if (!document.baseURI) {
- var baseURIDescriptor = {
- get: function() {
- var base = document.querySelector("base");
- return base ? base.href : window.location.href;
- },
- configurable: true
- };
- Object.defineProperty(document, "baseURI", baseURIDescriptor);
- Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor);
- }
- scope.importer = importer;
- scope.importLoader = importLoader;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var parser = scope.parser;
- var importer = scope.importer;
- var dynamic = {
- added: function(nodes) {
- var owner, parsed, loading;
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (!owner) {
- owner = n.ownerDocument;
- parsed = parser.isParsed(owner);
- }
- loading = this.shouldLoadNode(n);
- if (loading) {
- importer.loadNode(n);
- }
- if (this.shouldParseNode(n) && parsed) {
- parser.parseDynamic(n, loading);
- }
- }
- },
- shouldLoadNode: function(node) {
- return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node));
- },
- shouldParseNode: function(node) {
- return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node));
- }
- };
- importer.observer.addCallback = dynamic.added.bind(dynamic);
- var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector;
-});
-
-(function(scope) {
- var initializeModules = scope.initializeModules;
- var isIE = scope.isIE;
- if (scope.useNative) {
- return;
- }
- initializeModules();
- var rootDocument = scope.rootDocument;
- function bootstrap() {
- window.HTMLImports.importer.bootDocument(rootDocument);
- }
- if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) {
- bootstrap();
- } else {
- document.addEventListener("DOMContentLoaded", bootstrap);
- }
-})(window.HTMLImports);
-
-window.CustomElements = window.CustomElements || {
- flags: {}
-};
-
-(function(scope) {
- var flags = scope.flags;
- var modules = [];
- var addModule = function(module) {
- modules.push(module);
- };
- var initializeModules = function() {
- modules.forEach(function(module) {
- module(scope);
- });
- };
- scope.addModule = addModule;
- scope.initializeModules = initializeModules;
- scope.hasNative = Boolean(document.registerElement);
- scope.isIE = /Trident/.test(navigator.userAgent);
- scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative);
-})(window.CustomElements);
-
-window.CustomElements.addModule(function(scope) {
- var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none";
- function forSubtree(node, cb) {
- findAllElements(node, function(e) {
- if (cb(e)) {
- return true;
- }
- forRoots(e, cb);
- });
- forRoots(node, cb);
- }
- function findAllElements(node, find, data) {
- var e = node.firstElementChild;
- if (!e) {
- e = node.firstChild;
- while (e && e.nodeType !== Node.ELEMENT_NODE) {
- e = e.nextSibling;
- }
- }
- while (e) {
- if (find(e, data) !== true) {
- findAllElements(e, find, data);
- }
- e = e.nextElementSibling;
- }
- return null;
- }
- function forRoots(node, cb) {
- var root = node.shadowRoot;
- while (root) {
- forSubtree(root, cb);
- root = root.olderShadowRoot;
- }
- }
- function forDocumentTree(doc, cb) {
- _forDocumentTree(doc, cb, []);
- }
- function _forDocumentTree(doc, cb, processingDocuments) {
- doc = window.wrap(doc);
- if (processingDocuments.indexOf(doc) >= 0) {
- return;
- }
- processingDocuments.push(doc);
- var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]");
- for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) {
- if (n.import) {
- _forDocumentTree(n.import, cb, processingDocuments);
- }
- }
- cb(doc);
- }
- scope.forDocumentTree = forDocumentTree;
- scope.forSubtree = forSubtree;
-});
-
-window.CustomElements.addModule(function(scope) {
- var flags = scope.flags;
- var forSubtree = scope.forSubtree;
- var forDocumentTree = scope.forDocumentTree;
- function addedNode(node, isAttached) {
- return added(node, isAttached) || addedSubtree(node, isAttached);
- }
- function added(node, isAttached) {
- if (scope.upgrade(node, isAttached)) {
- return true;
- }
- if (isAttached) {
- attached(node);
- }
- }
- function addedSubtree(node, isAttached) {
- forSubtree(node, function(e) {
- if (added(e, isAttached)) {
- return true;
- }
- });
- }
- var hasThrottledAttached = window.MutationObserver._isPolyfilled && flags["throttle-attached"];
- scope.hasPolyfillMutations = hasThrottledAttached;
- scope.hasThrottledAttached = hasThrottledAttached;
- var isPendingMutations = false;
- var pendingMutations = [];
- function deferMutation(fn) {
- pendingMutations.push(fn);
- if (!isPendingMutations) {
- isPendingMutations = true;
- setTimeout(takeMutations);
- }
- }
- function takeMutations() {
- isPendingMutations = false;
- var $p = pendingMutations;
- for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
- p();
- }
- pendingMutations = [];
- }
- function attached(element) {
- if (hasThrottledAttached) {
- deferMutation(function() {
- _attached(element);
- });
- } else {
- _attached(element);
- }
- }
- function _attached(element) {
- if (element.__upgraded__ && !element.__attached) {
- element.__attached = true;
- if (element.attachedCallback) {
- element.attachedCallback();
- }
- }
- }
- function detachedNode(node) {
- detached(node);
- forSubtree(node, function(e) {
- detached(e);
- });
- }
- function detached(element) {
- if (hasThrottledAttached) {
- deferMutation(function() {
- _detached(element);
- });
- } else {
- _detached(element);
- }
- }
- function _detached(element) {
- if (element.__upgraded__ && element.__attached) {
- element.__attached = false;
- if (element.detachedCallback) {
- element.detachedCallback();
- }
- }
- }
- function inDocument(element) {
- var p = element;
- var doc = window.wrap(document);
- while (p) {
- if (p == doc) {
- return true;
- }
- p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host;
- }
- }
- function watchShadow(node) {
- if (node.shadowRoot && !node.shadowRoot.__watched) {
- flags.dom && console.log("watching shadow-root for: ", node.localName);
- var root = node.shadowRoot;
- while (root) {
- observe(root);
- root = root.olderShadowRoot;
- }
- }
- }
- function handler(root, mutations) {
- if (flags.dom) {
- var mx = mutations[0];
- if (mx && mx.type === "childList" && mx.addedNodes) {
- if (mx.addedNodes) {
- var d = mx.addedNodes[0];
- while (d && d !== document && !d.host) {
- d = d.parentNode;
- }
- var u = d && (d.URL || d._URL || d.host && d.host.localName) || "";
- u = u.split("/?").shift().split("/").pop();
- }
- }
- console.group("mutations (%d) [%s]", mutations.length, u || "");
- }
- var isAttached = inDocument(root);
- mutations.forEach(function(mx) {
- if (mx.type === "childList") {
- forEach(mx.addedNodes, function(n) {
- if (!n.localName) {
- return;
- }
- addedNode(n, isAttached);
- });
- forEach(mx.removedNodes, function(n) {
- if (!n.localName) {
- return;
- }
- detachedNode(n);
- });
- }
- });
- flags.dom && console.groupEnd();
- }
- function takeRecords(node) {
- node = window.wrap(node);
- if (!node) {
- node = window.wrap(document);
- }
- while (node.parentNode) {
- node = node.parentNode;
- }
- var observer = node.__observer;
- if (observer) {
- handler(node, observer.takeRecords());
- takeMutations();
- }
- }
- var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
- function observe(inRoot) {
- if (inRoot.__observer) {
- return;
- }
- var observer = new MutationObserver(handler.bind(this, inRoot));
- observer.observe(inRoot, {
- childList: true,
- subtree: true
- });
- inRoot.__observer = observer;
- }
- function upgradeDocument(doc) {
- doc = window.wrap(doc);
- flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop());
- var isMainDocument = doc === window.wrap(document);
- addedNode(doc, isMainDocument);
- observe(doc);
- flags.dom && console.groupEnd();
- }
- function upgradeDocumentTree(doc) {
- forDocumentTree(doc, upgradeDocument);
- }
- var originalCreateShadowRoot = Element.prototype.createShadowRoot;
- if (originalCreateShadowRoot) {
- Element.prototype.createShadowRoot = function() {
- var root = originalCreateShadowRoot.call(this);
- window.CustomElements.watchShadow(this);
- return root;
- };
- }
- scope.watchShadow = watchShadow;
- scope.upgradeDocumentTree = upgradeDocumentTree;
- scope.upgradeDocument = upgradeDocument;
- scope.upgradeSubtree = addedSubtree;
- scope.upgradeAll = addedNode;
- scope.attached = attached;
- scope.takeRecords = takeRecords;
-});
-
-window.CustomElements.addModule(function(scope) {
- var flags = scope.flags;
- function upgrade(node, isAttached) {
- if (node.localName === "template") {
- if (window.HTMLTemplateElement && HTMLTemplateElement.decorate) {
- HTMLTemplateElement.decorate(node);
- }
- }
- if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
- var is = node.getAttribute("is");
- var definition = scope.getRegisteredDefinition(node.localName) || scope.getRegisteredDefinition(is);
- if (definition) {
- if (is && definition.tag == node.localName || !is && !definition.extends) {
- return upgradeWithDefinition(node, definition, isAttached);
- }
- }
- }
- }
- function upgradeWithDefinition(element, definition, isAttached) {
- flags.upgrade && console.group("upgrade:", element.localName);
- if (definition.is) {
- element.setAttribute("is", definition.is);
- }
- implementPrototype(element, definition);
- element.__upgraded__ = true;
- created(element);
- if (isAttached) {
- scope.attached(element);
- }
- scope.upgradeSubtree(element, isAttached);
- flags.upgrade && console.groupEnd();
- return element;
- }
- function implementPrototype(element, definition) {
- if (Object.__proto__) {
- element.__proto__ = definition.prototype;
- } else {
- customMixin(element, definition.prototype, definition.native);
- element.__proto__ = definition.prototype;
- }
- }
- function customMixin(inTarget, inSrc, inNative) {
- var used = {};
- var p = inSrc;
- while (p !== inNative && p !== HTMLElement.prototype) {
- var keys = Object.getOwnPropertyNames(p);
- for (var i = 0, k; k = keys[i]; i++) {
- if (!used[k]) {
- Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k));
- used[k] = 1;
- }
- }
- p = Object.getPrototypeOf(p);
- }
- }
- function created(element) {
- if (element.createdCallback) {
- element.createdCallback();
- }
- }
- scope.upgrade = upgrade;
- scope.upgradeWithDefinition = upgradeWithDefinition;
- scope.implementPrototype = implementPrototype;
-});
-
-window.CustomElements.addModule(function(scope) {
- var isIE = scope.isIE;
- var upgradeDocumentTree = scope.upgradeDocumentTree;
- var upgradeAll = scope.upgradeAll;
- var upgradeWithDefinition = scope.upgradeWithDefinition;
- var implementPrototype = scope.implementPrototype;
- var useNative = scope.useNative;
- function register(name, options) {
- var definition = options || {};
- if (!name) {
- throw new Error("document.registerElement: first argument `name` must not be empty");
- }
- if (name.indexOf("-") < 0) {
- throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'.");
- }
- if (isReservedTag(name)) {
- throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid.");
- }
- if (getRegisteredDefinition(name)) {
- throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered");
- }
- if (!definition.prototype) {
- definition.prototype = Object.create(HTMLElement.prototype);
- }
- definition.__name = name.toLowerCase();
- if (definition.extends) {
- definition.extends = definition.extends.toLowerCase();
- }
- definition.lifecycle = definition.lifecycle || {};
- definition.ancestry = ancestry(definition.extends);
- resolveTagName(definition);
- resolvePrototypeChain(definition);
- overrideAttributeApi(definition.prototype);
- registerDefinition(definition.__name, definition);
- definition.ctor = generateConstructor(definition);
- definition.ctor.prototype = definition.prototype;
- definition.prototype.constructor = definition.ctor;
- if (scope.ready) {
- upgradeDocumentTree(document);
- }
- return definition.ctor;
- }
- function overrideAttributeApi(prototype) {
- if (prototype.setAttribute._polyfilled) {
- return;
- }
- var setAttribute = prototype.setAttribute;
- prototype.setAttribute = function(name, value) {
- changeAttribute.call(this, name, value, setAttribute);
- };
- var removeAttribute = prototype.removeAttribute;
- prototype.removeAttribute = function(name) {
- changeAttribute.call(this, name, null, removeAttribute);
- };
- prototype.setAttribute._polyfilled = true;
- }
- function changeAttribute(name, value, operation) {
- name = name.toLowerCase();
- var oldValue = this.getAttribute(name);
- operation.apply(this, arguments);
- var newValue = this.getAttribute(name);
- if (this.attributeChangedCallback && newValue !== oldValue) {
- this.attributeChangedCallback(name, oldValue, newValue);
- }
- }
- function isReservedTag(name) {
- for (var i = 0; i < reservedTagList.length; i++) {
- if (name === reservedTagList[i]) {
- return true;
- }
- }
- }
- var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ];
- function ancestry(extnds) {
- var extendee = getRegisteredDefinition(extnds);
- if (extendee) {
- return ancestry(extendee.extends).concat([ extendee ]);
- }
- return [];
- }
- function resolveTagName(definition) {
- var baseTag = definition.extends;
- for (var i = 0, a; a = definition.ancestry[i]; i++) {
- baseTag = a.is && a.tag;
- }
- definition.tag = baseTag || definition.__name;
- if (baseTag) {
- definition.is = definition.__name;
- }
- }
- function resolvePrototypeChain(definition) {
- if (!Object.__proto__) {
- var nativePrototype = HTMLElement.prototype;
- if (definition.is) {
- var inst = document.createElement(definition.tag);
- nativePrototype = Object.getPrototypeOf(inst);
- }
- var proto = definition.prototype, ancestor;
- var foundPrototype = false;
- while (proto) {
- if (proto == nativePrototype) {
- foundPrototype = true;
- }
- ancestor = Object.getPrototypeOf(proto);
- if (ancestor) {
- proto.__proto__ = ancestor;
- }
- proto = ancestor;
- }
- if (!foundPrototype) {
- console.warn(definition.tag + " prototype not found in prototype chain for " + definition.is);
- }
- definition.native = nativePrototype;
- }
- }
- function instantiate(definition) {
- return upgradeWithDefinition(domCreateElement(definition.tag), definition);
- }
- var registry = {};
- function getRegisteredDefinition(name) {
- if (name) {
- return registry[name.toLowerCase()];
- }
- }
- function registerDefinition(name, definition) {
- registry[name] = definition;
- }
- function generateConstructor(definition) {
- return function() {
- return instantiate(definition);
- };
- }
- var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
- function createElementNS(namespace, tag, typeExtension) {
- if (namespace === HTML_NAMESPACE) {
- return createElement(tag, typeExtension);
- } else {
- return domCreateElementNS(namespace, tag);
- }
- }
- function createElement(tag, typeExtension) {
- if (tag) {
- tag = tag.toLowerCase();
- }
- if (typeExtension) {
- typeExtension = typeExtension.toLowerCase();
- }
- var definition = getRegisteredDefinition(typeExtension || tag);
- if (definition) {
- if (tag == definition.tag && typeExtension == definition.is) {
- return new definition.ctor();
- }
- if (!typeExtension && !definition.is) {
- return new definition.ctor();
- }
- }
- var element;
- if (typeExtension) {
- element = createElement(tag);
- element.setAttribute("is", typeExtension);
- return element;
- }
- element = domCreateElement(tag);
- if (tag.indexOf("-") >= 0) {
- implementPrototype(element, HTMLElement);
- }
- return element;
- }
- var domCreateElement = document.createElement.bind(document);
- var domCreateElementNS = document.createElementNS.bind(document);
- var isInstance;
- if (!Object.__proto__ && !useNative) {
- isInstance = function(obj, ctor) {
- if (obj instanceof ctor) {
- return true;
- }
- var p = obj;
- while (p) {
- if (p === ctor.prototype) {
- return true;
- }
- p = p.__proto__;
- }
- return false;
- };
- } else {
- isInstance = function(obj, base) {
- return obj instanceof base;
- };
- }
- function wrapDomMethodToForceUpgrade(obj, methodName) {
- var orig = obj[methodName];
- obj[methodName] = function() {
- var n = orig.apply(this, arguments);
- upgradeAll(n);
- return n;
- };
- }
- wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode");
- wrapDomMethodToForceUpgrade(document, "importNode");
- document.registerElement = register;
- document.createElement = createElement;
- document.createElementNS = createElementNS;
- scope.registry = registry;
- scope.instanceof = isInstance;
- scope.reservedTagList = reservedTagList;
- scope.getRegisteredDefinition = getRegisteredDefinition;
- document.register = document.registerElement;
-});
-
-(function(scope) {
- var useNative = scope.useNative;
- var initializeModules = scope.initializeModules;
- var isIE = scope.isIE;
- if (useNative) {
- var nop = function() {};
- scope.watchShadow = nop;
- scope.upgrade = nop;
- scope.upgradeAll = nop;
- scope.upgradeDocumentTree = nop;
- scope.upgradeSubtree = nop;
- scope.takeRecords = nop;
- scope.instanceof = function(obj, base) {
- return obj instanceof base;
- };
- } else {
- initializeModules();
- }
- var upgradeDocumentTree = scope.upgradeDocumentTree;
- var upgradeDocument = scope.upgradeDocument;
- if (!window.wrap) {
- if (window.ShadowDOMPolyfill) {
- window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded;
- window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded;
- } else {
- window.wrap = window.unwrap = function(node) {
- return node;
- };
- }
- }
- if (window.HTMLImports) {
- window.HTMLImports.__importsParsingHook = function(elt) {
- if (elt.import) {
- upgradeDocument(wrap(elt.import));
- }
- };
- }
- function bootstrap() {
- upgradeDocumentTree(window.wrap(document));
- window.CustomElements.ready = true;
- var requestAnimationFrame = window.requestAnimationFrame || function(f) {
- setTimeout(f, 16);
- };
- requestAnimationFrame(function() {
- setTimeout(function() {
- window.CustomElements.readyTime = Date.now();
- if (window.HTMLImports) {
- window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime;
- }
- document.dispatchEvent(new CustomEvent("WebComponentsReady", {
- bubbles: true
- }));
- });
- });
- }
- if (document.readyState === "complete" || scope.flags.eager) {
- bootstrap();
- } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) {
- bootstrap();
- } else {
- var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded";
- window.addEventListener(loadEvent, bootstrap);
- }
-})(window.CustomElements);
-
-(function(scope) {
- var style = document.createElement("style");
- style.textContent = "" + "body {" + "transition: opacity ease-in 0.2s;" + " } \n" + "body[unresolved] {" + "opacity: 0; display: block; overflow: hidden; position: relative;" + " } \n";
- var head = document.querySelector("head");
- head.insertBefore(style, head.firstChild);
-})(window.WebComponents);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/webcomponentsjs/webcomponents.js b/dashboard-ui/bower_components/webcomponentsjs/webcomponents.js
deleted file mode 100644
index f363c0e14c..0000000000
--- a/dashboard-ui/bower_components/webcomponentsjs/webcomponents.js
+++ /dev/null
@@ -1,7206 +0,0 @@
-/**
- * @license
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
-// @version 0.7.22
-(function() {
- window.WebComponents = window.WebComponents || {
- flags: {}
- };
- var file = "webcomponents.js";
- var script = document.querySelector('script[src*="' + file + '"]');
- var flags = {};
- if (!flags.noOpts) {
- location.search.slice(1).split("&").forEach(function(option) {
- var parts = option.split("=");
- var match;
- if (parts[0] && (match = parts[0].match(/wc-(.+)/))) {
- flags[match[1]] = parts[1] || true;
- }
- });
- if (script) {
- for (var i = 0, a; a = script.attributes[i]; i++) {
- if (a.name !== "src") {
- flags[a.name] = a.value || true;
- }
- }
- }
- if (flags.log && flags.log.split) {
- var parts = flags.log.split(",");
- flags.log = {};
- parts.forEach(function(f) {
- flags.log[f] = true;
- });
- } else {
- flags.log = {};
- }
- }
- flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;
- if (flags.shadow === "native") {
- flags.shadow = false;
- } else {
- flags.shadow = flags.shadow || !HTMLElement.prototype.createShadowRoot;
- }
- if (flags.register) {
- window.CustomElements = window.CustomElements || {
- flags: {}
- };
- window.CustomElements.flags.register = flags.register;
- }
- WebComponents.flags = flags;
-})();
-
-if (WebComponents.flags.shadow) {
- if (typeof WeakMap === "undefined") {
- (function() {
- var defineProperty = Object.defineProperty;
- var counter = Date.now() % 1e9;
- var WeakMap = function() {
- this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
- };
- WeakMap.prototype = {
- set: function(key, value) {
- var entry = key[this.name];
- if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
- value: [ key, value ],
- writable: true
- });
- return this;
- },
- get: function(key) {
- var entry;
- return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
- },
- "delete": function(key) {
- var entry = key[this.name];
- if (!entry || entry[0] !== key) return false;
- entry[0] = entry[1] = undefined;
- return true;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
- }
- };
- window.WeakMap = WeakMap;
- })();
- }
- window.ShadowDOMPolyfill = {};
- (function(scope) {
- "use strict";
- var constructorTable = new WeakMap();
- var nativePrototypeTable = new WeakMap();
- var wrappers = Object.create(null);
- function detectEval() {
- if (typeof chrome !== "undefined" && chrome.app && chrome.app.runtime) {
- return false;
- }
- if (navigator.getDeviceStorage) {
- return false;
- }
- try {
- var f = new Function("return true;");
- return f();
- } catch (ex) {
- return false;
- }
- }
- var hasEval = detectEval();
- function assert(b) {
- if (!b) throw new Error("Assertion failed");
- }
- var defineProperty = Object.defineProperty;
- var getOwnPropertyNames = Object.getOwnPropertyNames;
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- function mixin(to, from) {
- var names = getOwnPropertyNames(from);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- defineProperty(to, name, getOwnPropertyDescriptor(from, name));
- }
- return to;
- }
- function mixinStatics(to, from) {
- var names = getOwnPropertyNames(from);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- switch (name) {
- case "arguments":
- case "caller":
- case "length":
- case "name":
- case "prototype":
- case "toString":
- continue;
- }
- defineProperty(to, name, getOwnPropertyDescriptor(from, name));
- }
- return to;
- }
- function oneOf(object, propertyNames) {
- for (var i = 0; i < propertyNames.length; i++) {
- if (propertyNames[i] in object) return propertyNames[i];
- }
- }
- var nonEnumerableDataDescriptor = {
- value: undefined,
- configurable: true,
- enumerable: false,
- writable: true
- };
- function defineNonEnumerableDataProperty(object, name, value) {
- nonEnumerableDataDescriptor.value = value;
- defineProperty(object, name, nonEnumerableDataDescriptor);
- }
- getOwnPropertyNames(window);
- function getWrapperConstructor(node, opt_instance) {
- var nativePrototype = node.__proto__ || Object.getPrototypeOf(node);
- if (isFirefox) {
- try {
- getOwnPropertyNames(nativePrototype);
- } catch (error) {
- nativePrototype = nativePrototype.__proto__;
- }
- }
- var wrapperConstructor = constructorTable.get(nativePrototype);
- if (wrapperConstructor) return wrapperConstructor;
- var parentWrapperConstructor = getWrapperConstructor(nativePrototype);
- var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);
- registerInternal(nativePrototype, GeneratedWrapper, opt_instance);
- return GeneratedWrapper;
- }
- function addForwardingProperties(nativePrototype, wrapperPrototype) {
- installProperty(nativePrototype, wrapperPrototype, true);
- }
- function registerInstanceProperties(wrapperPrototype, instanceObject) {
- installProperty(instanceObject, wrapperPrototype, false);
- }
- var isFirefox = /Firefox/.test(navigator.userAgent);
- var dummyDescriptor = {
- get: function() {},
- set: function(v) {},
- configurable: true,
- enumerable: true
- };
- function isEventHandlerName(name) {
- return /^on[a-z]+$/.test(name);
- }
- function isIdentifierName(name) {
- return /^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(name);
- }
- function getGetter(name) {
- return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name) : function() {
- return this.__impl4cf1e782hg__[name];
- };
- }
- function getSetter(name) {
- return hasEval && isIdentifierName(name) ? new Function("v", "this.__impl4cf1e782hg__." + name + " = v") : function(v) {
- this.__impl4cf1e782hg__[name] = v;
- };
- }
- function getMethod(name) {
- return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name + ".apply(this.__impl4cf1e782hg__, arguments)") : function() {
- return this.__impl4cf1e782hg__[name].apply(this.__impl4cf1e782hg__, arguments);
- };
- }
- function getDescriptor(source, name) {
- try {
- return Object.getOwnPropertyDescriptor(source, name);
- } catch (ex) {
- return dummyDescriptor;
- }
- }
- var isBrokenSafari = function() {
- var descr = Object.getOwnPropertyDescriptor(Node.prototype, "nodeType");
- return descr && !descr.get && !descr.set;
- }();
- function installProperty(source, target, allowMethod, opt_blacklist) {
- var names = getOwnPropertyNames(source);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- if (name === "polymerBlackList_") continue;
- if (name in target) continue;
- if (source.polymerBlackList_ && source.polymerBlackList_[name]) continue;
- if (isFirefox) {
- source.__lookupGetter__(name);
- }
- var descriptor = getDescriptor(source, name);
- var getter, setter;
- if (typeof descriptor.value === "function") {
- if (allowMethod) {
- target[name] = getMethod(name);
- }
- continue;
- }
- var isEvent = isEventHandlerName(name);
- if (isEvent) getter = scope.getEventHandlerGetter(name); else getter = getGetter(name);
- if (descriptor.writable || descriptor.set || isBrokenSafari) {
- if (isEvent) setter = scope.getEventHandlerSetter(name); else setter = getSetter(name);
- }
- var configurable = isBrokenSafari || descriptor.configurable;
- defineProperty(target, name, {
- get: getter,
- set: setter,
- configurable: configurable,
- enumerable: descriptor.enumerable
- });
- }
- }
- function register(nativeConstructor, wrapperConstructor, opt_instance) {
- if (nativeConstructor == null) {
- return;
- }
- var nativePrototype = nativeConstructor.prototype;
- registerInternal(nativePrototype, wrapperConstructor, opt_instance);
- mixinStatics(wrapperConstructor, nativeConstructor);
- }
- function registerInternal(nativePrototype, wrapperConstructor, opt_instance) {
- var wrapperPrototype = wrapperConstructor.prototype;
- assert(constructorTable.get(nativePrototype) === undefined);
- constructorTable.set(nativePrototype, wrapperConstructor);
- nativePrototypeTable.set(wrapperPrototype, nativePrototype);
- addForwardingProperties(nativePrototype, wrapperPrototype);
- if (opt_instance) registerInstanceProperties(wrapperPrototype, opt_instance);
- defineNonEnumerableDataProperty(wrapperPrototype, "constructor", wrapperConstructor);
- wrapperConstructor.prototype = wrapperPrototype;
- }
- function isWrapperFor(wrapperConstructor, nativeConstructor) {
- return constructorTable.get(nativeConstructor.prototype) === wrapperConstructor;
- }
- function registerObject(object) {
- var nativePrototype = Object.getPrototypeOf(object);
- var superWrapperConstructor = getWrapperConstructor(nativePrototype);
- var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);
- registerInternal(nativePrototype, GeneratedWrapper, object);
- return GeneratedWrapper;
- }
- function createWrapperConstructor(superWrapperConstructor) {
- function GeneratedWrapper(node) {
- superWrapperConstructor.call(this, node);
- }
- var p = Object.create(superWrapperConstructor.prototype);
- p.constructor = GeneratedWrapper;
- GeneratedWrapper.prototype = p;
- return GeneratedWrapper;
- }
- function isWrapper(object) {
- return object && object.__impl4cf1e782hg__;
- }
- function isNative(object) {
- return !isWrapper(object);
- }
- function wrap(impl) {
- if (impl === null) return null;
- assert(isNative(impl));
- var wrapper = impl.__wrapper8e3dd93a60__;
- if (wrapper != null) {
- return wrapper;
- }
- return impl.__wrapper8e3dd93a60__ = new (getWrapperConstructor(impl, impl))(impl);
- }
- function unwrap(wrapper) {
- if (wrapper === null) return null;
- assert(isWrapper(wrapper));
- return wrapper.__impl4cf1e782hg__;
- }
- function unsafeUnwrap(wrapper) {
- return wrapper.__impl4cf1e782hg__;
- }
- function setWrapper(impl, wrapper) {
- wrapper.__impl4cf1e782hg__ = impl;
- impl.__wrapper8e3dd93a60__ = wrapper;
- }
- function unwrapIfNeeded(object) {
- return object && isWrapper(object) ? unwrap(object) : object;
- }
- function wrapIfNeeded(object) {
- return object && !isWrapper(object) ? wrap(object) : object;
- }
- function rewrap(node, wrapper) {
- if (wrapper === null) return;
- assert(isNative(node));
- assert(wrapper === undefined || isWrapper(wrapper));
- node.__wrapper8e3dd93a60__ = wrapper;
- }
- var getterDescriptor = {
- get: undefined,
- configurable: true,
- enumerable: true
- };
- function defineGetter(constructor, name, getter) {
- getterDescriptor.get = getter;
- defineProperty(constructor.prototype, name, getterDescriptor);
- }
- function defineWrapGetter(constructor, name) {
- defineGetter(constructor, name, function() {
- return wrap(this.__impl4cf1e782hg__[name]);
- });
- }
- function forwardMethodsToWrapper(constructors, names) {
- constructors.forEach(function(constructor) {
- names.forEach(function(name) {
- constructor.prototype[name] = function() {
- var w = wrapIfNeeded(this);
- return w[name].apply(w, arguments);
- };
- });
- });
- }
- scope.addForwardingProperties = addForwardingProperties;
- scope.assert = assert;
- scope.constructorTable = constructorTable;
- scope.defineGetter = defineGetter;
- scope.defineWrapGetter = defineWrapGetter;
- scope.forwardMethodsToWrapper = forwardMethodsToWrapper;
- scope.isIdentifierName = isIdentifierName;
- scope.isWrapper = isWrapper;
- scope.isWrapperFor = isWrapperFor;
- scope.mixin = mixin;
- scope.nativePrototypeTable = nativePrototypeTable;
- scope.oneOf = oneOf;
- scope.registerObject = registerObject;
- scope.registerWrapper = register;
- scope.rewrap = rewrap;
- scope.setWrapper = setWrapper;
- scope.unsafeUnwrap = unsafeUnwrap;
- scope.unwrap = unwrap;
- scope.unwrapIfNeeded = unwrapIfNeeded;
- scope.wrap = wrap;
- scope.wrapIfNeeded = wrapIfNeeded;
- scope.wrappers = wrappers;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- function newSplice(index, removed, addedCount) {
- return {
- index: index,
- removed: removed,
- addedCount: addedCount
- };
- }
- var EDIT_LEAVE = 0;
- var EDIT_UPDATE = 1;
- var EDIT_ADD = 2;
- var EDIT_DELETE = 3;
- function ArraySplice() {}
- ArraySplice.prototype = {
- calcEditDistances: function(current, currentStart, currentEnd, old, oldStart, oldEnd) {
- var rowCount = oldEnd - oldStart + 1;
- var columnCount = currentEnd - currentStart + 1;
- var distances = new Array(rowCount);
- for (var i = 0; i < rowCount; i++) {
- distances[i] = new Array(columnCount);
- distances[i][0] = i;
- }
- for (var j = 0; j < columnCount; j++) distances[0][j] = j;
- for (var i = 1; i < rowCount; i++) {
- for (var j = 1; j < columnCount; j++) {
- if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1])) distances[i][j] = distances[i - 1][j - 1]; else {
- var north = distances[i - 1][j] + 1;
- var west = distances[i][j - 1] + 1;
- distances[i][j] = north < west ? north : west;
- }
- }
- }
- return distances;
- },
- spliceOperationsFromEditDistances: function(distances) {
- var i = distances.length - 1;
- var j = distances[0].length - 1;
- var current = distances[i][j];
- var edits = [];
- while (i > 0 || j > 0) {
- if (i == 0) {
- edits.push(EDIT_ADD);
- j--;
- continue;
- }
- if (j == 0) {
- edits.push(EDIT_DELETE);
- i--;
- continue;
- }
- var northWest = distances[i - 1][j - 1];
- var west = distances[i - 1][j];
- var north = distances[i][j - 1];
- var min;
- if (west < north) min = west < northWest ? west : northWest; else min = north < northWest ? north : northWest;
- if (min == northWest) {
- if (northWest == current) {
- edits.push(EDIT_LEAVE);
- } else {
- edits.push(EDIT_UPDATE);
- current = northWest;
- }
- i--;
- j--;
- } else if (min == west) {
- edits.push(EDIT_DELETE);
- i--;
- current = west;
- } else {
- edits.push(EDIT_ADD);
- j--;
- current = north;
- }
- }
- edits.reverse();
- return edits;
- },
- calcSplices: function(current, currentStart, currentEnd, old, oldStart, oldEnd) {
- var prefixCount = 0;
- var suffixCount = 0;
- var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
- if (currentStart == 0 && oldStart == 0) prefixCount = this.sharedPrefix(current, old, minLength);
- if (currentEnd == current.length && oldEnd == old.length) suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);
- currentStart += prefixCount;
- oldStart += prefixCount;
- currentEnd -= suffixCount;
- oldEnd -= suffixCount;
- if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0) return [];
- if (currentStart == currentEnd) {
- var splice = newSplice(currentStart, [], 0);
- while (oldStart < oldEnd) splice.removed.push(old[oldStart++]);
- return [ splice ];
- } else if (oldStart == oldEnd) return [ newSplice(currentStart, [], currentEnd - currentStart) ];
- var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));
- var splice = undefined;
- var splices = [];
- var index = currentStart;
- var oldIndex = oldStart;
- for (var i = 0; i < ops.length; i++) {
- switch (ops[i]) {
- case EDIT_LEAVE:
- if (splice) {
- splices.push(splice);
- splice = undefined;
- }
- index++;
- oldIndex++;
- break;
-
- case EDIT_UPDATE:
- if (!splice) splice = newSplice(index, [], 0);
- splice.addedCount++;
- index++;
- splice.removed.push(old[oldIndex]);
- oldIndex++;
- break;
-
- case EDIT_ADD:
- if (!splice) splice = newSplice(index, [], 0);
- splice.addedCount++;
- index++;
- break;
-
- case EDIT_DELETE:
- if (!splice) splice = newSplice(index, [], 0);
- splice.removed.push(old[oldIndex]);
- oldIndex++;
- break;
- }
- }
- if (splice) {
- splices.push(splice);
- }
- return splices;
- },
- sharedPrefix: function(current, old, searchLength) {
- for (var i = 0; i < searchLength; i++) if (!this.equals(current[i], old[i])) return i;
- return searchLength;
- },
- sharedSuffix: function(current, old, searchLength) {
- var index1 = current.length;
- var index2 = old.length;
- var count = 0;
- while (count < searchLength && this.equals(current[--index1], old[--index2])) count++;
- return count;
- },
- calculateSplices: function(current, previous) {
- return this.calcSplices(current, 0, current.length, previous, 0, previous.length);
- },
- equals: function(currentValue, previousValue) {
- return currentValue === previousValue;
- }
- };
- scope.ArraySplice = ArraySplice;
- })(window.ShadowDOMPolyfill);
- (function(context) {
- "use strict";
- var OriginalMutationObserver = window.MutationObserver;
- var callbacks = [];
- var pending = false;
- var timerFunc;
- function handle() {
- pending = false;
- var copies = callbacks.slice(0);
- callbacks = [];
- for (var i = 0; i < copies.length; i++) {
- (0, copies[i])();
- }
- }
- if (OriginalMutationObserver) {
- var counter = 1;
- var observer = new OriginalMutationObserver(handle);
- var textNode = document.createTextNode(counter);
- observer.observe(textNode, {
- characterData: true
- });
- timerFunc = function() {
- counter = (counter + 1) % 2;
- textNode.data = counter;
- };
- } else {
- timerFunc = window.setTimeout;
- }
- function setEndOfMicrotask(func) {
- callbacks.push(func);
- if (pending) return;
- pending = true;
- timerFunc(handle, 0);
- }
- context.setEndOfMicrotask = setEndOfMicrotask;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var setEndOfMicrotask = scope.setEndOfMicrotask;
- var wrapIfNeeded = scope.wrapIfNeeded;
- var wrappers = scope.wrappers;
- var registrationsTable = new WeakMap();
- var globalMutationObservers = [];
- var isScheduled = false;
- function scheduleCallback(observer) {
- if (observer.scheduled_) return;
- observer.scheduled_ = true;
- globalMutationObservers.push(observer);
- if (isScheduled) return;
- setEndOfMicrotask(notifyObservers);
- isScheduled = true;
- }
- function notifyObservers() {
- isScheduled = false;
- while (globalMutationObservers.length) {
- var notifyList = globalMutationObservers;
- globalMutationObservers = [];
- notifyList.sort(function(x, y) {
- return x.uid_ - y.uid_;
- });
- for (var i = 0; i < notifyList.length; i++) {
- var mo = notifyList[i];
- mo.scheduled_ = false;
- var queue = mo.takeRecords();
- removeTransientObserversFor(mo);
- if (queue.length) {
- mo.callback_(queue, mo);
- }
- }
- }
- }
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = new wrappers.NodeList();
- this.removedNodes = new wrappers.NodeList();
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function registerTransientObservers(ancestor, node) {
- for (;ancestor; ancestor = ancestor.parentNode) {
- var registrations = registrationsTable.get(ancestor);
- if (!registrations) continue;
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.options.subtree) registration.addTransientObserver(node);
- }
- }
- }
- function removeTransientObserversFor(observer) {
- for (var i = 0; i < observer.nodes_.length; i++) {
- var node = observer.nodes_[i];
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- if (registration.observer === observer) registration.removeTransientObservers();
- }
- }
- }
- function enqueueMutation(target, type, data) {
- var interestedObservers = Object.create(null);
- var associatedStrings = Object.create(null);
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (!registrations) continue;
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- if (type === "attributes" && !options.attributes) continue;
- if (type === "attributes" && options.attributeFilter && (data.namespace !== null || options.attributeFilter.indexOf(data.name) === -1)) {
- continue;
- }
- if (type === "characterData" && !options.characterData) continue;
- if (type === "childList" && !options.childList) continue;
- var observer = registration.observer;
- interestedObservers[observer.uid_] = observer;
- if (type === "attributes" && options.attributeOldValue || type === "characterData" && options.characterDataOldValue) {
- associatedStrings[observer.uid_] = data.oldValue;
- }
- }
- }
- for (var uid in interestedObservers) {
- var observer = interestedObservers[uid];
- var record = new MutationRecord(type, target);
- if ("name" in data && "namespace" in data) {
- record.attributeName = data.name;
- record.attributeNamespace = data.namespace;
- }
- if (data.addedNodes) record.addedNodes = data.addedNodes;
- if (data.removedNodes) record.removedNodes = data.removedNodes;
- if (data.previousSibling) record.previousSibling = data.previousSibling;
- if (data.nextSibling) record.nextSibling = data.nextSibling;
- if (associatedStrings[uid] !== undefined) record.oldValue = associatedStrings[uid];
- scheduleCallback(observer);
- observer.records_.push(record);
- }
- }
- var slice = Array.prototype.slice;
- function MutationObserverOptions(options) {
- this.childList = !!options.childList;
- this.subtree = !!options.subtree;
- if (!("attributes" in options) && ("attributeOldValue" in options || "attributeFilter" in options)) {
- this.attributes = true;
- } else {
- this.attributes = !!options.attributes;
- }
- if ("characterDataOldValue" in options && !("characterData" in options)) this.characterData = true; else this.characterData = !!options.characterData;
- if (!this.attributes && (options.attributeOldValue || "attributeFilter" in options) || !this.characterData && options.characterDataOldValue) {
- throw new TypeError();
- }
- this.characterData = !!options.characterData;
- this.attributeOldValue = !!options.attributeOldValue;
- this.characterDataOldValue = !!options.characterDataOldValue;
- if ("attributeFilter" in options) {
- if (options.attributeFilter == null || typeof options.attributeFilter !== "object") {
- throw new TypeError();
- }
- this.attributeFilter = slice.call(options.attributeFilter);
- } else {
- this.attributeFilter = null;
- }
- }
- var uidCounter = 0;
- function MutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- this.scheduled_ = false;
- }
- MutationObserver.prototype = {
- constructor: MutationObserver,
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- var newOptions = new MutationObserverOptions(options);
- var registration;
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeTransientObservers();
- registration.options = newOptions;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, newOptions);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- addTransientObserver: function(node) {
- if (node === this.target) return;
- scheduleCallback(this.observer);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- for (var i = 0; i < transientObservedNodes.length; i++) {
- var node = transientObservedNodes[i];
- var registrations = registrationsTable.get(node);
- for (var j = 0; j < registrations.length; j++) {
- if (registrations[j] === this) {
- registrations.splice(j, 1);
- break;
- }
- }
- }
- }
- };
- scope.enqueueMutation = enqueueMutation;
- scope.registerTransientObservers = registerTransientObservers;
- scope.wrappers.MutationObserver = MutationObserver;
- scope.wrappers.MutationRecord = MutationRecord;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- function TreeScope(root, parent) {
- this.root = root;
- this.parent = parent;
- }
- TreeScope.prototype = {
- get renderer() {
- if (this.root instanceof scope.wrappers.ShadowRoot) {
- return scope.getRendererForHost(this.root.host);
- }
- return null;
- },
- contains: function(treeScope) {
- for (;treeScope; treeScope = treeScope.parent) {
- if (treeScope === this) return true;
- }
- return false;
- }
- };
- function setTreeScope(node, treeScope) {
- if (node.treeScope_ !== treeScope) {
- node.treeScope_ = treeScope;
- for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {
- sr.treeScope_.parent = treeScope;
- }
- for (var child = node.firstChild; child; child = child.nextSibling) {
- setTreeScope(child, treeScope);
- }
- }
- }
- function getTreeScope(node) {
- if (node instanceof scope.wrappers.Window) {
- debugger;
- }
- if (node.treeScope_) return node.treeScope_;
- var parent = node.parentNode;
- var treeScope;
- if (parent) treeScope = getTreeScope(parent); else treeScope = new TreeScope(node, null);
- return node.treeScope_ = treeScope;
- }
- scope.TreeScope = TreeScope;
- scope.getTreeScope = getTreeScope;
- scope.setTreeScope = setTreeScope;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
- var getTreeScope = scope.getTreeScope;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrappers = scope.wrappers;
- var wrappedFuns = new WeakMap();
- var listenersTable = new WeakMap();
- var handledEventsTable = new WeakMap();
- var currentlyDispatchingEvents = new WeakMap();
- var targetTable = new WeakMap();
- var currentTargetTable = new WeakMap();
- var relatedTargetTable = new WeakMap();
- var eventPhaseTable = new WeakMap();
- var stopPropagationTable = new WeakMap();
- var stopImmediatePropagationTable = new WeakMap();
- var eventHandlersTable = new WeakMap();
- var eventPathTable = new WeakMap();
- function isShadowRoot(node) {
- return node instanceof wrappers.ShadowRoot;
- }
- function rootOfNode(node) {
- return getTreeScope(node).root;
- }
- function getEventPath(node, event) {
- var path = [];
- var current = node;
- path.push(current);
- while (current) {
- var destinationInsertionPoints = getDestinationInsertionPoints(current);
- if (destinationInsertionPoints && destinationInsertionPoints.length > 0) {
- for (var i = 0; i < destinationInsertionPoints.length; i++) {
- var insertionPoint = destinationInsertionPoints[i];
- if (isShadowInsertionPoint(insertionPoint)) {
- var shadowRoot = rootOfNode(insertionPoint);
- var olderShadowRoot = shadowRoot.olderShadowRoot;
- if (olderShadowRoot) path.push(olderShadowRoot);
- }
- path.push(insertionPoint);
- }
- current = destinationInsertionPoints[destinationInsertionPoints.length - 1];
- } else {
- if (isShadowRoot(current)) {
- if (inSameTree(node, current) && eventMustBeStopped(event)) {
- break;
- }
- current = current.host;
- path.push(current);
- } else {
- current = current.parentNode;
- if (current) path.push(current);
- }
- }
- }
- return path;
- }
- function eventMustBeStopped(event) {
- if (!event) return false;
- switch (event.type) {
- case "abort":
- case "error":
- case "select":
- case "change":
- case "load":
- case "reset":
- case "resize":
- case "scroll":
- case "selectstart":
- return true;
- }
- return false;
- }
- function isShadowInsertionPoint(node) {
- return node instanceof HTMLShadowElement;
- }
- function getDestinationInsertionPoints(node) {
- return scope.getDestinationInsertionPoints(node);
- }
- function eventRetargetting(path, currentTarget) {
- if (path.length === 0) return currentTarget;
- if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document;
- var currentTargetTree = getTreeScope(currentTarget);
- var originalTarget = path[0];
- var originalTargetTree = getTreeScope(originalTarget);
- var relativeTargetTree = lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);
- for (var i = 0; i < path.length; i++) {
- var node = path[i];
- if (getTreeScope(node) === relativeTargetTree) return node;
- }
- return path[path.length - 1];
- }
- function getTreeScopeAncestors(treeScope) {
- var ancestors = [];
- for (;treeScope; treeScope = treeScope.parent) {
- ancestors.push(treeScope);
- }
- return ancestors;
- }
- function lowestCommonInclusiveAncestor(tsA, tsB) {
- var ancestorsA = getTreeScopeAncestors(tsA);
- var ancestorsB = getTreeScopeAncestors(tsB);
- var result = null;
- while (ancestorsA.length > 0 && ancestorsB.length > 0) {
- var a = ancestorsA.pop();
- var b = ancestorsB.pop();
- if (a === b) result = a; else break;
- }
- return result;
- }
- function getTreeScopeRoot(ts) {
- if (!ts.parent) return ts;
- return getTreeScopeRoot(ts.parent);
- }
- function relatedTargetResolution(event, currentTarget, relatedTarget) {
- if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document;
- var currentTargetTree = getTreeScope(currentTarget);
- var relatedTargetTree = getTreeScope(relatedTarget);
- var relatedTargetEventPath = getEventPath(relatedTarget, event);
- var lowestCommonAncestorTree;
- var lowestCommonAncestorTree = lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree);
- if (!lowestCommonAncestorTree) lowestCommonAncestorTree = relatedTargetTree.root;
- for (var commonAncestorTree = lowestCommonAncestorTree; commonAncestorTree; commonAncestorTree = commonAncestorTree.parent) {
- var adjustedRelatedTarget;
- for (var i = 0; i < relatedTargetEventPath.length; i++) {
- var node = relatedTargetEventPath[i];
- if (getTreeScope(node) === commonAncestorTree) return node;
- }
- }
- return null;
- }
- function inSameTree(a, b) {
- return getTreeScope(a) === getTreeScope(b);
- }
- var NONE = 0;
- var CAPTURING_PHASE = 1;
- var AT_TARGET = 2;
- var BUBBLING_PHASE = 3;
- var pendingError;
- function dispatchOriginalEvent(originalEvent) {
- if (handledEventsTable.get(originalEvent)) return;
- handledEventsTable.set(originalEvent, true);
- dispatchEvent(wrap(originalEvent), wrap(originalEvent.target));
- if (pendingError) {
- var err = pendingError;
- pendingError = null;
- throw err;
- }
- }
- function isLoadLikeEvent(event) {
- switch (event.type) {
- case "load":
- case "beforeunload":
- case "unload":
- return true;
- }
- return false;
- }
- function dispatchEvent(event, originalWrapperTarget) {
- if (currentlyDispatchingEvents.get(event)) throw new Error("InvalidStateError");
- currentlyDispatchingEvents.set(event, true);
- scope.renderAllPending();
- var eventPath;
- var overrideTarget;
- var win;
- if (isLoadLikeEvent(event) && !event.bubbles) {
- var doc = originalWrapperTarget;
- if (doc instanceof wrappers.Document && (win = doc.defaultView)) {
- overrideTarget = doc;
- eventPath = [];
- }
- }
- if (!eventPath) {
- if (originalWrapperTarget instanceof wrappers.Window) {
- win = originalWrapperTarget;
- eventPath = [];
- } else {
- eventPath = getEventPath(originalWrapperTarget, event);
- if (!isLoadLikeEvent(event)) {
- var doc = eventPath[eventPath.length - 1];
- if (doc instanceof wrappers.Document) win = doc.defaultView;
- }
- }
- }
- eventPathTable.set(event, eventPath);
- if (dispatchCapturing(event, eventPath, win, overrideTarget)) {
- if (dispatchAtTarget(event, eventPath, win, overrideTarget)) {
- dispatchBubbling(event, eventPath, win, overrideTarget);
- }
- }
- eventPhaseTable.set(event, NONE);
- currentTargetTable.delete(event, null);
- currentlyDispatchingEvents.delete(event);
- return event.defaultPrevented;
- }
- function dispatchCapturing(event, eventPath, win, overrideTarget) {
- var phase = CAPTURING_PHASE;
- if (win) {
- if (!invoke(win, event, phase, eventPath, overrideTarget)) return false;
- }
- for (var i = eventPath.length - 1; i > 0; i--) {
- if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return false;
- }
- return true;
- }
- function dispatchAtTarget(event, eventPath, win, overrideTarget) {
- var phase = AT_TARGET;
- var currentTarget = eventPath[0] || win;
- return invoke(currentTarget, event, phase, eventPath, overrideTarget);
- }
- function dispatchBubbling(event, eventPath, win, overrideTarget) {
- var phase = BUBBLING_PHASE;
- for (var i = 1; i < eventPath.length; i++) {
- if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return;
- }
- if (win && eventPath.length > 0) {
- invoke(win, event, phase, eventPath, overrideTarget);
- }
- }
- function invoke(currentTarget, event, phase, eventPath, overrideTarget) {
- var listeners = listenersTable.get(currentTarget);
- if (!listeners) return true;
- var target = overrideTarget || eventRetargetting(eventPath, currentTarget);
- if (target === currentTarget) {
- if (phase === CAPTURING_PHASE) return true;
- if (phase === BUBBLING_PHASE) phase = AT_TARGET;
- } else if (phase === BUBBLING_PHASE && !event.bubbles) {
- return true;
- }
- if ("relatedTarget" in event) {
- var originalEvent = unwrap(event);
- var unwrappedRelatedTarget = originalEvent.relatedTarget;
- if (unwrappedRelatedTarget) {
- if (unwrappedRelatedTarget instanceof Object && unwrappedRelatedTarget.addEventListener) {
- var relatedTarget = wrap(unwrappedRelatedTarget);
- var adjusted = relatedTargetResolution(event, currentTarget, relatedTarget);
- if (adjusted === target) return true;
- } else {
- adjusted = null;
- }
- relatedTargetTable.set(event, adjusted);
- }
- }
- eventPhaseTable.set(event, phase);
- var type = event.type;
- var anyRemoved = false;
- targetTable.set(event, target);
- currentTargetTable.set(event, currentTarget);
- listeners.depth++;
- for (var i = 0, len = listeners.length; i < len; i++) {
- var listener = listeners[i];
- if (listener.removed) {
- anyRemoved = true;
- continue;
- }
- if (listener.type !== type || !listener.capture && phase === CAPTURING_PHASE || listener.capture && phase === BUBBLING_PHASE) {
- continue;
- }
- try {
- if (typeof listener.handler === "function") listener.handler.call(currentTarget, event); else listener.handler.handleEvent(event);
- if (stopImmediatePropagationTable.get(event)) return false;
- } catch (ex) {
- if (!pendingError) pendingError = ex;
- }
- }
- listeners.depth--;
- if (anyRemoved && listeners.depth === 0) {
- var copy = listeners.slice();
- listeners.length = 0;
- for (var i = 0; i < copy.length; i++) {
- if (!copy[i].removed) listeners.push(copy[i]);
- }
- }
- return !stopPropagationTable.get(event);
- }
- function Listener(type, handler, capture) {
- this.type = type;
- this.handler = handler;
- this.capture = Boolean(capture);
- }
- Listener.prototype = {
- equals: function(that) {
- return this.handler === that.handler && this.type === that.type && this.capture === that.capture;
- },
- get removed() {
- return this.handler === null;
- },
- remove: function() {
- this.handler = null;
- }
- };
- var OriginalEvent = window.Event;
- OriginalEvent.prototype.polymerBlackList_ = {
- returnValue: true,
- keyLocation: true
- };
- function Event(type, options) {
- if (type instanceof OriginalEvent) {
- var impl = type;
- if (!OriginalBeforeUnloadEvent && impl.type === "beforeunload" && !(this instanceof BeforeUnloadEvent)) {
- return new BeforeUnloadEvent(impl);
- }
- setWrapper(impl, this);
- } else {
- return wrap(constructEvent(OriginalEvent, "Event", type, options));
- }
- }
- Event.prototype = {
- get target() {
- return targetTable.get(this);
- },
- get currentTarget() {
- return currentTargetTable.get(this);
- },
- get eventPhase() {
- return eventPhaseTable.get(this);
- },
- get path() {
- var eventPath = eventPathTable.get(this);
- if (!eventPath) return [];
- return eventPath.slice();
- },
- stopPropagation: function() {
- stopPropagationTable.set(this, true);
- },
- stopImmediatePropagation: function() {
- stopPropagationTable.set(this, true);
- stopImmediatePropagationTable.set(this, true);
- }
- };
- var supportsDefaultPrevented = function() {
- var e = document.createEvent("Event");
- e.initEvent("test", true, true);
- e.preventDefault();
- return e.defaultPrevented;
- }();
- if (!supportsDefaultPrevented) {
- Event.prototype.preventDefault = function() {
- if (!this.cancelable) return;
- unsafeUnwrap(this).preventDefault();
- Object.defineProperty(this, "defaultPrevented", {
- get: function() {
- return true;
- },
- configurable: true
- });
- };
- }
- registerWrapper(OriginalEvent, Event, document.createEvent("Event"));
- function unwrapOptions(options) {
- if (!options || !options.relatedTarget) return options;
- return Object.create(options, {
- relatedTarget: {
- value: unwrap(options.relatedTarget)
- }
- });
- }
- function registerGenericEvent(name, SuperEvent, prototype) {
- var OriginalEvent = window[name];
- var GenericEvent = function(type, options) {
- if (type instanceof OriginalEvent) setWrapper(type, this); else return wrap(constructEvent(OriginalEvent, name, type, options));
- };
- GenericEvent.prototype = Object.create(SuperEvent.prototype);
- if (prototype) mixin(GenericEvent.prototype, prototype);
- if (OriginalEvent) {
- try {
- registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent("temp"));
- } catch (ex) {
- registerWrapper(OriginalEvent, GenericEvent, document.createEvent(name));
- }
- }
- return GenericEvent;
- }
- var UIEvent = registerGenericEvent("UIEvent", Event);
- var CustomEvent = registerGenericEvent("CustomEvent", Event);
- var relatedTargetProto = {
- get relatedTarget() {
- var relatedTarget = relatedTargetTable.get(this);
- if (relatedTarget !== undefined) return relatedTarget;
- return wrap(unwrap(this).relatedTarget);
- }
- };
- function getInitFunction(name, relatedTargetIndex) {
- return function() {
- arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);
- var impl = unwrap(this);
- impl[name].apply(impl, arguments);
- };
- }
- var mouseEventProto = mixin({
- initMouseEvent: getInitFunction("initMouseEvent", 14)
- }, relatedTargetProto);
- var focusEventProto = mixin({
- initFocusEvent: getInitFunction("initFocusEvent", 5)
- }, relatedTargetProto);
- var MouseEvent = registerGenericEvent("MouseEvent", UIEvent, mouseEventProto);
- var FocusEvent = registerGenericEvent("FocusEvent", UIEvent, focusEventProto);
- var defaultInitDicts = Object.create(null);
- var supportsEventConstructors = function() {
- try {
- new window.FocusEvent("focus");
- } catch (ex) {
- return false;
- }
- return true;
- }();
- function constructEvent(OriginalEvent, name, type, options) {
- if (supportsEventConstructors) return new OriginalEvent(type, unwrapOptions(options));
- var event = unwrap(document.createEvent(name));
- var defaultDict = defaultInitDicts[name];
- var args = [ type ];
- Object.keys(defaultDict).forEach(function(key) {
- var v = options != null && key in options ? options[key] : defaultDict[key];
- if (key === "relatedTarget") v = unwrap(v);
- args.push(v);
- });
- event["init" + name].apply(event, args);
- return event;
- }
- if (!supportsEventConstructors) {
- var configureEventConstructor = function(name, initDict, superName) {
- if (superName) {
- var superDict = defaultInitDicts[superName];
- initDict = mixin(mixin({}, superDict), initDict);
- }
- defaultInitDicts[name] = initDict;
- };
- configureEventConstructor("Event", {
- bubbles: false,
- cancelable: false
- });
- configureEventConstructor("CustomEvent", {
- detail: null
- }, "Event");
- configureEventConstructor("UIEvent", {
- view: null,
- detail: 0
- }, "Event");
- configureEventConstructor("MouseEvent", {
- screenX: 0,
- screenY: 0,
- clientX: 0,
- clientY: 0,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- button: 0,
- relatedTarget: null
- }, "UIEvent");
- configureEventConstructor("FocusEvent", {
- relatedTarget: null
- }, "UIEvent");
- }
- var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;
- function BeforeUnloadEvent(impl) {
- Event.call(this, impl);
- }
- BeforeUnloadEvent.prototype = Object.create(Event.prototype);
- mixin(BeforeUnloadEvent.prototype, {
- get returnValue() {
- return unsafeUnwrap(this).returnValue;
- },
- set returnValue(v) {
- unsafeUnwrap(this).returnValue = v;
- }
- });
- if (OriginalBeforeUnloadEvent) registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);
- function isValidListener(fun) {
- if (typeof fun === "function") return true;
- return fun && fun.handleEvent;
- }
- function isMutationEvent(type) {
- switch (type) {
- case "DOMAttrModified":
- case "DOMAttributeNameChanged":
- case "DOMCharacterDataModified":
- case "DOMElementNameChanged":
- case "DOMNodeInserted":
- case "DOMNodeInsertedIntoDocument":
- case "DOMNodeRemoved":
- case "DOMNodeRemovedFromDocument":
- case "DOMSubtreeModified":
- return true;
- }
- return false;
- }
- var OriginalEventTarget = window.EventTarget;
- function EventTarget(impl) {
- setWrapper(impl, this);
- }
- var methodNames = [ "addEventListener", "removeEventListener", "dispatchEvent" ];
- [ Node, Window ].forEach(function(constructor) {
- var p = constructor.prototype;
- methodNames.forEach(function(name) {
- Object.defineProperty(p, name + "_", {
- value: p[name]
- });
- });
- });
- function getTargetToListenAt(wrapper) {
- if (wrapper instanceof wrappers.ShadowRoot) wrapper = wrapper.host;
- return unwrap(wrapper);
- }
- EventTarget.prototype = {
- addEventListener: function(type, fun, capture) {
- if (!isValidListener(fun) || isMutationEvent(type)) return;
- var listener = new Listener(type, fun, capture);
- var listeners = listenersTable.get(this);
- if (!listeners) {
- listeners = [];
- listeners.depth = 0;
- listenersTable.set(this, listeners);
- } else {
- for (var i = 0; i < listeners.length; i++) {
- if (listener.equals(listeners[i])) return;
- }
- }
- listeners.push(listener);
- var target = getTargetToListenAt(this);
- target.addEventListener_(type, dispatchOriginalEvent, true);
- },
- removeEventListener: function(type, fun, capture) {
- capture = Boolean(capture);
- var listeners = listenersTable.get(this);
- if (!listeners) return;
- var count = 0, found = false;
- for (var i = 0; i < listeners.length; i++) {
- if (listeners[i].type === type && listeners[i].capture === capture) {
- count++;
- if (listeners[i].handler === fun) {
- found = true;
- listeners[i].remove();
- }
- }
- }
- if (found && count === 1) {
- var target = getTargetToListenAt(this);
- target.removeEventListener_(type, dispatchOriginalEvent, true);
- }
- },
- dispatchEvent: function(event) {
- var nativeEvent = unwrap(event);
- var eventType = nativeEvent.type;
- handledEventsTable.set(nativeEvent, false);
- scope.renderAllPending();
- var tempListener;
- if (!hasListenerInAncestors(this, eventType)) {
- tempListener = function() {};
- this.addEventListener(eventType, tempListener, true);
- }
- try {
- return unwrap(this).dispatchEvent_(nativeEvent);
- } finally {
- if (tempListener) this.removeEventListener(eventType, tempListener, true);
- }
- }
- };
- function hasListener(node, type) {
- var listeners = listenersTable.get(node);
- if (listeners) {
- for (var i = 0; i < listeners.length; i++) {
- if (!listeners[i].removed && listeners[i].type === type) return true;
- }
- }
- return false;
- }
- function hasListenerInAncestors(target, type) {
- for (var node = unwrap(target); node; node = node.parentNode) {
- if (hasListener(wrap(node), type)) return true;
- }
- return false;
- }
- if (OriginalEventTarget) registerWrapper(OriginalEventTarget, EventTarget);
- function wrapEventTargetMethods(constructors) {
- forwardMethodsToWrapper(constructors, methodNames);
- }
- var originalElementFromPoint = document.elementFromPoint;
- function elementFromPoint(self, document, x, y) {
- scope.renderAllPending();
- var element = wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));
- if (!element) return null;
- var path = getEventPath(element, null);
- var idx = path.lastIndexOf(self);
- if (idx == -1) return null; else path = path.slice(0, idx);
- return eventRetargetting(path, self);
- }
- function getEventHandlerGetter(name) {
- return function() {
- var inlineEventHandlers = eventHandlersTable.get(this);
- return inlineEventHandlers && inlineEventHandlers[name] && inlineEventHandlers[name].value || null;
- };
- }
- function getEventHandlerSetter(name) {
- var eventType = name.slice(2);
- return function(value) {
- var inlineEventHandlers = eventHandlersTable.get(this);
- if (!inlineEventHandlers) {
- inlineEventHandlers = Object.create(null);
- eventHandlersTable.set(this, inlineEventHandlers);
- }
- var old = inlineEventHandlers[name];
- if (old) this.removeEventListener(eventType, old.wrapped, false);
- if (typeof value === "function") {
- var wrapped = function(e) {
- var rv = value.call(this, e);
- if (rv === false) e.preventDefault(); else if (name === "onbeforeunload" && typeof rv === "string") e.returnValue = rv;
- };
- this.addEventListener(eventType, wrapped, false);
- inlineEventHandlers[name] = {
- value: value,
- wrapped: wrapped
- };
- }
- };
- }
- scope.elementFromPoint = elementFromPoint;
- scope.getEventHandlerGetter = getEventHandlerGetter;
- scope.getEventHandlerSetter = getEventHandlerSetter;
- scope.wrapEventTargetMethods = wrapEventTargetMethods;
- scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;
- scope.wrappers.CustomEvent = CustomEvent;
- scope.wrappers.Event = Event;
- scope.wrappers.EventTarget = EventTarget;
- scope.wrappers.FocusEvent = FocusEvent;
- scope.wrappers.MouseEvent = MouseEvent;
- scope.wrappers.UIEvent = UIEvent;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var UIEvent = scope.wrappers.UIEvent;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var OriginalTouchEvent = window.TouchEvent;
- if (!OriginalTouchEvent) return;
- var nativeEvent;
- try {
- nativeEvent = document.createEvent("TouchEvent");
- } catch (ex) {
- return;
- }
- var nonEnumDescriptor = {
- enumerable: false
- };
- function nonEnum(obj, prop) {
- Object.defineProperty(obj, prop, nonEnumDescriptor);
- }
- function Touch(impl) {
- setWrapper(impl, this);
- }
- Touch.prototype = {
- get target() {
- return wrap(unsafeUnwrap(this).target);
- }
- };
- var descr = {
- configurable: true,
- enumerable: true,
- get: null
- };
- [ "clientX", "clientY", "screenX", "screenY", "pageX", "pageY", "identifier", "webkitRadiusX", "webkitRadiusY", "webkitRotationAngle", "webkitForce" ].forEach(function(name) {
- descr.get = function() {
- return unsafeUnwrap(this)[name];
- };
- Object.defineProperty(Touch.prototype, name, descr);
- });
- function TouchList() {
- this.length = 0;
- nonEnum(this, "length");
- }
- TouchList.prototype = {
- item: function(index) {
- return this[index];
- }
- };
- function wrapTouchList(nativeTouchList) {
- var list = new TouchList();
- for (var i = 0; i < nativeTouchList.length; i++) {
- list[i] = new Touch(nativeTouchList[i]);
- }
- list.length = i;
- return list;
- }
- function TouchEvent(impl) {
- UIEvent.call(this, impl);
- }
- TouchEvent.prototype = Object.create(UIEvent.prototype);
- mixin(TouchEvent.prototype, {
- get touches() {
- return wrapTouchList(unsafeUnwrap(this).touches);
- },
- get targetTouches() {
- return wrapTouchList(unsafeUnwrap(this).targetTouches);
- },
- get changedTouches() {
- return wrapTouchList(unsafeUnwrap(this).changedTouches);
- },
- initTouchEvent: function() {
- throw new Error("Not implemented");
- }
- });
- registerWrapper(OriginalTouchEvent, TouchEvent, nativeEvent);
- scope.wrappers.Touch = Touch;
- scope.wrappers.TouchEvent = TouchEvent;
- scope.wrappers.TouchList = TouchList;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var nonEnumDescriptor = {
- enumerable: false
- };
- function nonEnum(obj, prop) {
- Object.defineProperty(obj, prop, nonEnumDescriptor);
- }
- function NodeList() {
- this.length = 0;
- nonEnum(this, "length");
- }
- NodeList.prototype = {
- item: function(index) {
- return this[index];
- }
- };
- nonEnum(NodeList.prototype, "item");
- function wrapNodeList(list) {
- if (list == null) return list;
- var wrapperList = new NodeList();
- for (var i = 0, length = list.length; i < length; i++) {
- wrapperList[i] = wrap(list[i]);
- }
- wrapperList.length = length;
- return wrapperList;
- }
- function addWrapNodeListMethod(wrapperConstructor, name) {
- wrapperConstructor.prototype[name] = function() {
- return wrapNodeList(unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments));
- };
- }
- scope.wrappers.NodeList = NodeList;
- scope.addWrapNodeListMethod = addWrapNodeListMethod;
- scope.wrapNodeList = wrapNodeList;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- scope.wrapHTMLCollection = scope.wrapNodeList;
- scope.wrappers.HTMLCollection = scope.wrappers.NodeList;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var EventTarget = scope.wrappers.EventTarget;
- var NodeList = scope.wrappers.NodeList;
- var TreeScope = scope.TreeScope;
- var assert = scope.assert;
- var defineWrapGetter = scope.defineWrapGetter;
- var enqueueMutation = scope.enqueueMutation;
- var getTreeScope = scope.getTreeScope;
- var isWrapper = scope.isWrapper;
- var mixin = scope.mixin;
- var registerTransientObservers = scope.registerTransientObservers;
- var registerWrapper = scope.registerWrapper;
- var setTreeScope = scope.setTreeScope;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var wrapIfNeeded = scope.wrapIfNeeded;
- var wrappers = scope.wrappers;
- function assertIsNodeWrapper(node) {
- assert(node instanceof Node);
- }
- function createOneElementNodeList(node) {
- var nodes = new NodeList();
- nodes[0] = node;
- nodes.length = 1;
- return nodes;
- }
- var surpressMutations = false;
- function enqueueRemovalForInsertedNodes(node, parent, nodes) {
- enqueueMutation(parent, "childList", {
- removedNodes: nodes,
- previousSibling: node.previousSibling,
- nextSibling: node.nextSibling
- });
- }
- function enqueueRemovalForInsertedDocumentFragment(df, nodes) {
- enqueueMutation(df, "childList", {
- removedNodes: nodes
- });
- }
- function collectNodes(node, parentNode, previousNode, nextNode) {
- if (node instanceof DocumentFragment) {
- var nodes = collectNodesForDocumentFragment(node);
- surpressMutations = true;
- for (var i = nodes.length - 1; i >= 0; i--) {
- node.removeChild(nodes[i]);
- nodes[i].parentNode_ = parentNode;
- }
- surpressMutations = false;
- for (var i = 0; i < nodes.length; i++) {
- nodes[i].previousSibling_ = nodes[i - 1] || previousNode;
- nodes[i].nextSibling_ = nodes[i + 1] || nextNode;
- }
- if (previousNode) previousNode.nextSibling_ = nodes[0];
- if (nextNode) nextNode.previousSibling_ = nodes[nodes.length - 1];
- return nodes;
- }
- var nodes = createOneElementNodeList(node);
- var oldParent = node.parentNode;
- if (oldParent) {
- oldParent.removeChild(node);
- }
- node.parentNode_ = parentNode;
- node.previousSibling_ = previousNode;
- node.nextSibling_ = nextNode;
- if (previousNode) previousNode.nextSibling_ = node;
- if (nextNode) nextNode.previousSibling_ = node;
- return nodes;
- }
- function collectNodesNative(node) {
- if (node instanceof DocumentFragment) return collectNodesForDocumentFragment(node);
- var nodes = createOneElementNodeList(node);
- var oldParent = node.parentNode;
- if (oldParent) enqueueRemovalForInsertedNodes(node, oldParent, nodes);
- return nodes;
- }
- function collectNodesForDocumentFragment(node) {
- var nodes = new NodeList();
- var i = 0;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- nodes[i++] = child;
- }
- nodes.length = i;
- enqueueRemovalForInsertedDocumentFragment(node, nodes);
- return nodes;
- }
- function snapshotNodeList(nodeList) {
- return nodeList;
- }
- function nodeWasAdded(node, treeScope) {
- setTreeScope(node, treeScope);
- node.nodeIsInserted_();
- }
- function nodesWereAdded(nodes, parent) {
- var treeScope = getTreeScope(parent);
- for (var i = 0; i < nodes.length; i++) {
- nodeWasAdded(nodes[i], treeScope);
- }
- }
- function nodeWasRemoved(node) {
- setTreeScope(node, new TreeScope(node, null));
- }
- function nodesWereRemoved(nodes) {
- for (var i = 0; i < nodes.length; i++) {
- nodeWasRemoved(nodes[i]);
- }
- }
- function ensureSameOwnerDocument(parent, child) {
- var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ? parent : parent.ownerDocument;
- if (ownerDoc !== child.ownerDocument) ownerDoc.adoptNode(child);
- }
- function adoptNodesIfNeeded(owner, nodes) {
- if (!nodes.length) return;
- var ownerDoc = owner.ownerDocument;
- if (ownerDoc === nodes[0].ownerDocument) return;
- for (var i = 0; i < nodes.length; i++) {
- scope.adoptNodeNoRemove(nodes[i], ownerDoc);
- }
- }
- function unwrapNodesForInsertion(owner, nodes) {
- adoptNodesIfNeeded(owner, nodes);
- var length = nodes.length;
- if (length === 1) return unwrap(nodes[0]);
- var df = unwrap(owner.ownerDocument.createDocumentFragment());
- for (var i = 0; i < length; i++) {
- df.appendChild(unwrap(nodes[i]));
- }
- return df;
- }
- function clearChildNodes(wrapper) {
- if (wrapper.firstChild_ !== undefined) {
- var child = wrapper.firstChild_;
- while (child) {
- var tmp = child;
- child = child.nextSibling_;
- tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;
- }
- }
- wrapper.firstChild_ = wrapper.lastChild_ = undefined;
- }
- function removeAllChildNodes(wrapper) {
- if (wrapper.invalidateShadowRenderer()) {
- var childWrapper = wrapper.firstChild;
- while (childWrapper) {
- assert(childWrapper.parentNode === wrapper);
- var nextSibling = childWrapper.nextSibling;
- var childNode = unwrap(childWrapper);
- var parentNode = childNode.parentNode;
- if (parentNode) originalRemoveChild.call(parentNode, childNode);
- childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = null;
- childWrapper = nextSibling;
- }
- wrapper.firstChild_ = wrapper.lastChild_ = null;
- } else {
- var node = unwrap(wrapper);
- var child = node.firstChild;
- var nextSibling;
- while (child) {
- nextSibling = child.nextSibling;
- originalRemoveChild.call(node, child);
- child = nextSibling;
- }
- }
- }
- function invalidateParent(node) {
- var p = node.parentNode;
- return p && p.invalidateShadowRenderer();
- }
- function cleanupNodes(nodes) {
- for (var i = 0, n; i < nodes.length; i++) {
- n = nodes[i];
- n.parentNode.removeChild(n);
- }
- }
- var originalImportNode = document.importNode;
- var originalCloneNode = window.Node.prototype.cloneNode;
- function cloneNode(node, deep, opt_doc) {
- var clone;
- if (opt_doc) clone = wrap(originalImportNode.call(opt_doc, unsafeUnwrap(node), false)); else clone = wrap(originalCloneNode.call(unsafeUnwrap(node), false));
- if (deep) {
- for (var child = node.firstChild; child; child = child.nextSibling) {
- clone.appendChild(cloneNode(child, true, opt_doc));
- }
- if (node instanceof wrappers.HTMLTemplateElement) {
- var cloneContent = clone.content;
- for (var child = node.content.firstChild; child; child = child.nextSibling) {
- cloneContent.appendChild(cloneNode(child, true, opt_doc));
- }
- }
- }
- return clone;
- }
- function contains(self, child) {
- if (!child || getTreeScope(self) !== getTreeScope(child)) return false;
- for (var node = child; node; node = node.parentNode) {
- if (node === self) return true;
- }
- return false;
- }
- var OriginalNode = window.Node;
- function Node(original) {
- assert(original instanceof OriginalNode);
- EventTarget.call(this, original);
- this.parentNode_ = undefined;
- this.firstChild_ = undefined;
- this.lastChild_ = undefined;
- this.nextSibling_ = undefined;
- this.previousSibling_ = undefined;
- this.treeScope_ = undefined;
- }
- var OriginalDocumentFragment = window.DocumentFragment;
- var originalAppendChild = OriginalNode.prototype.appendChild;
- var originalCompareDocumentPosition = OriginalNode.prototype.compareDocumentPosition;
- var originalIsEqualNode = OriginalNode.prototype.isEqualNode;
- var originalInsertBefore = OriginalNode.prototype.insertBefore;
- var originalRemoveChild = OriginalNode.prototype.removeChild;
- var originalReplaceChild = OriginalNode.prototype.replaceChild;
- var isIEOrEdge = /Trident|Edge/.test(navigator.userAgent);
- var removeChildOriginalHelper = isIEOrEdge ? function(parent, child) {
- try {
- originalRemoveChild.call(parent, child);
- } catch (ex) {
- if (!(parent instanceof OriginalDocumentFragment)) throw ex;
- }
- } : function(parent, child) {
- originalRemoveChild.call(parent, child);
- };
- Node.prototype = Object.create(EventTarget.prototype);
- mixin(Node.prototype, {
- appendChild: function(childWrapper) {
- return this.insertBefore(childWrapper, null);
- },
- insertBefore: function(childWrapper, refWrapper) {
- assertIsNodeWrapper(childWrapper);
- var refNode;
- if (refWrapper) {
- if (isWrapper(refWrapper)) {
- refNode = unwrap(refWrapper);
- } else {
- refNode = refWrapper;
- refWrapper = wrap(refNode);
- }
- } else {
- refWrapper = null;
- refNode = null;
- }
- refWrapper && assert(refWrapper.parentNode === this);
- var nodes;
- var previousNode = refWrapper ? refWrapper.previousSibling : this.lastChild;
- var useNative = !this.invalidateShadowRenderer() && !invalidateParent(childWrapper);
- if (useNative) nodes = collectNodesNative(childWrapper); else nodes = collectNodes(childWrapper, this, previousNode, refWrapper);
- if (useNative) {
- ensureSameOwnerDocument(this, childWrapper);
- clearChildNodes(this);
- originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode);
- } else {
- if (!previousNode) this.firstChild_ = nodes[0];
- if (!refWrapper) {
- this.lastChild_ = nodes[nodes.length - 1];
- if (this.firstChild_ === undefined) this.firstChild_ = this.firstChild;
- }
- var parentNode = refNode ? refNode.parentNode : unsafeUnwrap(this);
- if (parentNode) {
- originalInsertBefore.call(parentNode, unwrapNodesForInsertion(this, nodes), refNode);
- } else {
- adoptNodesIfNeeded(this, nodes);
- }
- }
- enqueueMutation(this, "childList", {
- addedNodes: nodes,
- nextSibling: refWrapper,
- previousSibling: previousNode
- });
- nodesWereAdded(nodes, this);
- return childWrapper;
- },
- removeChild: function(childWrapper) {
- assertIsNodeWrapper(childWrapper);
- if (childWrapper.parentNode !== this) {
- var found = false;
- var childNodes = this.childNodes;
- for (var ieChild = this.firstChild; ieChild; ieChild = ieChild.nextSibling) {
- if (ieChild === childWrapper) {
- found = true;
- break;
- }
- }
- if (!found) {
- throw new Error("NotFoundError");
- }
- }
- var childNode = unwrap(childWrapper);
- var childWrapperNextSibling = childWrapper.nextSibling;
- var childWrapperPreviousSibling = childWrapper.previousSibling;
- if (this.invalidateShadowRenderer()) {
- var thisFirstChild = this.firstChild;
- var thisLastChild = this.lastChild;
- var parentNode = childNode.parentNode;
- if (parentNode) removeChildOriginalHelper(parentNode, childNode);
- if (thisFirstChild === childWrapper) this.firstChild_ = childWrapperNextSibling;
- if (thisLastChild === childWrapper) this.lastChild_ = childWrapperPreviousSibling;
- if (childWrapperPreviousSibling) childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;
- if (childWrapperNextSibling) {
- childWrapperNextSibling.previousSibling_ = childWrapperPreviousSibling;
- }
- childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = undefined;
- } else {
- clearChildNodes(this);
- removeChildOriginalHelper(unsafeUnwrap(this), childNode);
- }
- if (!surpressMutations) {
- enqueueMutation(this, "childList", {
- removedNodes: createOneElementNodeList(childWrapper),
- nextSibling: childWrapperNextSibling,
- previousSibling: childWrapperPreviousSibling
- });
- }
- registerTransientObservers(this, childWrapper);
- return childWrapper;
- },
- replaceChild: function(newChildWrapper, oldChildWrapper) {
- assertIsNodeWrapper(newChildWrapper);
- var oldChildNode;
- if (isWrapper(oldChildWrapper)) {
- oldChildNode = unwrap(oldChildWrapper);
- } else {
- oldChildNode = oldChildWrapper;
- oldChildWrapper = wrap(oldChildNode);
- }
- if (oldChildWrapper.parentNode !== this) {
- throw new Error("NotFoundError");
- }
- var nextNode = oldChildWrapper.nextSibling;
- var previousNode = oldChildWrapper.previousSibling;
- var nodes;
- var useNative = !this.invalidateShadowRenderer() && !invalidateParent(newChildWrapper);
- if (useNative) {
- nodes = collectNodesNative(newChildWrapper);
- } else {
- if (nextNode === newChildWrapper) nextNode = newChildWrapper.nextSibling;
- nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);
- }
- if (!useNative) {
- if (this.firstChild === oldChildWrapper) this.firstChild_ = nodes[0];
- if (this.lastChild === oldChildWrapper) this.lastChild_ = nodes[nodes.length - 1];
- oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ = oldChildWrapper.parentNode_ = undefined;
- if (oldChildNode.parentNode) {
- originalReplaceChild.call(oldChildNode.parentNode, unwrapNodesForInsertion(this, nodes), oldChildNode);
- }
- } else {
- ensureSameOwnerDocument(this, newChildWrapper);
- clearChildNodes(this);
- originalReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper), oldChildNode);
- }
- enqueueMutation(this, "childList", {
- addedNodes: nodes,
- removedNodes: createOneElementNodeList(oldChildWrapper),
- nextSibling: nextNode,
- previousSibling: previousNode
- });
- nodeWasRemoved(oldChildWrapper);
- nodesWereAdded(nodes, this);
- return oldChildWrapper;
- },
- nodeIsInserted_: function() {
- for (var child = this.firstChild; child; child = child.nextSibling) {
- child.nodeIsInserted_();
- }
- },
- hasChildNodes: function() {
- return this.firstChild !== null;
- },
- get parentNode() {
- return this.parentNode_ !== undefined ? this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);
- },
- get firstChild() {
- return this.firstChild_ !== undefined ? this.firstChild_ : wrap(unsafeUnwrap(this).firstChild);
- },
- get lastChild() {
- return this.lastChild_ !== undefined ? this.lastChild_ : wrap(unsafeUnwrap(this).lastChild);
- },
- get nextSibling() {
- return this.nextSibling_ !== undefined ? this.nextSibling_ : wrap(unsafeUnwrap(this).nextSibling);
- },
- get previousSibling() {
- return this.previousSibling_ !== undefined ? this.previousSibling_ : wrap(unsafeUnwrap(this).previousSibling);
- },
- get parentElement() {
- var p = this.parentNode;
- while (p && p.nodeType !== Node.ELEMENT_NODE) {
- p = p.parentNode;
- }
- return p;
- },
- get textContent() {
- var s = "";
- for (var child = this.firstChild; child; child = child.nextSibling) {
- if (child.nodeType != Node.COMMENT_NODE) {
- s += child.textContent;
- }
- }
- return s;
- },
- set textContent(textContent) {
- if (textContent == null) textContent = "";
- var removedNodes = snapshotNodeList(this.childNodes);
- if (this.invalidateShadowRenderer()) {
- removeAllChildNodes(this);
- if (textContent !== "") {
- var textNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent);
- this.appendChild(textNode);
- }
- } else {
- clearChildNodes(this);
- unsafeUnwrap(this).textContent = textContent;
- }
- var addedNodes = snapshotNodeList(this.childNodes);
- enqueueMutation(this, "childList", {
- addedNodes: addedNodes,
- removedNodes: removedNodes
- });
- nodesWereRemoved(removedNodes);
- nodesWereAdded(addedNodes, this);
- },
- get childNodes() {
- var wrapperList = new NodeList();
- var i = 0;
- for (var child = this.firstChild; child; child = child.nextSibling) {
- wrapperList[i++] = child;
- }
- wrapperList.length = i;
- return wrapperList;
- },
- cloneNode: function(deep) {
- return cloneNode(this, deep);
- },
- contains: function(child) {
- return contains(this, wrapIfNeeded(child));
- },
- compareDocumentPosition: function(otherNode) {
- return originalCompareDocumentPosition.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode));
- },
- isEqualNode: function(otherNode) {
- return originalIsEqualNode.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode));
- },
- normalize: function() {
- var nodes = snapshotNodeList(this.childNodes);
- var remNodes = [];
- var s = "";
- var modNode;
- for (var i = 0, n; i < nodes.length; i++) {
- n = nodes[i];
- if (n.nodeType === Node.TEXT_NODE) {
- if (!modNode && !n.data.length) this.removeChild(n); else if (!modNode) modNode = n; else {
- s += n.data;
- remNodes.push(n);
- }
- } else {
- if (modNode && remNodes.length) {
- modNode.data += s;
- cleanupNodes(remNodes);
- }
- remNodes = [];
- s = "";
- modNode = null;
- if (n.childNodes.length) n.normalize();
- }
- }
- if (modNode && remNodes.length) {
- modNode.data += s;
- cleanupNodes(remNodes);
- }
- }
- });
- defineWrapGetter(Node, "ownerDocument");
- registerWrapper(OriginalNode, Node, document.createDocumentFragment());
- delete Node.prototype.querySelector;
- delete Node.prototype.querySelectorAll;
- Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype);
- scope.cloneNode = cloneNode;
- scope.nodeWasAdded = nodeWasAdded;
- scope.nodeWasRemoved = nodeWasRemoved;
- scope.nodesWereAdded = nodesWereAdded;
- scope.nodesWereRemoved = nodesWereRemoved;
- scope.originalInsertBefore = originalInsertBefore;
- scope.originalRemoveChild = originalRemoveChild;
- scope.snapshotNodeList = snapshotNodeList;
- scope.wrappers.Node = Node;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLCollection = scope.wrappers.HTMLCollection;
- var NodeList = scope.wrappers.NodeList;
- var getTreeScope = scope.getTreeScope;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var originalDocumentQuerySelector = document.querySelector;
- var originalElementQuerySelector = document.documentElement.querySelector;
- var originalDocumentQuerySelectorAll = document.querySelectorAll;
- var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;
- var originalDocumentGetElementsByTagName = document.getElementsByTagName;
- var originalElementGetElementsByTagName = document.documentElement.getElementsByTagName;
- var originalDocumentGetElementsByTagNameNS = document.getElementsByTagNameNS;
- var originalElementGetElementsByTagNameNS = document.documentElement.getElementsByTagNameNS;
- var OriginalElement = window.Element;
- var OriginalDocument = window.HTMLDocument || window.Document;
- function filterNodeList(list, index, result, deep) {
- var wrappedItem = null;
- var root = null;
- for (var i = 0, length = list.length; i < length; i++) {
- wrappedItem = wrap(list[i]);
- if (!deep && (root = getTreeScope(wrappedItem).root)) {
- if (root instanceof scope.wrappers.ShadowRoot) {
- continue;
- }
- }
- result[index++] = wrappedItem;
- }
- return index;
- }
- function shimSelector(selector) {
- return String(selector).replace(/\/deep\/|::shadow|>>>/g, " ");
- }
- function shimMatchesSelector(selector) {
- return String(selector).replace(/:host\(([^\s]+)\)/g, "$1").replace(/([^\s]):host/g, "$1").replace(":host", "*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g, " ");
- }
- function findOne(node, selector) {
- var m, el = node.firstElementChild;
- while (el) {
- if (el.matches(selector)) return el;
- m = findOne(el, selector);
- if (m) return m;
- el = el.nextElementSibling;
- }
- return null;
- }
- function matchesSelector(el, selector) {
- return el.matches(selector);
- }
- var XHTML_NS = "http://www.w3.org/1999/xhtml";
- function matchesTagName(el, localName, localNameLowerCase) {
- var ln = el.localName;
- return ln === localName || ln === localNameLowerCase && el.namespaceURI === XHTML_NS;
- }
- function matchesEveryThing() {
- return true;
- }
- function matchesLocalNameOnly(el, ns, localName) {
- return el.localName === localName;
- }
- function matchesNameSpace(el, ns) {
- return el.namespaceURI === ns;
- }
- function matchesLocalNameNS(el, ns, localName) {
- return el.namespaceURI === ns && el.localName === localName;
- }
- function findElements(node, index, result, p, arg0, arg1) {
- var el = node.firstElementChild;
- while (el) {
- if (p(el, arg0, arg1)) result[index++] = el;
- index = findElements(el, index, result, p, arg0, arg1);
- el = el.nextElementSibling;
- }
- return index;
- }
- function querySelectorAllFiltered(p, index, result, selector, deep) {
- var target = unsafeUnwrap(this);
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findElements(this, index, result, p, selector, null);
- } else if (target instanceof OriginalElement) {
- list = originalElementQuerySelectorAll.call(target, selector);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentQuerySelectorAll.call(target, selector);
- } else {
- return findElements(this, index, result, p, selector, null);
- }
- return filterNodeList(list, index, result, deep);
- }
- var SelectorsInterface = {
- querySelector: function(selector) {
- var shimmed = shimSelector(selector);
- var deep = shimmed !== selector;
- selector = shimmed;
- var target = unsafeUnwrap(this);
- var wrappedItem;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findOne(this, selector);
- } else if (target instanceof OriginalElement) {
- wrappedItem = wrap(originalElementQuerySelector.call(target, selector));
- } else if (target instanceof OriginalDocument) {
- wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));
- } else {
- return findOne(this, selector);
- }
- if (!wrappedItem) {
- return wrappedItem;
- } else if (!deep && (root = getTreeScope(wrappedItem).root)) {
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findOne(this, selector);
- }
- }
- return wrappedItem;
- },
- querySelectorAll: function(selector) {
- var shimmed = shimSelector(selector);
- var deep = shimmed !== selector;
- selector = shimmed;
- var result = new NodeList();
- result.length = querySelectorAllFiltered.call(this, matchesSelector, 0, result, selector, deep);
- return result;
- }
- };
- var MatchesInterface = {
- matches: function(selector) {
- selector = shimMatchesSelector(selector);
- return scope.originalMatches.call(unsafeUnwrap(this), selector);
- }
- };
- function getElementsByTagNameFiltered(p, index, result, localName, lowercase) {
- var target = unsafeUnwrap(this);
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findElements(this, index, result, p, localName, lowercase);
- } else if (target instanceof OriginalElement) {
- list = originalElementGetElementsByTagName.call(target, localName, lowercase);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentGetElementsByTagName.call(target, localName, lowercase);
- } else {
- return findElements(this, index, result, p, localName, lowercase);
- }
- return filterNodeList(list, index, result, false);
- }
- function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {
- var target = unsafeUnwrap(this);
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- return findElements(this, index, result, p, ns, localName);
- } else if (target instanceof OriginalElement) {
- list = originalElementGetElementsByTagNameNS.call(target, ns, localName);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentGetElementsByTagNameNS.call(target, ns, localName);
- } else {
- return findElements(this, index, result, p, ns, localName);
- }
- return filterNodeList(list, index, result, false);
- }
- var GetElementsByInterface = {
- getElementsByTagName: function(localName) {
- var result = new HTMLCollection();
- var match = localName === "*" ? matchesEveryThing : matchesTagName;
- result.length = getElementsByTagNameFiltered.call(this, match, 0, result, localName, localName.toLowerCase());
- return result;
- },
- getElementsByClassName: function(className) {
- return this.querySelectorAll("." + className);
- },
- getElementsByTagNameNS: function(ns, localName) {
- var result = new HTMLCollection();
- var match = null;
- if (ns === "*") {
- match = localName === "*" ? matchesEveryThing : matchesLocalNameOnly;
- } else {
- match = localName === "*" ? matchesNameSpace : matchesLocalNameNS;
- }
- result.length = getElementsByTagNameNSFiltered.call(this, match, 0, result, ns || null, localName);
- return result;
- }
- };
- scope.GetElementsByInterface = GetElementsByInterface;
- scope.SelectorsInterface = SelectorsInterface;
- scope.MatchesInterface = MatchesInterface;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var NodeList = scope.wrappers.NodeList;
- function forwardElement(node) {
- while (node && node.nodeType !== Node.ELEMENT_NODE) {
- node = node.nextSibling;
- }
- return node;
- }
- function backwardsElement(node) {
- while (node && node.nodeType !== Node.ELEMENT_NODE) {
- node = node.previousSibling;
- }
- return node;
- }
- var ParentNodeInterface = {
- get firstElementChild() {
- return forwardElement(this.firstChild);
- },
- get lastElementChild() {
- return backwardsElement(this.lastChild);
- },
- get childElementCount() {
- var count = 0;
- for (var child = this.firstElementChild; child; child = child.nextElementSibling) {
- count++;
- }
- return count;
- },
- get children() {
- var wrapperList = new NodeList();
- var i = 0;
- for (var child = this.firstElementChild; child; child = child.nextElementSibling) {
- wrapperList[i++] = child;
- }
- wrapperList.length = i;
- return wrapperList;
- },
- remove: function() {
- var p = this.parentNode;
- if (p) p.removeChild(this);
- }
- };
- var ChildNodeInterface = {
- get nextElementSibling() {
- return forwardElement(this.nextSibling);
- },
- get previousElementSibling() {
- return backwardsElement(this.previousSibling);
- }
- };
- var NonElementParentNodeInterface = {
- getElementById: function(id) {
- if (/[ \t\n\r\f]/.test(id)) return null;
- return this.querySelector('[id="' + id + '"]');
- }
- };
- scope.ChildNodeInterface = ChildNodeInterface;
- scope.NonElementParentNodeInterface = NonElementParentNodeInterface;
- scope.ParentNodeInterface = ParentNodeInterface;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var ChildNodeInterface = scope.ChildNodeInterface;
- var Node = scope.wrappers.Node;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var OriginalCharacterData = window.CharacterData;
- function CharacterData(node) {
- Node.call(this, node);
- }
- CharacterData.prototype = Object.create(Node.prototype);
- mixin(CharacterData.prototype, {
- get nodeValue() {
- return this.data;
- },
- set nodeValue(data) {
- this.data = data;
- },
- get textContent() {
- return this.data;
- },
- set textContent(value) {
- this.data = value;
- },
- get data() {
- return unsafeUnwrap(this).data;
- },
- set data(value) {
- var oldValue = unsafeUnwrap(this).data;
- enqueueMutation(this, "characterData", {
- oldValue: oldValue
- });
- unsafeUnwrap(this).data = value;
- }
- });
- mixin(CharacterData.prototype, ChildNodeInterface);
- registerWrapper(OriginalCharacterData, CharacterData, document.createTextNode(""));
- scope.wrappers.CharacterData = CharacterData;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var CharacterData = scope.wrappers.CharacterData;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- function toUInt32(x) {
- return x >>> 0;
- }
- var OriginalText = window.Text;
- function Text(node) {
- CharacterData.call(this, node);
- }
- Text.prototype = Object.create(CharacterData.prototype);
- mixin(Text.prototype, {
- splitText: function(offset) {
- offset = toUInt32(offset);
- var s = this.data;
- if (offset > s.length) throw new Error("IndexSizeError");
- var head = s.slice(0, offset);
- var tail = s.slice(offset);
- this.data = head;
- var newTextNode = this.ownerDocument.createTextNode(tail);
- if (this.parentNode) this.parentNode.insertBefore(newTextNode, this.nextSibling);
- return newTextNode;
- }
- });
- registerWrapper(OriginalText, Text, document.createTextNode(""));
- scope.wrappers.Text = Text;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- if (!window.DOMTokenList) {
- console.warn("Missing DOMTokenList prototype, please include a " + "compatible classList polyfill such as http://goo.gl/uTcepH.");
- return;
- }
- var unsafeUnwrap = scope.unsafeUnwrap;
- var enqueueMutation = scope.enqueueMutation;
- function getClass(el) {
- return unsafeUnwrap(el).getAttribute("class");
- }
- function enqueueClassAttributeChange(el, oldValue) {
- enqueueMutation(el, "attributes", {
- name: "class",
- namespace: null,
- oldValue: oldValue
- });
- }
- function invalidateClass(el) {
- scope.invalidateRendererBasedOnAttribute(el, "class");
- }
- function changeClass(tokenList, method, args) {
- var ownerElement = tokenList.ownerElement_;
- if (ownerElement == null) {
- return method.apply(tokenList, args);
- }
- var oldValue = getClass(ownerElement);
- var retv = method.apply(tokenList, args);
- if (getClass(ownerElement) !== oldValue) {
- enqueueClassAttributeChange(ownerElement, oldValue);
- invalidateClass(ownerElement);
- }
- return retv;
- }
- var oldAdd = DOMTokenList.prototype.add;
- DOMTokenList.prototype.add = function() {
- changeClass(this, oldAdd, arguments);
- };
- var oldRemove = DOMTokenList.prototype.remove;
- DOMTokenList.prototype.remove = function() {
- changeClass(this, oldRemove, arguments);
- };
- var oldToggle = DOMTokenList.prototype.toggle;
- DOMTokenList.prototype.toggle = function() {
- return changeClass(this, oldToggle, arguments);
- };
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var ChildNodeInterface = scope.ChildNodeInterface;
- var GetElementsByInterface = scope.GetElementsByInterface;
- var Node = scope.wrappers.Node;
- var ParentNodeInterface = scope.ParentNodeInterface;
- var SelectorsInterface = scope.SelectorsInterface;
- var MatchesInterface = scope.MatchesInterface;
- var addWrapNodeListMethod = scope.addWrapNodeListMethod;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var oneOf = scope.oneOf;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrappers = scope.wrappers;
- var OriginalElement = window.Element;
- var matchesNames = [ "matches", "mozMatchesSelector", "msMatchesSelector", "webkitMatchesSelector" ].filter(function(name) {
- return OriginalElement.prototype[name];
- });
- var matchesName = matchesNames[0];
- var originalMatches = OriginalElement.prototype[matchesName];
- function invalidateRendererBasedOnAttribute(element, name) {
- var p = element.parentNode;
- if (!p || !p.shadowRoot) return;
- var renderer = scope.getRendererForHost(p);
- if (renderer.dependsOnAttribute(name)) renderer.invalidate();
- }
- function enqueAttributeChange(element, name, oldValue) {
- enqueueMutation(element, "attributes", {
- name: name,
- namespace: null,
- oldValue: oldValue
- });
- }
- var classListTable = new WeakMap();
- function Element(node) {
- Node.call(this, node);
- }
- Element.prototype = Object.create(Node.prototype);
- mixin(Element.prototype, {
- createShadowRoot: function() {
- var newShadowRoot = new wrappers.ShadowRoot(this);
- unsafeUnwrap(this).polymerShadowRoot_ = newShadowRoot;
- var renderer = scope.getRendererForHost(this);
- renderer.invalidate();
- return newShadowRoot;
- },
- get shadowRoot() {
- return unsafeUnwrap(this).polymerShadowRoot_ || null;
- },
- setAttribute: function(name, value) {
- var oldValue = unsafeUnwrap(this).getAttribute(name);
- unsafeUnwrap(this).setAttribute(name, value);
- enqueAttributeChange(this, name, oldValue);
- invalidateRendererBasedOnAttribute(this, name);
- },
- removeAttribute: function(name) {
- var oldValue = unsafeUnwrap(this).getAttribute(name);
- unsafeUnwrap(this).removeAttribute(name);
- enqueAttributeChange(this, name, oldValue);
- invalidateRendererBasedOnAttribute(this, name);
- },
- get classList() {
- var list = classListTable.get(this);
- if (!list) {
- list = unsafeUnwrap(this).classList;
- if (!list) return;
- list.ownerElement_ = this;
- classListTable.set(this, list);
- }
- return list;
- },
- get className() {
- return unsafeUnwrap(this).className;
- },
- set className(v) {
- this.setAttribute("class", v);
- },
- get id() {
- return unsafeUnwrap(this).id;
- },
- set id(v) {
- this.setAttribute("id", v);
- }
- });
- matchesNames.forEach(function(name) {
- if (name !== "matches") {
- Element.prototype[name] = function(selector) {
- return this.matches(selector);
- };
- }
- });
- if (OriginalElement.prototype.webkitCreateShadowRoot) {
- Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRoot;
- }
- mixin(Element.prototype, ChildNodeInterface);
- mixin(Element.prototype, GetElementsByInterface);
- mixin(Element.prototype, ParentNodeInterface);
- mixin(Element.prototype, SelectorsInterface);
- mixin(Element.prototype, MatchesInterface);
- registerWrapper(OriginalElement, Element, document.createElementNS(null, "x"));
- scope.invalidateRendererBasedOnAttribute = invalidateRendererBasedOnAttribute;
- scope.matchesNames = matchesNames;
- scope.originalMatches = originalMatches;
- scope.wrappers.Element = Element;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var Element = scope.wrappers.Element;
- var defineGetter = scope.defineGetter;
- var enqueueMutation = scope.enqueueMutation;
- var mixin = scope.mixin;
- var nodesWereAdded = scope.nodesWereAdded;
- var nodesWereRemoved = scope.nodesWereRemoved;
- var registerWrapper = scope.registerWrapper;
- var snapshotNodeList = scope.snapshotNodeList;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrappers = scope.wrappers;
- var escapeAttrRegExp = /[&\u00A0"]/g;
- var escapeDataRegExp = /[&\u00A0<>]/g;
- function escapeReplace(c) {
- switch (c) {
- case "&":
- return "&";
-
- case "<":
- return "<";
-
- case ">":
- return ">";
-
- case '"':
- return """;
-
- case "Â ":
- return " ";
- }
- }
- function escapeAttr(s) {
- return s.replace(escapeAttrRegExp, escapeReplace);
- }
- function escapeData(s) {
- return s.replace(escapeDataRegExp, escapeReplace);
- }
- function makeSet(arr) {
- var set = {};
- for (var i = 0; i < arr.length; i++) {
- set[arr[i]] = true;
- }
- return set;
- }
- var voidElements = makeSet([ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]);
- var plaintextParents = makeSet([ "style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript" ]);
- var XHTML_NS = "http://www.w3.org/1999/xhtml";
- function needsSelfClosingSlash(node) {
- if (node.namespaceURI !== XHTML_NS) return true;
- var doctype = node.ownerDocument.doctype;
- return doctype && doctype.publicId && doctype.systemId;
- }
- function getOuterHTML(node, parentNode) {
- switch (node.nodeType) {
- case Node.ELEMENT_NODE:
- var tagName = node.tagName.toLowerCase();
- var s = "<" + tagName;
- var attrs = node.attributes;
- for (var i = 0, attr; attr = attrs[i]; i++) {
- s += " " + attr.name + '="' + escapeAttr(attr.value) + '"';
- }
- if (voidElements[tagName]) {
- if (needsSelfClosingSlash(node)) s += "/";
- return s + ">";
- }
- return s + ">" + getInnerHTML(node) + "" + tagName + ">";
-
- case Node.TEXT_NODE:
- var data = node.data;
- if (parentNode && plaintextParents[parentNode.localName]) return data;
- return escapeData(data);
-
- case Node.COMMENT_NODE:
- return "";
-
- default:
- console.error(node);
- throw new Error("not implemented");
- }
- }
- function getInnerHTML(node) {
- if (node instanceof wrappers.HTMLTemplateElement) node = node.content;
- var s = "";
- for (var child = node.firstChild; child; child = child.nextSibling) {
- s += getOuterHTML(child, node);
- }
- return s;
- }
- function setInnerHTML(node, value, opt_tagName) {
- var tagName = opt_tagName || "div";
- node.textContent = "";
- var tempElement = unwrap(node.ownerDocument.createElement(tagName));
- tempElement.innerHTML = value;
- var firstChild;
- while (firstChild = tempElement.firstChild) {
- node.appendChild(wrap(firstChild));
- }
- }
- var oldIe = /MSIE/.test(navigator.userAgent);
- var OriginalHTMLElement = window.HTMLElement;
- var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
- function HTMLElement(node) {
- Element.call(this, node);
- }
- HTMLElement.prototype = Object.create(Element.prototype);
- mixin(HTMLElement.prototype, {
- get innerHTML() {
- return getInnerHTML(this);
- },
- set innerHTML(value) {
- if (oldIe && plaintextParents[this.localName]) {
- this.textContent = value;
- return;
- }
- var removedNodes = snapshotNodeList(this.childNodes);
- if (this.invalidateShadowRenderer()) {
- if (this instanceof wrappers.HTMLTemplateElement) setInnerHTML(this.content, value); else setInnerHTML(this, value, this.tagName);
- } else if (!OriginalHTMLTemplateElement && this instanceof wrappers.HTMLTemplateElement) {
- setInnerHTML(this.content, value);
- } else {
- unsafeUnwrap(this).innerHTML = value;
- }
- var addedNodes = snapshotNodeList(this.childNodes);
- enqueueMutation(this, "childList", {
- addedNodes: addedNodes,
- removedNodes: removedNodes
- });
- nodesWereRemoved(removedNodes);
- nodesWereAdded(addedNodes, this);
- },
- get outerHTML() {
- return getOuterHTML(this, this.parentNode);
- },
- set outerHTML(value) {
- var p = this.parentNode;
- if (p) {
- p.invalidateShadowRenderer();
- var df = frag(p, value);
- p.replaceChild(df, this);
- }
- },
- insertAdjacentHTML: function(position, text) {
- var contextElement, refNode;
- switch (String(position).toLowerCase()) {
- case "beforebegin":
- contextElement = this.parentNode;
- refNode = this;
- break;
-
- case "afterend":
- contextElement = this.parentNode;
- refNode = this.nextSibling;
- break;
-
- case "afterbegin":
- contextElement = this;
- refNode = this.firstChild;
- break;
-
- case "beforeend":
- contextElement = this;
- refNode = null;
- break;
-
- default:
- return;
- }
- var df = frag(contextElement, text);
- contextElement.insertBefore(df, refNode);
- },
- get hidden() {
- return this.hasAttribute("hidden");
- },
- set hidden(v) {
- if (v) {
- this.setAttribute("hidden", "");
- } else {
- this.removeAttribute("hidden");
- }
- }
- });
- function frag(contextElement, html) {
- var p = unwrap(contextElement.cloneNode(false));
- p.innerHTML = html;
- var df = unwrap(document.createDocumentFragment());
- var c;
- while (c = p.firstChild) {
- df.appendChild(c);
- }
- return wrap(df);
- }
- function getter(name) {
- return function() {
- scope.renderAllPending();
- return unsafeUnwrap(this)[name];
- };
- }
- function getterRequiresRendering(name) {
- defineGetter(HTMLElement, name, getter(name));
- }
- [ "clientHeight", "clientLeft", "clientTop", "clientWidth", "offsetHeight", "offsetLeft", "offsetTop", "offsetWidth", "scrollHeight", "scrollWidth" ].forEach(getterRequiresRendering);
- function getterAndSetterRequiresRendering(name) {
- Object.defineProperty(HTMLElement.prototype, name, {
- get: getter(name),
- set: function(v) {
- scope.renderAllPending();
- unsafeUnwrap(this)[name] = v;
- },
- configurable: true,
- enumerable: true
- });
- }
- [ "scrollLeft", "scrollTop" ].forEach(getterAndSetterRequiresRendering);
- function methodRequiresRendering(name) {
- Object.defineProperty(HTMLElement.prototype, name, {
- value: function() {
- scope.renderAllPending();
- return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);
- },
- configurable: true,
- enumerable: true
- });
- }
- [ "focus", "getBoundingClientRect", "getClientRects", "scrollIntoView" ].forEach(methodRequiresRendering);
- registerWrapper(OriginalHTMLElement, HTMLElement, document.createElement("b"));
- scope.wrappers.HTMLElement = HTMLElement;
- scope.getInnerHTML = getInnerHTML;
- scope.setInnerHTML = setInnerHTML;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var OriginalHTMLCanvasElement = window.HTMLCanvasElement;
- function HTMLCanvasElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLCanvasElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLCanvasElement.prototype, {
- getContext: function() {
- var context = unsafeUnwrap(this).getContext.apply(unsafeUnwrap(this), arguments);
- return context && wrap(context);
- }
- });
- registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement, document.createElement("canvas"));
- scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLContentElement = window.HTMLContentElement;
- function HTMLContentElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLContentElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLContentElement.prototype, {
- constructor: HTMLContentElement,
- get select() {
- return this.getAttribute("select");
- },
- set select(value) {
- this.setAttribute("select", value);
- },
- setAttribute: function(n, v) {
- HTMLElement.prototype.setAttribute.call(this, n, v);
- if (String(n).toLowerCase() === "select") this.invalidateShadowRenderer(true);
- }
- });
- if (OriginalHTMLContentElement) registerWrapper(OriginalHTMLContentElement, HTMLContentElement);
- scope.wrappers.HTMLContentElement = HTMLContentElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var unwrap = scope.unwrap;
- var OriginalHTMLFormElement = window.HTMLFormElement;
- function HTMLFormElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLFormElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLFormElement.prototype, {
- get elements() {
- return wrapHTMLCollection(unwrap(this).elements);
- }
- });
- registerWrapper(OriginalHTMLFormElement, HTMLFormElement, document.createElement("form"));
- scope.wrappers.HTMLFormElement = HTMLFormElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var rewrap = scope.rewrap;
- var OriginalHTMLImageElement = window.HTMLImageElement;
- function HTMLImageElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLImageElement.prototype = Object.create(HTMLElement.prototype);
- registerWrapper(OriginalHTMLImageElement, HTMLImageElement, document.createElement("img"));
- function Image(width, height) {
- if (!(this instanceof Image)) {
- throw new TypeError("DOM object constructor cannot be called as a function.");
- }
- var node = unwrap(document.createElement("img"));
- HTMLElement.call(this, node);
- rewrap(node, this);
- if (width !== undefined) node.width = width;
- if (height !== undefined) node.height = height;
- }
- Image.prototype = HTMLImageElement.prototype;
- scope.wrappers.HTMLImageElement = HTMLImageElement;
- scope.wrappers.Image = Image;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var NodeList = scope.wrappers.NodeList;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLShadowElement = window.HTMLShadowElement;
- function HTMLShadowElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLShadowElement.prototype = Object.create(HTMLElement.prototype);
- HTMLShadowElement.prototype.constructor = HTMLShadowElement;
- if (OriginalHTMLShadowElement) registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement);
- scope.wrappers.HTMLShadowElement = HTMLShadowElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var contentTable = new WeakMap();
- var templateContentsOwnerTable = new WeakMap();
- function getTemplateContentsOwner(doc) {
- if (!doc.defaultView) return doc;
- var d = templateContentsOwnerTable.get(doc);
- if (!d) {
- d = doc.implementation.createHTMLDocument("");
- while (d.lastChild) {
- d.removeChild(d.lastChild);
- }
- templateContentsOwnerTable.set(doc, d);
- }
- return d;
- }
- function extractContent(templateElement) {
- var doc = getTemplateContentsOwner(templateElement.ownerDocument);
- var df = unwrap(doc.createDocumentFragment());
- var child;
- while (child = templateElement.firstChild) {
- df.appendChild(child);
- }
- return df;
- }
- var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
- function HTMLTemplateElement(node) {
- HTMLElement.call(this, node);
- if (!OriginalHTMLTemplateElement) {
- var content = extractContent(node);
- contentTable.set(this, wrap(content));
- }
- }
- HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTemplateElement.prototype, {
- constructor: HTMLTemplateElement,
- get content() {
- if (OriginalHTMLTemplateElement) return wrap(unsafeUnwrap(this).content);
- return contentTable.get(this);
- }
- });
- if (OriginalHTMLTemplateElement) registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);
- scope.wrappers.HTMLTemplateElement = HTMLTemplateElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLMediaElement = window.HTMLMediaElement;
- if (!OriginalHTMLMediaElement) return;
- function HTMLMediaElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
- registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement, document.createElement("audio"));
- scope.wrappers.HTMLMediaElement = HTMLMediaElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var rewrap = scope.rewrap;
- var OriginalHTMLAudioElement = window.HTMLAudioElement;
- if (!OriginalHTMLAudioElement) return;
- function HTMLAudioElement(node) {
- HTMLMediaElement.call(this, node);
- }
- HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
- registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement, document.createElement("audio"));
- function Audio(src) {
- if (!(this instanceof Audio)) {
- throw new TypeError("DOM object constructor cannot be called as a function.");
- }
- var node = unwrap(document.createElement("audio"));
- HTMLMediaElement.call(this, node);
- rewrap(node, this);
- node.setAttribute("preload", "auto");
- if (src !== undefined) node.setAttribute("src", src);
- }
- Audio.prototype = HTMLAudioElement.prototype;
- scope.wrappers.HTMLAudioElement = HTMLAudioElement;
- scope.wrappers.Audio = Audio;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var rewrap = scope.rewrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLOptionElement = window.HTMLOptionElement;
- function trimText(s) {
- return s.replace(/\s+/g, " ").trim();
- }
- function HTMLOptionElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLOptionElement.prototype, {
- get text() {
- return trimText(this.textContent);
- },
- set text(value) {
- this.textContent = trimText(String(value));
- },
- get form() {
- return wrap(unwrap(this).form);
- }
- });
- registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement, document.createElement("option"));
- function Option(text, value, defaultSelected, selected) {
- if (!(this instanceof Option)) {
- throw new TypeError("DOM object constructor cannot be called as a function.");
- }
- var node = unwrap(document.createElement("option"));
- HTMLElement.call(this, node);
- rewrap(node, this);
- if (text !== undefined) node.text = text;
- if (value !== undefined) node.setAttribute("value", value);
- if (defaultSelected === true) node.setAttribute("selected", "");
- node.selected = selected === true;
- }
- Option.prototype = HTMLOptionElement.prototype;
- scope.wrappers.HTMLOptionElement = HTMLOptionElement;
- scope.wrappers.Option = Option;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLSelectElement = window.HTMLSelectElement;
- function HTMLSelectElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLSelectElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLSelectElement.prototype, {
- add: function(element, before) {
- if (typeof before === "object") before = unwrap(before);
- unwrap(this).add(unwrap(element), before);
- },
- remove: function(indexOrNode) {
- if (indexOrNode === undefined) {
- HTMLElement.prototype.remove.call(this);
- return;
- }
- if (typeof indexOrNode === "object") indexOrNode = unwrap(indexOrNode);
- unwrap(this).remove(indexOrNode);
- },
- get form() {
- return wrap(unwrap(this).form);
- }
- });
- registerWrapper(OriginalHTMLSelectElement, HTMLSelectElement, document.createElement("select"));
- scope.wrappers.HTMLSelectElement = HTMLSelectElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var OriginalHTMLTableElement = window.HTMLTableElement;
- function HTMLTableElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLTableElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTableElement.prototype, {
- get caption() {
- return wrap(unwrap(this).caption);
- },
- createCaption: function() {
- return wrap(unwrap(this).createCaption());
- },
- get tHead() {
- return wrap(unwrap(this).tHead);
- },
- createTHead: function() {
- return wrap(unwrap(this).createTHead());
- },
- createTFoot: function() {
- return wrap(unwrap(this).createTFoot());
- },
- get tFoot() {
- return wrap(unwrap(this).tFoot);
- },
- get tBodies() {
- return wrapHTMLCollection(unwrap(this).tBodies);
- },
- createTBody: function() {
- return wrap(unwrap(this).createTBody());
- },
- get rows() {
- return wrapHTMLCollection(unwrap(this).rows);
- },
- insertRow: function(index) {
- return wrap(unwrap(this).insertRow(index));
- }
- });
- registerWrapper(OriginalHTMLTableElement, HTMLTableElement, document.createElement("table"));
- scope.wrappers.HTMLTableElement = HTMLTableElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLTableSectionElement = window.HTMLTableSectionElement;
- function HTMLTableSectionElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLTableSectionElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTableSectionElement.prototype, {
- constructor: HTMLTableSectionElement,
- get rows() {
- return wrapHTMLCollection(unwrap(this).rows);
- },
- insertRow: function(index) {
- return wrap(unwrap(this).insertRow(index));
- }
- });
- registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionElement, document.createElement("thead"));
- scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var wrapHTMLCollection = scope.wrapHTMLCollection;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalHTMLTableRowElement = window.HTMLTableRowElement;
- function HTMLTableRowElement(node) {
- HTMLElement.call(this, node);
- }
- HTMLTableRowElement.prototype = Object.create(HTMLElement.prototype);
- mixin(HTMLTableRowElement.prototype, {
- get cells() {
- return wrapHTMLCollection(unwrap(this).cells);
- },
- insertCell: function(index) {
- return wrap(unwrap(this).insertCell(index));
- }
- });
- registerWrapper(OriginalHTMLTableRowElement, HTMLTableRowElement, document.createElement("tr"));
- scope.wrappers.HTMLTableRowElement = HTMLTableRowElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLContentElement = scope.wrappers.HTMLContentElement;
- var HTMLElement = scope.wrappers.HTMLElement;
- var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
- var HTMLTemplateElement = scope.wrappers.HTMLTemplateElement;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var OriginalHTMLUnknownElement = window.HTMLUnknownElement;
- function HTMLUnknownElement(node) {
- switch (node.localName) {
- case "content":
- return new HTMLContentElement(node);
-
- case "shadow":
- return new HTMLShadowElement(node);
-
- case "template":
- return new HTMLTemplateElement(node);
- }
- HTMLElement.call(this, node);
- }
- HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype);
- registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement);
- scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var Element = scope.wrappers.Element;
- var HTMLElement = scope.wrappers.HTMLElement;
- var registerWrapper = scope.registerWrapper;
- var defineWrapGetter = scope.defineWrapGetter;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var mixin = scope.mixin;
- var SVG_NS = "http://www.w3.org/2000/svg";
- var OriginalSVGElement = window.SVGElement;
- var svgTitleElement = document.createElementNS(SVG_NS, "title");
- if (!("classList" in svgTitleElement)) {
- var descr = Object.getOwnPropertyDescriptor(Element.prototype, "classList");
- Object.defineProperty(HTMLElement.prototype, "classList", descr);
- delete Element.prototype.classList;
- }
- function SVGElement(node) {
- Element.call(this, node);
- }
- SVGElement.prototype = Object.create(Element.prototype);
- mixin(SVGElement.prototype, {
- get ownerSVGElement() {
- return wrap(unsafeUnwrap(this).ownerSVGElement);
- }
- });
- registerWrapper(OriginalSVGElement, SVGElement, document.createElementNS(SVG_NS, "title"));
- scope.wrappers.SVGElement = SVGElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var OriginalSVGUseElement = window.SVGUseElement;
- var SVG_NS = "http://www.w3.org/2000/svg";
- var gWrapper = wrap(document.createElementNS(SVG_NS, "g"));
- var useElement = document.createElementNS(SVG_NS, "use");
- var SVGGElement = gWrapper.constructor;
- var parentInterfacePrototype = Object.getPrototypeOf(SVGGElement.prototype);
- var parentInterface = parentInterfacePrototype.constructor;
- function SVGUseElement(impl) {
- parentInterface.call(this, impl);
- }
- SVGUseElement.prototype = Object.create(parentInterfacePrototype);
- if ("instanceRoot" in useElement) {
- mixin(SVGUseElement.prototype, {
- get instanceRoot() {
- return wrap(unwrap(this).instanceRoot);
- },
- get animatedInstanceRoot() {
- return wrap(unwrap(this).animatedInstanceRoot);
- }
- });
- }
- registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement);
- scope.wrappers.SVGUseElement = SVGUseElement;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var EventTarget = scope.wrappers.EventTarget;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var wrap = scope.wrap;
- var OriginalSVGElementInstance = window.SVGElementInstance;
- if (!OriginalSVGElementInstance) return;
- function SVGElementInstance(impl) {
- EventTarget.call(this, impl);
- }
- SVGElementInstance.prototype = Object.create(EventTarget.prototype);
- mixin(SVGElementInstance.prototype, {
- get correspondingElement() {
- return wrap(unsafeUnwrap(this).correspondingElement);
- },
- get correspondingUseElement() {
- return wrap(unsafeUnwrap(this).correspondingUseElement);
- },
- get parentNode() {
- return wrap(unsafeUnwrap(this).parentNode);
- },
- get childNodes() {
- throw new Error("Not implemented");
- },
- get firstChild() {
- return wrap(unsafeUnwrap(this).firstChild);
- },
- get lastChild() {
- return wrap(unsafeUnwrap(this).lastChild);
- },
- get previousSibling() {
- return wrap(unsafeUnwrap(this).previousSibling);
- },
- get nextSibling() {
- return wrap(unsafeUnwrap(this).nextSibling);
- }
- });
- registerWrapper(OriginalSVGElementInstance, SVGElementInstance);
- scope.wrappers.SVGElementInstance = SVGElementInstance;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;
- function CanvasRenderingContext2D(impl) {
- setWrapper(impl, this);
- }
- mixin(CanvasRenderingContext2D.prototype, {
- get canvas() {
- return wrap(unsafeUnwrap(this).canvas);
- },
- drawImage: function() {
- arguments[0] = unwrapIfNeeded(arguments[0]);
- unsafeUnwrap(this).drawImage.apply(unsafeUnwrap(this), arguments);
- },
- createPattern: function() {
- arguments[0] = unwrap(arguments[0]);
- return unsafeUnwrap(this).createPattern.apply(unsafeUnwrap(this), arguments);
- }
- });
- registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D, document.createElement("canvas").getContext("2d"));
- scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var addForwardingProperties = scope.addForwardingProperties;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalWebGLRenderingContext = window.WebGLRenderingContext;
- if (!OriginalWebGLRenderingContext) return;
- function WebGLRenderingContext(impl) {
- setWrapper(impl, this);
- }
- mixin(WebGLRenderingContext.prototype, {
- get canvas() {
- return wrap(unsafeUnwrap(this).canvas);
- },
- texImage2D: function() {
- arguments[5] = unwrapIfNeeded(arguments[5]);
- unsafeUnwrap(this).texImage2D.apply(unsafeUnwrap(this), arguments);
- },
- texSubImage2D: function() {
- arguments[6] = unwrapIfNeeded(arguments[6]);
- unsafeUnwrap(this).texSubImage2D.apply(unsafeUnwrap(this), arguments);
- }
- });
- var OriginalWebGLRenderingContextBase = Object.getPrototypeOf(OriginalWebGLRenderingContext.prototype);
- if (OriginalWebGLRenderingContextBase !== Object.prototype) {
- addForwardingProperties(OriginalWebGLRenderingContextBase, WebGLRenderingContext.prototype);
- }
- var instanceProperties = /WebKit/.test(navigator.userAgent) ? {
- drawingBufferHeight: null,
- drawingBufferWidth: null
- } : {};
- registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext, instanceProperties);
- scope.wrappers.WebGLRenderingContext = WebGLRenderingContext;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var Node = scope.wrappers.Node;
- var GetElementsByInterface = scope.GetElementsByInterface;
- var NonElementParentNodeInterface = scope.NonElementParentNodeInterface;
- var ParentNodeInterface = scope.ParentNodeInterface;
- var SelectorsInterface = scope.SelectorsInterface;
- var mixin = scope.mixin;
- var registerObject = scope.registerObject;
- var registerWrapper = scope.registerWrapper;
- var OriginalDocumentFragment = window.DocumentFragment;
- function DocumentFragment(node) {
- Node.call(this, node);
- }
- DocumentFragment.prototype = Object.create(Node.prototype);
- mixin(DocumentFragment.prototype, ParentNodeInterface);
- mixin(DocumentFragment.prototype, SelectorsInterface);
- mixin(DocumentFragment.prototype, GetElementsByInterface);
- mixin(DocumentFragment.prototype, NonElementParentNodeInterface);
- registerWrapper(OriginalDocumentFragment, DocumentFragment, document.createDocumentFragment());
- scope.wrappers.DocumentFragment = DocumentFragment;
- var Comment = registerObject(document.createComment(""));
- scope.wrappers.Comment = Comment;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var DocumentFragment = scope.wrappers.DocumentFragment;
- var TreeScope = scope.TreeScope;
- var elementFromPoint = scope.elementFromPoint;
- var getInnerHTML = scope.getInnerHTML;
- var getTreeScope = scope.getTreeScope;
- var mixin = scope.mixin;
- var rewrap = scope.rewrap;
- var setInnerHTML = scope.setInnerHTML;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var shadowHostTable = new WeakMap();
- var nextOlderShadowTreeTable = new WeakMap();
- function ShadowRoot(hostWrapper) {
- var node = unwrap(unsafeUnwrap(hostWrapper).ownerDocument.createDocumentFragment());
- DocumentFragment.call(this, node);
- rewrap(node, this);
- var oldShadowRoot = hostWrapper.shadowRoot;
- nextOlderShadowTreeTable.set(this, oldShadowRoot);
- this.treeScope_ = new TreeScope(this, getTreeScope(oldShadowRoot || hostWrapper));
- shadowHostTable.set(this, hostWrapper);
- }
- ShadowRoot.prototype = Object.create(DocumentFragment.prototype);
- mixin(ShadowRoot.prototype, {
- constructor: ShadowRoot,
- get innerHTML() {
- return getInnerHTML(this);
- },
- set innerHTML(value) {
- setInnerHTML(this, value);
- this.invalidateShadowRenderer();
- },
- get olderShadowRoot() {
- return nextOlderShadowTreeTable.get(this) || null;
- },
- get host() {
- return shadowHostTable.get(this) || null;
- },
- invalidateShadowRenderer: function() {
- return shadowHostTable.get(this).invalidateShadowRenderer();
- },
- elementFromPoint: function(x, y) {
- return elementFromPoint(this, this.ownerDocument, x, y);
- },
- getSelection: function() {
- return document.getSelection();
- },
- get activeElement() {
- var unwrappedActiveElement = unwrap(this).ownerDocument.activeElement;
- if (!unwrappedActiveElement || !unwrappedActiveElement.nodeType) return null;
- var activeElement = wrap(unwrappedActiveElement);
- while (!this.contains(activeElement)) {
- while (activeElement.parentNode) {
- activeElement = activeElement.parentNode;
- }
- if (activeElement.host) {
- activeElement = activeElement.host;
- } else {
- return null;
- }
- }
- return activeElement;
- }
- });
- scope.wrappers.ShadowRoot = ShadowRoot;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var getTreeScope = scope.getTreeScope;
- var OriginalRange = window.Range;
- var ShadowRoot = scope.wrappers.ShadowRoot;
- function getHost(node) {
- var root = getTreeScope(node).root;
- if (root instanceof ShadowRoot) {
- return root.host;
- }
- return null;
- }
- function hostNodeToShadowNode(refNode, offset) {
- if (refNode.shadowRoot) {
- offset = Math.min(refNode.childNodes.length - 1, offset);
- var child = refNode.childNodes[offset];
- if (child) {
- var insertionPoint = scope.getDestinationInsertionPoints(child);
- if (insertionPoint.length > 0) {
- var parentNode = insertionPoint[0].parentNode;
- if (parentNode.nodeType == Node.ELEMENT_NODE) {
- refNode = parentNode;
- }
- }
- }
- }
- return refNode;
- }
- function shadowNodeToHostNode(node) {
- node = wrap(node);
- return getHost(node) || node;
- }
- function Range(impl) {
- setWrapper(impl, this);
- }
- Range.prototype = {
- get startContainer() {
- return shadowNodeToHostNode(unsafeUnwrap(this).startContainer);
- },
- get endContainer() {
- return shadowNodeToHostNode(unsafeUnwrap(this).endContainer);
- },
- get commonAncestorContainer() {
- return shadowNodeToHostNode(unsafeUnwrap(this).commonAncestorContainer);
- },
- setStart: function(refNode, offset) {
- refNode = hostNodeToShadowNode(refNode, offset);
- unsafeUnwrap(this).setStart(unwrapIfNeeded(refNode), offset);
- },
- setEnd: function(refNode, offset) {
- refNode = hostNodeToShadowNode(refNode, offset);
- unsafeUnwrap(this).setEnd(unwrapIfNeeded(refNode), offset);
- },
- setStartBefore: function(refNode) {
- unsafeUnwrap(this).setStartBefore(unwrapIfNeeded(refNode));
- },
- setStartAfter: function(refNode) {
- unsafeUnwrap(this).setStartAfter(unwrapIfNeeded(refNode));
- },
- setEndBefore: function(refNode) {
- unsafeUnwrap(this).setEndBefore(unwrapIfNeeded(refNode));
- },
- setEndAfter: function(refNode) {
- unsafeUnwrap(this).setEndAfter(unwrapIfNeeded(refNode));
- },
- selectNode: function(refNode) {
- unsafeUnwrap(this).selectNode(unwrapIfNeeded(refNode));
- },
- selectNodeContents: function(refNode) {
- unsafeUnwrap(this).selectNodeContents(unwrapIfNeeded(refNode));
- },
- compareBoundaryPoints: function(how, sourceRange) {
- return unsafeUnwrap(this).compareBoundaryPoints(how, unwrap(sourceRange));
- },
- extractContents: function() {
- return wrap(unsafeUnwrap(this).extractContents());
- },
- cloneContents: function() {
- return wrap(unsafeUnwrap(this).cloneContents());
- },
- insertNode: function(node) {
- unsafeUnwrap(this).insertNode(unwrapIfNeeded(node));
- },
- surroundContents: function(newParent) {
- unsafeUnwrap(this).surroundContents(unwrapIfNeeded(newParent));
- },
- cloneRange: function() {
- return wrap(unsafeUnwrap(this).cloneRange());
- },
- isPointInRange: function(node, offset) {
- return unsafeUnwrap(this).isPointInRange(unwrapIfNeeded(node), offset);
- },
- comparePoint: function(node, offset) {
- return unsafeUnwrap(this).comparePoint(unwrapIfNeeded(node), offset);
- },
- intersectsNode: function(node) {
- return unsafeUnwrap(this).intersectsNode(unwrapIfNeeded(node));
- },
- toString: function() {
- return unsafeUnwrap(this).toString();
- }
- };
- if (OriginalRange.prototype.createContextualFragment) {
- Range.prototype.createContextualFragment = function(html) {
- return wrap(unsafeUnwrap(this).createContextualFragment(html));
- };
- }
- registerWrapper(window.Range, Range, document.createRange());
- scope.wrappers.Range = Range;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var Element = scope.wrappers.Element;
- var HTMLContentElement = scope.wrappers.HTMLContentElement;
- var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
- var Node = scope.wrappers.Node;
- var ShadowRoot = scope.wrappers.ShadowRoot;
- var assert = scope.assert;
- var getTreeScope = scope.getTreeScope;
- var mixin = scope.mixin;
- var oneOf = scope.oneOf;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var ArraySplice = scope.ArraySplice;
- function updateWrapperUpAndSideways(wrapper) {
- wrapper.previousSibling_ = wrapper.previousSibling;
- wrapper.nextSibling_ = wrapper.nextSibling;
- wrapper.parentNode_ = wrapper.parentNode;
- }
- function updateWrapperDown(wrapper) {
- wrapper.firstChild_ = wrapper.firstChild;
- wrapper.lastChild_ = wrapper.lastChild;
- }
- function updateAllChildNodes(parentNodeWrapper) {
- assert(parentNodeWrapper instanceof Node);
- for (var childWrapper = parentNodeWrapper.firstChild; childWrapper; childWrapper = childWrapper.nextSibling) {
- updateWrapperUpAndSideways(childWrapper);
- }
- updateWrapperDown(parentNodeWrapper);
- }
- function insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) {
- var parentNode = unwrap(parentNodeWrapper);
- var newChild = unwrap(newChildWrapper);
- var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;
- remove(newChildWrapper);
- updateWrapperUpAndSideways(newChildWrapper);
- if (!refChildWrapper) {
- parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild;
- if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild) parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;
- var lastChildWrapper = wrap(parentNode.lastChild);
- if (lastChildWrapper) lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;
- } else {
- if (parentNodeWrapper.firstChild === refChildWrapper) parentNodeWrapper.firstChild_ = refChildWrapper;
- refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;
- }
- scope.originalInsertBefore.call(parentNode, newChild, refChild);
- }
- function remove(nodeWrapper) {
- var node = unwrap(nodeWrapper);
- var parentNode = node.parentNode;
- if (!parentNode) return;
- var parentNodeWrapper = wrap(parentNode);
- updateWrapperUpAndSideways(nodeWrapper);
- if (nodeWrapper.previousSibling) nodeWrapper.previousSibling.nextSibling_ = nodeWrapper;
- if (nodeWrapper.nextSibling) nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;
- if (parentNodeWrapper.lastChild === nodeWrapper) parentNodeWrapper.lastChild_ = nodeWrapper;
- if (parentNodeWrapper.firstChild === nodeWrapper) parentNodeWrapper.firstChild_ = nodeWrapper;
- scope.originalRemoveChild.call(parentNode, node);
- }
- var distributedNodesTable = new WeakMap();
- var destinationInsertionPointsTable = new WeakMap();
- var rendererForHostTable = new WeakMap();
- function resetDistributedNodes(insertionPoint) {
- distributedNodesTable.set(insertionPoint, []);
- }
- function getDistributedNodes(insertionPoint) {
- var rv = distributedNodesTable.get(insertionPoint);
- if (!rv) distributedNodesTable.set(insertionPoint, rv = []);
- return rv;
- }
- function getChildNodesSnapshot(node) {
- var result = [], i = 0;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- result[i++] = child;
- }
- return result;
- }
- var request = oneOf(window, [ "requestAnimationFrame", "mozRequestAnimationFrame", "webkitRequestAnimationFrame", "setTimeout" ]);
- var pendingDirtyRenderers = [];
- var renderTimer;
- function renderAllPending() {
- for (var i = 0; i < pendingDirtyRenderers.length; i++) {
- var renderer = pendingDirtyRenderers[i];
- var parentRenderer = renderer.parentRenderer;
- if (parentRenderer && parentRenderer.dirty) continue;
- renderer.render();
- }
- pendingDirtyRenderers = [];
- }
- function handleRequestAnimationFrame() {
- renderTimer = null;
- renderAllPending();
- }
- function getRendererForHost(host) {
- var renderer = rendererForHostTable.get(host);
- if (!renderer) {
- renderer = new ShadowRenderer(host);
- rendererForHostTable.set(host, renderer);
- }
- return renderer;
- }
- function getShadowRootAncestor(node) {
- var root = getTreeScope(node).root;
- if (root instanceof ShadowRoot) return root;
- return null;
- }
- function getRendererForShadowRoot(shadowRoot) {
- return getRendererForHost(shadowRoot.host);
- }
- var spliceDiff = new ArraySplice();
- spliceDiff.equals = function(renderNode, rawNode) {
- return unwrap(renderNode.node) === rawNode;
- };
- function RenderNode(node) {
- this.skip = false;
- this.node = node;
- this.childNodes = [];
- }
- RenderNode.prototype = {
- append: function(node) {
- var rv = new RenderNode(node);
- this.childNodes.push(rv);
- return rv;
- },
- sync: function(opt_added) {
- if (this.skip) return;
- var nodeWrapper = this.node;
- var newChildren = this.childNodes;
- var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));
- var added = opt_added || new WeakMap();
- var splices = spliceDiff.calculateSplices(newChildren, oldChildren);
- var newIndex = 0, oldIndex = 0;
- var lastIndex = 0;
- for (var i = 0; i < splices.length; i++) {
- var splice = splices[i];
- for (;lastIndex < splice.index; lastIndex++) {
- oldIndex++;
- newChildren[newIndex++].sync(added);
- }
- var removedCount = splice.removed.length;
- for (var j = 0; j < removedCount; j++) {
- var wrapper = wrap(oldChildren[oldIndex++]);
- if (!added.get(wrapper)) remove(wrapper);
- }
- var addedCount = splice.addedCount;
- var refNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]);
- for (var j = 0; j < addedCount; j++) {
- var newChildRenderNode = newChildren[newIndex++];
- var newChildWrapper = newChildRenderNode.node;
- insertBefore(nodeWrapper, newChildWrapper, refNode);
- added.set(newChildWrapper, true);
- newChildRenderNode.sync(added);
- }
- lastIndex += addedCount;
- }
- for (var i = lastIndex; i < newChildren.length; i++) {
- newChildren[i].sync(added);
- }
- }
- };
- function ShadowRenderer(host) {
- this.host = host;
- this.dirty = false;
- this.invalidateAttributes();
- this.associateNode(host);
- }
- ShadowRenderer.prototype = {
- render: function(opt_renderNode) {
- if (!this.dirty) return;
- this.invalidateAttributes();
- var host = this.host;
- this.distribution(host);
- var renderNode = opt_renderNode || new RenderNode(host);
- this.buildRenderTree(renderNode, host);
- var topMostRenderer = !opt_renderNode;
- if (topMostRenderer) renderNode.sync();
- this.dirty = false;
- },
- get parentRenderer() {
- return getTreeScope(this.host).renderer;
- },
- invalidate: function() {
- if (!this.dirty) {
- this.dirty = true;
- var parentRenderer = this.parentRenderer;
- if (parentRenderer) parentRenderer.invalidate();
- pendingDirtyRenderers.push(this);
- if (renderTimer) return;
- renderTimer = window[request](handleRequestAnimationFrame, 0);
- }
- },
- distribution: function(root) {
- this.resetAllSubtrees(root);
- this.distributionResolution(root);
- },
- resetAll: function(node) {
- if (isInsertionPoint(node)) resetDistributedNodes(node); else resetDestinationInsertionPoints(node);
- this.resetAllSubtrees(node);
- },
- resetAllSubtrees: function(node) {
- for (var child = node.firstChild; child; child = child.nextSibling) {
- this.resetAll(child);
- }
- if (node.shadowRoot) this.resetAll(node.shadowRoot);
- if (node.olderShadowRoot) this.resetAll(node.olderShadowRoot);
- },
- distributionResolution: function(node) {
- if (isShadowHost(node)) {
- var shadowHost = node;
- var pool = poolPopulation(shadowHost);
- var shadowTrees = getShadowTrees(shadowHost);
- for (var i = 0; i < shadowTrees.length; i++) {
- this.poolDistribution(shadowTrees[i], pool);
- }
- for (var i = shadowTrees.length - 1; i >= 0; i--) {
- var shadowTree = shadowTrees[i];
- var shadow = getShadowInsertionPoint(shadowTree);
- if (shadow) {
- var olderShadowRoot = shadowTree.olderShadowRoot;
- if (olderShadowRoot) {
- pool = poolPopulation(olderShadowRoot);
- }
- for (var j = 0; j < pool.length; j++) {
- destributeNodeInto(pool[j], shadow);
- }
- }
- this.distributionResolution(shadowTree);
- }
- }
- for (var child = node.firstChild; child; child = child.nextSibling) {
- this.distributionResolution(child);
- }
- },
- poolDistribution: function(node, pool) {
- if (node instanceof HTMLShadowElement) return;
- if (node instanceof HTMLContentElement) {
- var content = node;
- this.updateDependentAttributes(content.getAttribute("select"));
- var anyDistributed = false;
- for (var i = 0; i < pool.length; i++) {
- var node = pool[i];
- if (!node) continue;
- if (matches(node, content)) {
- destributeNodeInto(node, content);
- pool[i] = undefined;
- anyDistributed = true;
- }
- }
- if (!anyDistributed) {
- for (var child = content.firstChild; child; child = child.nextSibling) {
- destributeNodeInto(child, content);
- }
- }
- return;
- }
- for (var child = node.firstChild; child; child = child.nextSibling) {
- this.poolDistribution(child, pool);
- }
- },
- buildRenderTree: function(renderNode, node) {
- var children = this.compose(node);
- for (var i = 0; i < children.length; i++) {
- var child = children[i];
- var childRenderNode = renderNode.append(child);
- this.buildRenderTree(childRenderNode, child);
- }
- if (isShadowHost(node)) {
- var renderer = getRendererForHost(node);
- renderer.dirty = false;
- }
- },
- compose: function(node) {
- var children = [];
- var p = node.shadowRoot || node;
- for (var child = p.firstChild; child; child = child.nextSibling) {
- if (isInsertionPoint(child)) {
- this.associateNode(p);
- var distributedNodes = getDistributedNodes(child);
- for (var j = 0; j < distributedNodes.length; j++) {
- var distributedNode = distributedNodes[j];
- if (isFinalDestination(child, distributedNode)) children.push(distributedNode);
- }
- } else {
- children.push(child);
- }
- }
- return children;
- },
- invalidateAttributes: function() {
- this.attributes = Object.create(null);
- },
- updateDependentAttributes: function(selector) {
- if (!selector) return;
- var attributes = this.attributes;
- if (/\.\w+/.test(selector)) attributes["class"] = true;
- if (/#\w+/.test(selector)) attributes["id"] = true;
- selector.replace(/\[\s*([^\s=\|~\]]+)/g, function(_, name) {
- attributes[name] = true;
- });
- },
- dependsOnAttribute: function(name) {
- return this.attributes[name];
- },
- associateNode: function(node) {
- unsafeUnwrap(node).polymerShadowRenderer_ = this;
- }
- };
- function poolPopulation(node) {
- var pool = [];
- for (var child = node.firstChild; child; child = child.nextSibling) {
- if (isInsertionPoint(child)) {
- pool.push.apply(pool, getDistributedNodes(child));
- } else {
- pool.push(child);
- }
- }
- return pool;
- }
- function getShadowInsertionPoint(node) {
- if (node instanceof HTMLShadowElement) return node;
- if (node instanceof HTMLContentElement) return null;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- var res = getShadowInsertionPoint(child);
- if (res) return res;
- }
- return null;
- }
- function destributeNodeInto(child, insertionPoint) {
- getDistributedNodes(insertionPoint).push(child);
- var points = destinationInsertionPointsTable.get(child);
- if (!points) destinationInsertionPointsTable.set(child, [ insertionPoint ]); else points.push(insertionPoint);
- }
- function getDestinationInsertionPoints(node) {
- return destinationInsertionPointsTable.get(node);
- }
- function resetDestinationInsertionPoints(node) {
- destinationInsertionPointsTable.set(node, undefined);
- }
- var selectorStartCharRe = /^(:not\()?[*.#[a-zA-Z_|]/;
- function matches(node, contentElement) {
- var select = contentElement.getAttribute("select");
- if (!select) return true;
- select = select.trim();
- if (!select) return true;
- if (!(node instanceof Element)) return false;
- if (!selectorStartCharRe.test(select)) return false;
- try {
- return node.matches(select);
- } catch (ex) {
- return false;
- }
- }
- function isFinalDestination(insertionPoint, node) {
- var points = getDestinationInsertionPoints(node);
- return points && points[points.length - 1] === insertionPoint;
- }
- function isInsertionPoint(node) {
- return node instanceof HTMLContentElement || node instanceof HTMLShadowElement;
- }
- function isShadowHost(shadowHost) {
- return shadowHost.shadowRoot;
- }
- function getShadowTrees(host) {
- var trees = [];
- for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {
- trees.push(tree);
- }
- return trees;
- }
- function render(host) {
- new ShadowRenderer(host).render();
- }
- Node.prototype.invalidateShadowRenderer = function(force) {
- var renderer = unsafeUnwrap(this).polymerShadowRenderer_;
- if (renderer) {
- renderer.invalidate();
- return true;
- }
- return false;
- };
- HTMLContentElement.prototype.getDistributedNodes = HTMLShadowElement.prototype.getDistributedNodes = function() {
- renderAllPending();
- return getDistributedNodes(this);
- };
- Element.prototype.getDestinationInsertionPoints = function() {
- renderAllPending();
- return getDestinationInsertionPoints(this) || [];
- };
- HTMLContentElement.prototype.nodeIsInserted_ = HTMLShadowElement.prototype.nodeIsInserted_ = function() {
- this.invalidateShadowRenderer();
- var shadowRoot = getShadowRootAncestor(this);
- var renderer;
- if (shadowRoot) renderer = getRendererForShadowRoot(shadowRoot);
- unsafeUnwrap(this).polymerShadowRenderer_ = renderer;
- if (renderer) renderer.invalidate();
- };
- scope.getRendererForHost = getRendererForHost;
- scope.getShadowTrees = getShadowTrees;
- scope.renderAllPending = renderAllPending;
- scope.getDestinationInsertionPoints = getDestinationInsertionPoints;
- scope.visual = {
- insertBefore: insertBefore,
- remove: remove
- };
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var HTMLElement = scope.wrappers.HTMLElement;
- var assert = scope.assert;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var elementsWithFormProperty = [ "HTMLButtonElement", "HTMLFieldSetElement", "HTMLInputElement", "HTMLKeygenElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLObjectElement", "HTMLOutputElement", "HTMLTextAreaElement" ];
- function createWrapperConstructor(name) {
- if (!window[name]) return;
- assert(!scope.wrappers[name]);
- var GeneratedWrapper = function(node) {
- HTMLElement.call(this, node);
- };
- GeneratedWrapper.prototype = Object.create(HTMLElement.prototype);
- mixin(GeneratedWrapper.prototype, {
- get form() {
- return wrap(unwrap(this).form);
- }
- });
- registerWrapper(window[name], GeneratedWrapper, document.createElement(name.slice(4, -7)));
- scope.wrappers[name] = GeneratedWrapper;
- }
- elementsWithFormProperty.forEach(createWrapperConstructor);
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalSelection = window.Selection;
- function Selection(impl) {
- setWrapper(impl, this);
- }
- Selection.prototype = {
- get anchorNode() {
- return wrap(unsafeUnwrap(this).anchorNode);
- },
- get focusNode() {
- return wrap(unsafeUnwrap(this).focusNode);
- },
- addRange: function(range) {
- unsafeUnwrap(this).addRange(unwrapIfNeeded(range));
- },
- collapse: function(node, index) {
- unsafeUnwrap(this).collapse(unwrapIfNeeded(node), index);
- },
- containsNode: function(node, allowPartial) {
- return unsafeUnwrap(this).containsNode(unwrapIfNeeded(node), allowPartial);
- },
- getRangeAt: function(index) {
- return wrap(unsafeUnwrap(this).getRangeAt(index));
- },
- removeRange: function(range) {
- unsafeUnwrap(this).removeRange(unwrap(range));
- },
- selectAllChildren: function(node) {
- unsafeUnwrap(this).selectAllChildren(node instanceof ShadowRoot ? unsafeUnwrap(node.host) : unwrapIfNeeded(node));
- },
- toString: function() {
- return unsafeUnwrap(this).toString();
- }
- };
- if (OriginalSelection.prototype.extend) {
- Selection.prototype.extend = function(node, offset) {
- unsafeUnwrap(this).extend(unwrapIfNeeded(node), offset);
- };
- }
- registerWrapper(window.Selection, Selection, window.getSelection());
- scope.wrappers.Selection = Selection;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalTreeWalker = window.TreeWalker;
- function TreeWalker(impl) {
- setWrapper(impl, this);
- }
- TreeWalker.prototype = {
- get root() {
- return wrap(unsafeUnwrap(this).root);
- },
- get currentNode() {
- return wrap(unsafeUnwrap(this).currentNode);
- },
- set currentNode(node) {
- unsafeUnwrap(this).currentNode = unwrapIfNeeded(node);
- },
- get filter() {
- return unsafeUnwrap(this).filter;
- },
- parentNode: function() {
- return wrap(unsafeUnwrap(this).parentNode());
- },
- firstChild: function() {
- return wrap(unsafeUnwrap(this).firstChild());
- },
- lastChild: function() {
- return wrap(unsafeUnwrap(this).lastChild());
- },
- previousSibling: function() {
- return wrap(unsafeUnwrap(this).previousSibling());
- },
- previousNode: function() {
- return wrap(unsafeUnwrap(this).previousNode());
- },
- nextNode: function() {
- return wrap(unsafeUnwrap(this).nextNode());
- }
- };
- registerWrapper(OriginalTreeWalker, TreeWalker);
- scope.wrappers.TreeWalker = TreeWalker;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var GetElementsByInterface = scope.GetElementsByInterface;
- var Node = scope.wrappers.Node;
- var ParentNodeInterface = scope.ParentNodeInterface;
- var NonElementParentNodeInterface = scope.NonElementParentNodeInterface;
- var Selection = scope.wrappers.Selection;
- var SelectorsInterface = scope.SelectorsInterface;
- var ShadowRoot = scope.wrappers.ShadowRoot;
- var TreeScope = scope.TreeScope;
- var cloneNode = scope.cloneNode;
- var defineGetter = scope.defineGetter;
- var defineWrapGetter = scope.defineWrapGetter;
- var elementFromPoint = scope.elementFromPoint;
- var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
- var matchesNames = scope.matchesNames;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var renderAllPending = scope.renderAllPending;
- var rewrap = scope.rewrap;
- var setWrapper = scope.setWrapper;
- var unsafeUnwrap = scope.unsafeUnwrap;
- var unwrap = scope.unwrap;
- var wrap = scope.wrap;
- var wrapEventTargetMethods = scope.wrapEventTargetMethods;
- var wrapNodeList = scope.wrapNodeList;
- var implementationTable = new WeakMap();
- function Document(node) {
- Node.call(this, node);
- this.treeScope_ = new TreeScope(this, null);
- }
- Document.prototype = Object.create(Node.prototype);
- defineWrapGetter(Document, "documentElement");
- defineWrapGetter(Document, "body");
- defineWrapGetter(Document, "head");
- defineGetter(Document, "activeElement", function() {
- var unwrappedActiveElement = unwrap(this).activeElement;
- if (!unwrappedActiveElement || !unwrappedActiveElement.nodeType) return null;
- var activeElement = wrap(unwrappedActiveElement);
- while (!this.contains(activeElement)) {
- while (activeElement.parentNode) {
- activeElement = activeElement.parentNode;
- }
- if (activeElement.host) {
- activeElement = activeElement.host;
- } else {
- return null;
- }
- }
- return activeElement;
- });
- function wrapMethod(name) {
- var original = document[name];
- Document.prototype[name] = function() {
- return wrap(original.apply(unsafeUnwrap(this), arguments));
- };
- }
- [ "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode" ].forEach(wrapMethod);
- var originalAdoptNode = document.adoptNode;
- function adoptNodeNoRemove(node, doc) {
- originalAdoptNode.call(unsafeUnwrap(doc), unwrap(node));
- adoptSubtree(node, doc);
- }
- function adoptSubtree(node, doc) {
- if (node.shadowRoot) doc.adoptNode(node.shadowRoot);
- if (node instanceof ShadowRoot) adoptOlderShadowRoots(node, doc);
- for (var child = node.firstChild; child; child = child.nextSibling) {
- adoptSubtree(child, doc);
- }
- }
- function adoptOlderShadowRoots(shadowRoot, doc) {
- var oldShadowRoot = shadowRoot.olderShadowRoot;
- if (oldShadowRoot) doc.adoptNode(oldShadowRoot);
- }
- var originalGetSelection = document.getSelection;
- mixin(Document.prototype, {
- adoptNode: function(node) {
- if (node.parentNode) node.parentNode.removeChild(node);
- adoptNodeNoRemove(node, this);
- return node;
- },
- elementFromPoint: function(x, y) {
- return elementFromPoint(this, this, x, y);
- },
- importNode: function(node, deep) {
- return cloneNode(node, deep, unsafeUnwrap(this));
- },
- getSelection: function() {
- renderAllPending();
- return new Selection(originalGetSelection.call(unwrap(this)));
- },
- getElementsByName: function(name) {
- return SelectorsInterface.querySelectorAll.call(this, "[name=" + JSON.stringify(String(name)) + "]");
- }
- });
- var originalCreateTreeWalker = document.createTreeWalker;
- var TreeWalkerWrapper = scope.wrappers.TreeWalker;
- Document.prototype.createTreeWalker = function(root, whatToShow, filter, expandEntityReferences) {
- var newFilter = null;
- if (filter) {
- if (filter.acceptNode && typeof filter.acceptNode === "function") {
- newFilter = {
- acceptNode: function(node) {
- return filter.acceptNode(wrap(node));
- }
- };
- } else if (typeof filter === "function") {
- newFilter = function(node) {
- return filter(wrap(node));
- };
- }
- }
- return new TreeWalkerWrapper(originalCreateTreeWalker.call(unwrap(this), unwrap(root), whatToShow, newFilter, expandEntityReferences));
- };
- if (document.registerElement) {
- var originalRegisterElement = document.registerElement;
- Document.prototype.registerElement = function(tagName, object) {
- var prototype, extendsOption;
- if (object !== undefined) {
- prototype = object.prototype;
- extendsOption = object.extends;
- }
- if (!prototype) prototype = Object.create(HTMLElement.prototype);
- if (scope.nativePrototypeTable.get(prototype)) {
- throw new Error("NotSupportedError");
- }
- var proto = Object.getPrototypeOf(prototype);
- var nativePrototype;
- var prototypes = [];
- while (proto) {
- nativePrototype = scope.nativePrototypeTable.get(proto);
- if (nativePrototype) break;
- prototypes.push(proto);
- proto = Object.getPrototypeOf(proto);
- }
- if (!nativePrototype) {
- throw new Error("NotSupportedError");
- }
- var newPrototype = Object.create(nativePrototype);
- for (var i = prototypes.length - 1; i >= 0; i--) {
- newPrototype = Object.create(newPrototype);
- }
- [ "createdCallback", "attachedCallback", "detachedCallback", "attributeChangedCallback" ].forEach(function(name) {
- var f = prototype[name];
- if (!f) return;
- newPrototype[name] = function() {
- if (!(wrap(this) instanceof CustomElementConstructor)) {
- rewrap(this);
- }
- f.apply(wrap(this), arguments);
- };
- });
- var p = {
- prototype: newPrototype
- };
- if (extendsOption) p.extends = extendsOption;
- function CustomElementConstructor(node) {
- if (!node) {
- if (extendsOption) {
- return document.createElement(extendsOption, tagName);
- } else {
- return document.createElement(tagName);
- }
- }
- setWrapper(node, this);
- }
- CustomElementConstructor.prototype = prototype;
- CustomElementConstructor.prototype.constructor = CustomElementConstructor;
- scope.constructorTable.set(newPrototype, CustomElementConstructor);
- scope.nativePrototypeTable.set(prototype, newPrototype);
- var nativeConstructor = originalRegisterElement.call(unwrap(this), tagName, p);
- return CustomElementConstructor;
- };
- forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "registerElement" ]);
- }
- forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement, window.HTMLHtmlElement ], [ "appendChild", "compareDocumentPosition", "contains", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "insertBefore", "querySelector", "querySelectorAll", "removeChild", "replaceChild" ]);
- forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLHeadElement, window.HTMLHtmlElement ], matchesNames);
- forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "adoptNode", "importNode", "contains", "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode", "createTreeWalker", "elementFromPoint", "getElementById", "getElementsByName", "getSelection" ]);
- mixin(Document.prototype, GetElementsByInterface);
- mixin(Document.prototype, ParentNodeInterface);
- mixin(Document.prototype, SelectorsInterface);
- mixin(Document.prototype, NonElementParentNodeInterface);
- mixin(Document.prototype, {
- get implementation() {
- var implementation = implementationTable.get(this);
- if (implementation) return implementation;
- implementation = new DOMImplementation(unwrap(this).implementation);
- implementationTable.set(this, implementation);
- return implementation;
- },
- get defaultView() {
- return wrap(unwrap(this).defaultView);
- }
- });
- registerWrapper(window.Document, Document, document.implementation.createHTMLDocument(""));
- if (window.HTMLDocument) registerWrapper(window.HTMLDocument, Document);
- wrapEventTargetMethods([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement ]);
- function DOMImplementation(impl) {
- setWrapper(impl, this);
- }
- var originalCreateDocument = document.implementation.createDocument;
- DOMImplementation.prototype.createDocument = function() {
- arguments[2] = unwrap(arguments[2]);
- return wrap(originalCreateDocument.apply(unsafeUnwrap(this), arguments));
- };
- function wrapImplMethod(constructor, name) {
- var original = document.implementation[name];
- constructor.prototype[name] = function() {
- return wrap(original.apply(unsafeUnwrap(this), arguments));
- };
- }
- function forwardImplMethod(constructor, name) {
- var original = document.implementation[name];
- constructor.prototype[name] = function() {
- return original.apply(unsafeUnwrap(this), arguments);
- };
- }
- wrapImplMethod(DOMImplementation, "createDocumentType");
- wrapImplMethod(DOMImplementation, "createHTMLDocument");
- forwardImplMethod(DOMImplementation, "hasFeature");
- registerWrapper(window.DOMImplementation, DOMImplementation);
- forwardMethodsToWrapper([ window.DOMImplementation ], [ "createDocument", "createDocumentType", "createHTMLDocument", "hasFeature" ]);
- scope.adoptNodeNoRemove = adoptNodeNoRemove;
- scope.wrappers.DOMImplementation = DOMImplementation;
- scope.wrappers.Document = Document;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var EventTarget = scope.wrappers.EventTarget;
- var Selection = scope.wrappers.Selection;
- var mixin = scope.mixin;
- var registerWrapper = scope.registerWrapper;
- var renderAllPending = scope.renderAllPending;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
- var OriginalWindow = window.Window;
- var originalGetComputedStyle = window.getComputedStyle;
- var originalGetDefaultComputedStyle = window.getDefaultComputedStyle;
- var originalGetSelection = window.getSelection;
- function Window(impl) {
- EventTarget.call(this, impl);
- }
- Window.prototype = Object.create(EventTarget.prototype);
- OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {
- return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);
- };
- if (originalGetDefaultComputedStyle) {
- OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseudo) {
- return wrap(this || window).getDefaultComputedStyle(unwrapIfNeeded(el), pseudo);
- };
- }
- OriginalWindow.prototype.getSelection = function() {
- return wrap(this || window).getSelection();
- };
- delete window.getComputedStyle;
- delete window.getDefaultComputedStyle;
- delete window.getSelection;
- [ "addEventListener", "removeEventListener", "dispatchEvent" ].forEach(function(name) {
- OriginalWindow.prototype[name] = function() {
- var w = wrap(this || window);
- return w[name].apply(w, arguments);
- };
- delete window[name];
- });
- mixin(Window.prototype, {
- getComputedStyle: function(el, pseudo) {
- renderAllPending();
- return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo);
- },
- getSelection: function() {
- renderAllPending();
- return new Selection(originalGetSelection.call(unwrap(this)));
- },
- get document() {
- return wrap(unwrap(this).document);
- }
- });
- if (originalGetDefaultComputedStyle) {
- Window.prototype.getDefaultComputedStyle = function(el, pseudo) {
- renderAllPending();
- return originalGetDefaultComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo);
- };
- }
- registerWrapper(OriginalWindow, Window, window);
- scope.wrappers.Window = Window;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var unwrap = scope.unwrap;
- var OriginalDataTransfer = window.DataTransfer || window.Clipboard;
- var OriginalDataTransferSetDragImage = OriginalDataTransfer.prototype.setDragImage;
- if (OriginalDataTransferSetDragImage) {
- OriginalDataTransfer.prototype.setDragImage = function(image, x, y) {
- OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y);
- };
- }
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var registerWrapper = scope.registerWrapper;
- var setWrapper = scope.setWrapper;
- var unwrap = scope.unwrap;
- var OriginalFormData = window.FormData;
- if (!OriginalFormData) return;
- function FormData(formElement) {
- var impl;
- if (formElement instanceof OriginalFormData) {
- impl = formElement;
- } else {
- impl = new OriginalFormData(formElement && unwrap(formElement));
- }
- setWrapper(impl, this);
- }
- registerWrapper(OriginalFormData, FormData, new OriginalFormData());
- scope.wrappers.FormData = FormData;
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var originalSend = XMLHttpRequest.prototype.send;
- XMLHttpRequest.prototype.send = function(obj) {
- return originalSend.call(this, unwrapIfNeeded(obj));
- };
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- "use strict";
- var isWrapperFor = scope.isWrapperFor;
- var elements = {
- a: "HTMLAnchorElement",
- area: "HTMLAreaElement",
- audio: "HTMLAudioElement",
- base: "HTMLBaseElement",
- body: "HTMLBodyElement",
- br: "HTMLBRElement",
- button: "HTMLButtonElement",
- canvas: "HTMLCanvasElement",
- caption: "HTMLTableCaptionElement",
- col: "HTMLTableColElement",
- content: "HTMLContentElement",
- data: "HTMLDataElement",
- datalist: "HTMLDataListElement",
- del: "HTMLModElement",
- dir: "HTMLDirectoryElement",
- div: "HTMLDivElement",
- dl: "HTMLDListElement",
- embed: "HTMLEmbedElement",
- fieldset: "HTMLFieldSetElement",
- font: "HTMLFontElement",
- form: "HTMLFormElement",
- frame: "HTMLFrameElement",
- frameset: "HTMLFrameSetElement",
- h1: "HTMLHeadingElement",
- head: "HTMLHeadElement",
- hr: "HTMLHRElement",
- html: "HTMLHtmlElement",
- iframe: "HTMLIFrameElement",
- img: "HTMLImageElement",
- input: "HTMLInputElement",
- keygen: "HTMLKeygenElement",
- label: "HTMLLabelElement",
- legend: "HTMLLegendElement",
- li: "HTMLLIElement",
- link: "HTMLLinkElement",
- map: "HTMLMapElement",
- marquee: "HTMLMarqueeElement",
- menu: "HTMLMenuElement",
- menuitem: "HTMLMenuItemElement",
- meta: "HTMLMetaElement",
- meter: "HTMLMeterElement",
- object: "HTMLObjectElement",
- ol: "HTMLOListElement",
- optgroup: "HTMLOptGroupElement",
- option: "HTMLOptionElement",
- output: "HTMLOutputElement",
- p: "HTMLParagraphElement",
- param: "HTMLParamElement",
- pre: "HTMLPreElement",
- progress: "HTMLProgressElement",
- q: "HTMLQuoteElement",
- script: "HTMLScriptElement",
- select: "HTMLSelectElement",
- shadow: "HTMLShadowElement",
- source: "HTMLSourceElement",
- span: "HTMLSpanElement",
- style: "HTMLStyleElement",
- table: "HTMLTableElement",
- tbody: "HTMLTableSectionElement",
- template: "HTMLTemplateElement",
- textarea: "HTMLTextAreaElement",
- thead: "HTMLTableSectionElement",
- time: "HTMLTimeElement",
- title: "HTMLTitleElement",
- tr: "HTMLTableRowElement",
- track: "HTMLTrackElement",
- ul: "HTMLUListElement",
- video: "HTMLVideoElement"
- };
- function overrideConstructor(tagName) {
- var nativeConstructorName = elements[tagName];
- var nativeConstructor = window[nativeConstructorName];
- if (!nativeConstructor) return;
- var element = document.createElement(tagName);
- var wrapperConstructor = element.constructor;
- window[nativeConstructorName] = wrapperConstructor;
- }
- Object.keys(elements).forEach(overrideConstructor);
- Object.getOwnPropertyNames(scope.wrappers).forEach(function(name) {
- window[name] = scope.wrappers[name];
- });
- })(window.ShadowDOMPolyfill);
- (function(scope) {
- var ShadowCSS = {
- strictStyling: false,
- registry: {},
- shimStyling: function(root, name, extendsName) {
- var scopeStyles = this.prepareRoot(root, name, extendsName);
- var typeExtension = this.isTypeExtension(extendsName);
- var scopeSelector = this.makeScopeSelector(name, typeExtension);
- var cssText = stylesToCssText(scopeStyles, true);
- cssText = this.scopeCssText(cssText, scopeSelector);
- if (root) {
- root.shimmedStyle = cssText;
- }
- this.addCssToDocument(cssText, name);
- },
- shimStyle: function(style, selector) {
- return this.shimCssText(style.textContent, selector);
- },
- shimCssText: function(cssText, selector) {
- cssText = this.insertDirectives(cssText);
- return this.scopeCssText(cssText, selector);
- },
- makeScopeSelector: function(name, typeExtension) {
- if (name) {
- return typeExtension ? "[is=" + name + "]" : name;
- }
- return "";
- },
- isTypeExtension: function(extendsName) {
- return extendsName && extendsName.indexOf("-") < 0;
- },
- prepareRoot: function(root, name, extendsName) {
- var def = this.registerRoot(root, name, extendsName);
- this.replaceTextInStyles(def.rootStyles, this.insertDirectives);
- this.removeStyles(root, def.rootStyles);
- if (this.strictStyling) {
- this.applyScopeToContent(root, name);
- }
- return def.scopeStyles;
- },
- removeStyles: function(root, styles) {
- for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
- s.parentNode.removeChild(s);
- }
- },
- registerRoot: function(root, name, extendsName) {
- var def = this.registry[name] = {
- root: root,
- name: name,
- extendsName: extendsName
- };
- var styles = this.findStyles(root);
- def.rootStyles = styles;
- def.scopeStyles = def.rootStyles;
- var extendee = this.registry[def.extendsName];
- if (extendee) {
- def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);
- }
- return def;
- },
- findStyles: function(root) {
- if (!root) {
- return [];
- }
- var styles = root.querySelectorAll("style");
- return Array.prototype.filter.call(styles, function(s) {
- return !s.hasAttribute(NO_SHIM_ATTRIBUTE);
- });
- },
- applyScopeToContent: function(root, name) {
- if (root) {
- Array.prototype.forEach.call(root.querySelectorAll("*"), function(node) {
- node.setAttribute(name, "");
- });
- Array.prototype.forEach.call(root.querySelectorAll("template"), function(template) {
- this.applyScopeToContent(template.content, name);
- }, this);
- }
- },
- insertDirectives: function(cssText) {
- cssText = this.insertPolyfillDirectivesInCssText(cssText);
- return this.insertPolyfillRulesInCssText(cssText);
- },
- insertPolyfillDirectivesInCssText: function(cssText) {
- cssText = cssText.replace(cssCommentNextSelectorRe, function(match, p1) {
- return p1.slice(0, -2) + "{";
- });
- return cssText.replace(cssContentNextSelectorRe, function(match, p1) {
- return p1 + " {";
- });
- },
- insertPolyfillRulesInCssText: function(cssText) {
- cssText = cssText.replace(cssCommentRuleRe, function(match, p1) {
- return p1.slice(0, -1);
- });
- return cssText.replace(cssContentRuleRe, function(match, p1, p2, p3) {
- var rule = match.replace(p1, "").replace(p2, "");
- return p3 + rule;
- });
- },
- scopeCssText: function(cssText, scopeSelector) {
- var unscoped = this.extractUnscopedRulesFromCssText(cssText);
- cssText = this.insertPolyfillHostInCssText(cssText);
- cssText = this.convertColonHost(cssText);
- cssText = this.convertColonHostContext(cssText);
- cssText = this.convertShadowDOMSelectors(cssText);
- if (scopeSelector) {
- var self = this, cssText;
- withCssRules(cssText, function(rules) {
- cssText = self.scopeRules(rules, scopeSelector);
- });
- }
- cssText = cssText + "\n" + unscoped;
- return cssText.trim();
- },
- extractUnscopedRulesFromCssText: function(cssText) {
- var r = "", m;
- while (m = cssCommentUnscopedRuleRe.exec(cssText)) {
- r += m[1].slice(0, -1) + "\n\n";
- }
- while (m = cssContentUnscopedRuleRe.exec(cssText)) {
- r += m[0].replace(m[2], "").replace(m[1], m[3]) + "\n\n";
- }
- return r;
- },
- convertColonHost: function(cssText) {
- return this.convertColonRule(cssText, cssColonHostRe, this.colonHostPartReplacer);
- },
- convertColonHostContext: function(cssText) {
- return this.convertColonRule(cssText, cssColonHostContextRe, this.colonHostContextPartReplacer);
- },
- convertColonRule: function(cssText, regExp, partReplacer) {
- return cssText.replace(regExp, function(m, p1, p2, p3) {
- p1 = polyfillHostNoCombinator;
- if (p2) {
- var parts = p2.split(","), r = [];
- for (var i = 0, l = parts.length, p; i < l && (p = parts[i]); i++) {
- p = p.trim();
- r.push(partReplacer(p1, p, p3));
- }
- return r.join(",");
- } else {
- return p1 + p3;
- }
- });
- },
- colonHostContextPartReplacer: function(host, part, suffix) {
- if (part.match(polyfillHost)) {
- return this.colonHostPartReplacer(host, part, suffix);
- } else {
- return host + part + suffix + ", " + part + " " + host + suffix;
- }
- },
- colonHostPartReplacer: function(host, part, suffix) {
- return host + part.replace(polyfillHost, "") + suffix;
- },
- convertShadowDOMSelectors: function(cssText) {
- for (var i = 0; i < shadowDOMSelectorsRe.length; i++) {
- cssText = cssText.replace(shadowDOMSelectorsRe[i], " ");
- }
- return cssText;
- },
- scopeRules: function(cssRules, scopeSelector) {
- var cssText = "";
- if (cssRules) {
- Array.prototype.forEach.call(cssRules, function(rule) {
- if (rule.selectorText && (rule.style && rule.style.cssText !== undefined)) {
- cssText += this.scopeSelector(rule.selectorText, scopeSelector, this.strictStyling) + " {\n ";
- cssText += this.propertiesFromRule(rule) + "\n}\n\n";
- } else if (rule.type === CSSRule.MEDIA_RULE) {
- cssText += "@media " + rule.media.mediaText + " {\n";
- cssText += this.scopeRules(rule.cssRules, scopeSelector);
- cssText += "\n}\n\n";
- } else {
- try {
- if (rule.cssText) {
- cssText += rule.cssText + "\n\n";
- }
- } catch (x) {
- if (rule.type === CSSRule.KEYFRAMES_RULE && rule.cssRules) {
- cssText += this.ieSafeCssTextFromKeyFrameRule(rule);
- }
- }
- }
- }, this);
- }
- return cssText;
- },
- ieSafeCssTextFromKeyFrameRule: function(rule) {
- var cssText = "@keyframes " + rule.name + " {";
- Array.prototype.forEach.call(rule.cssRules, function(rule) {
- cssText += " " + rule.keyText + " {" + rule.style.cssText + "}";
- });
- cssText += " }";
- return cssText;
- },
- scopeSelector: function(selector, scopeSelector, strict) {
- var r = [], parts = selector.split(",");
- parts.forEach(function(p) {
- p = p.trim();
- if (this.selectorNeedsScoping(p, scopeSelector)) {
- p = strict && !p.match(polyfillHostNoCombinator) ? this.applyStrictSelectorScope(p, scopeSelector) : this.applySelectorScope(p, scopeSelector);
- }
- r.push(p);
- }, this);
- return r.join(", ");
- },
- selectorNeedsScoping: function(selector, scopeSelector) {
- if (Array.isArray(scopeSelector)) {
- return true;
- }
- var re = this.makeScopeMatcher(scopeSelector);
- return !selector.match(re);
- },
- makeScopeMatcher: function(scopeSelector) {
- scopeSelector = scopeSelector.replace(/\[/g, "\\[").replace(/\]/g, "\\]");
- return new RegExp("^(" + scopeSelector + ")" + selectorReSuffix, "m");
- },
- applySelectorScope: function(selector, selectorScope) {
- return Array.isArray(selectorScope) ? this.applySelectorScopeList(selector, selectorScope) : this.applySimpleSelectorScope(selector, selectorScope);
- },
- applySelectorScopeList: function(selector, scopeSelectorList) {
- var r = [];
- for (var i = 0, s; s = scopeSelectorList[i]; i++) {
- r.push(this.applySimpleSelectorScope(selector, s));
- }
- return r.join(", ");
- },
- applySimpleSelectorScope: function(selector, scopeSelector) {
- if (selector.match(polyfillHostRe)) {
- selector = selector.replace(polyfillHostNoCombinator, scopeSelector);
- return selector.replace(polyfillHostRe, scopeSelector + " ");
- } else {
- return scopeSelector + " " + selector;
- }
- },
- applyStrictSelectorScope: function(selector, scopeSelector) {
- scopeSelector = scopeSelector.replace(/\[is=([^\]]*)\]/g, "$1");
- var splits = [ " ", ">", "+", "~" ], scoped = selector, attrName = "[" + scopeSelector + "]";
- splits.forEach(function(sep) {
- var parts = scoped.split(sep);
- scoped = parts.map(function(p) {
- var t = p.trim().replace(polyfillHostRe, "");
- if (t && splits.indexOf(t) < 0 && t.indexOf(attrName) < 0) {
- p = t.replace(/([^:]*)(:*)(.*)/, "$1" + attrName + "$2$3");
- }
- return p;
- }).join(sep);
- });
- return scoped;
- },
- insertPolyfillHostInCssText: function(selector) {
- return selector.replace(colonHostContextRe, polyfillHostContext).replace(colonHostRe, polyfillHost);
- },
- propertiesFromRule: function(rule) {
- var cssText = rule.style.cssText;
- if (rule.style.content && !rule.style.content.match(/['"]+|attr/)) {
- cssText = cssText.replace(/content:[^;]*;/g, "content: '" + rule.style.content + "';");
- }
- var style = rule.style;
- for (var i in style) {
- if (style[i] === "initial") {
- cssText += i + ": initial; ";
- }
- }
- return cssText;
- },
- replaceTextInStyles: function(styles, action) {
- if (styles && action) {
- if (!(styles instanceof Array)) {
- styles = [ styles ];
- }
- Array.prototype.forEach.call(styles, function(s) {
- s.textContent = action.call(this, s.textContent);
- }, this);
- }
- },
- addCssToDocument: function(cssText, name) {
- if (cssText.match("@import")) {
- addOwnSheet(cssText, name);
- } else {
- addCssToDocument(cssText);
- }
- }
- };
- var selectorRe = /([^{]*)({[\s\S]*?})/gim, cssCommentRe = /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim, cssCommentNextSelectorRe = /\/\*\s*@polyfill ([^*]*\*+([^\/*][^*]*\*+)*\/)([^{]*?){/gim, cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim, cssCommentRuleRe = /\/\*\s@polyfill-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim, cssContentRuleRe = /(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim, cssCommentUnscopedRuleRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim, cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim, cssPseudoRe = /::(x-[^\s{,(]*)/gim, cssPartRe = /::part\(([^)]*)\)/gim, polyfillHost = "-shadowcsshost", polyfillHostContext = "-shadowcsscontext", parenSuffix = ")(?:\\((" + "(?:\\([^)(]*\\)|[^)(]*)+?" + ")\\))?([^,{]*)";
- var cssColonHostRe = new RegExp("(" + polyfillHost + parenSuffix, "gim"), cssColonHostContextRe = new RegExp("(" + polyfillHostContext + parenSuffix, "gim"), selectorReSuffix = "([>\\s~+[.,{:][\\s\\S]*)?$", colonHostRe = /\:host/gim, colonHostContextRe = /\:host-context/gim, polyfillHostNoCombinator = polyfillHost + "-no-combinator", polyfillHostRe = new RegExp(polyfillHost, "gim"), polyfillHostContextRe = new RegExp(polyfillHostContext, "gim"), shadowDOMSelectorsRe = [ />>>/g, /::shadow/g, /::content/g, /\/deep\//g, /\/shadow\//g, /\/shadow-deep\//g, /\^\^/g, /\^/g ];
- function stylesToCssText(styles, preserveComments) {
- var cssText = "";
- Array.prototype.forEach.call(styles, function(s) {
- cssText += s.textContent + "\n\n";
- });
- if (!preserveComments) {
- cssText = cssText.replace(cssCommentRe, "");
- }
- return cssText;
- }
- function cssTextToStyle(cssText) {
- var style = document.createElement("style");
- style.textContent = cssText;
- return style;
- }
- function cssToRules(cssText) {
- var style = cssTextToStyle(cssText);
- document.head.appendChild(style);
- var rules = [];
- if (style.sheet) {
- try {
- rules = style.sheet.cssRules;
- } catch (e) {}
- } else {
- console.warn("sheet not found", style);
- }
- style.parentNode.removeChild(style);
- return rules;
- }
- var frame = document.createElement("iframe");
- frame.style.display = "none";
- function initFrame() {
- frame.initialized = true;
- document.body.appendChild(frame);
- var doc = frame.contentDocument;
- var base = doc.createElement("base");
- base.href = document.baseURI;
- doc.head.appendChild(base);
- }
- function inFrame(fn) {
- if (!frame.initialized) {
- initFrame();
- }
- document.body.appendChild(frame);
- fn(frame.contentDocument);
- document.body.removeChild(frame);
- }
- var isChrome = navigator.userAgent.match("Chrome");
- function withCssRules(cssText, callback) {
- if (!callback) {
- return;
- }
- var rules;
- if (cssText.match("@import") && isChrome) {
- var style = cssTextToStyle(cssText);
- inFrame(function(doc) {
- doc.head.appendChild(style.impl);
- rules = Array.prototype.slice.call(style.sheet.cssRules, 0);
- callback(rules);
- });
- } else {
- rules = cssToRules(cssText);
- callback(rules);
- }
- }
- function rulesToCss(cssRules) {
- for (var i = 0, css = []; i < cssRules.length; i++) {
- css.push(cssRules[i].cssText);
- }
- return css.join("\n\n");
- }
- function addCssToDocument(cssText) {
- if (cssText) {
- getSheet().appendChild(document.createTextNode(cssText));
- }
- }
- function addOwnSheet(cssText, name) {
- var style = cssTextToStyle(cssText);
- style.setAttribute(name, "");
- style.setAttribute(SHIMMED_ATTRIBUTE, "");
- document.head.appendChild(style);
- }
- var SHIM_ATTRIBUTE = "shim-shadowdom";
- var SHIMMED_ATTRIBUTE = "shim-shadowdom-css";
- var NO_SHIM_ATTRIBUTE = "no-shim";
- var sheet;
- function getSheet() {
- if (!sheet) {
- sheet = document.createElement("style");
- sheet.setAttribute(SHIMMED_ATTRIBUTE, "");
- sheet[SHIMMED_ATTRIBUTE] = true;
- }
- return sheet;
- }
- if (window.ShadowDOMPolyfill) {
- addCssToDocument("style { display: none !important; }\n");
- var doc = ShadowDOMPolyfill.wrap(document);
- var head = doc.querySelector("head");
- head.insertBefore(getSheet(), head.childNodes[0]);
- document.addEventListener("DOMContentLoaded", function() {
- var urlResolver = scope.urlResolver;
- if (window.HTMLImports && !HTMLImports.useNative) {
- var SHIM_SHEET_SELECTOR = "link[rel=stylesheet]" + "[" + SHIM_ATTRIBUTE + "]";
- var SHIM_STYLE_SELECTOR = "style[" + SHIM_ATTRIBUTE + "]";
- HTMLImports.importer.documentPreloadSelectors += "," + SHIM_SHEET_SELECTOR;
- HTMLImports.importer.importsPreloadSelectors += "," + SHIM_SHEET_SELECTOR;
- HTMLImports.parser.documentSelectors = [ HTMLImports.parser.documentSelectors, SHIM_SHEET_SELECTOR, SHIM_STYLE_SELECTOR ].join(",");
- var originalParseGeneric = HTMLImports.parser.parseGeneric;
- HTMLImports.parser.parseGeneric = function(elt) {
- if (elt[SHIMMED_ATTRIBUTE]) {
- return;
- }
- var style = elt.__importElement || elt;
- if (!style.hasAttribute(SHIM_ATTRIBUTE)) {
- originalParseGeneric.call(this, elt);
- return;
- }
- if (elt.__resource) {
- style = elt.ownerDocument.createElement("style");
- style.textContent = elt.__resource;
- }
- HTMLImports.path.resolveUrlsInStyle(style, elt.href);
- style.textContent = ShadowCSS.shimStyle(style);
- style.removeAttribute(SHIM_ATTRIBUTE, "");
- style.setAttribute(SHIMMED_ATTRIBUTE, "");
- style[SHIMMED_ATTRIBUTE] = true;
- if (style.parentNode !== head) {
- if (elt.parentNode === head) {
- head.replaceChild(style, elt);
- } else {
- this.addElementToDocument(style);
- }
- }
- style.__importParsed = true;
- this.markParsingComplete(elt);
- this.parseNext();
- };
- var hasResource = HTMLImports.parser.hasResource;
- HTMLImports.parser.hasResource = function(node) {
- if (node.localName === "link" && node.rel === "stylesheet" && node.hasAttribute(SHIM_ATTRIBUTE)) {
- return node.__resource;
- } else {
- return hasResource.call(this, node);
- }
- };
- }
- });
- }
- scope.ShadowCSS = ShadowCSS;
- })(window.WebComponents);
-}
-
-(function(scope) {
- if (window.ShadowDOMPolyfill) {
- window.wrap = ShadowDOMPolyfill.wrapIfNeeded;
- window.unwrap = ShadowDOMPolyfill.unwrapIfNeeded;
- } else {
- window.wrap = window.unwrap = function(n) {
- return n;
- };
- }
-})(window.WebComponents);
-
-(function(scope) {
- "use strict";
- var hasWorkingUrl = false;
- if (!scope.forceJURL) {
- try {
- var u = new URL("b", "http://a");
- u.pathname = "c%20d";
- hasWorkingUrl = u.href === "http://a/c%20d";
- } catch (e) {}
- }
- if (hasWorkingUrl) return;
- var relative = Object.create(null);
- relative["ftp"] = 21;
- relative["file"] = 0;
- relative["gopher"] = 70;
- relative["http"] = 80;
- relative["https"] = 443;
- relative["ws"] = 80;
- relative["wss"] = 443;
- var relativePathDotMapping = Object.create(null);
- relativePathDotMapping["%2e"] = ".";
- relativePathDotMapping[".%2e"] = "..";
- relativePathDotMapping["%2e."] = "..";
- relativePathDotMapping["%2e%2e"] = "..";
- function isRelativeScheme(scheme) {
- return relative[scheme] !== undefined;
- }
- function invalid() {
- clear.call(this);
- this._isInvalid = true;
- }
- function IDNAToASCII(h) {
- if ("" == h) {
- invalid.call(this);
- }
- return h.toLowerCase();
- }
- function percentEscape(c) {
- var unicode = c.charCodeAt(0);
- if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 63, 96 ].indexOf(unicode) == -1) {
- return c;
- }
- return encodeURIComponent(c);
- }
- function percentEscapeQuery(c) {
- var unicode = c.charCodeAt(0);
- if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 96 ].indexOf(unicode) == -1) {
- return c;
- }
- return encodeURIComponent(c);
- }
- var EOF = undefined, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/;
- function parse(input, stateOverride, base) {
- function err(message) {
- errors.push(message);
- }
- var state = stateOverride || "scheme start", cursor = 0, buffer = "", seenAt = false, seenBracket = false, errors = [];
- loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) {
- var c = input[cursor];
- switch (state) {
- case "scheme start":
- if (c && ALPHA.test(c)) {
- buffer += c.toLowerCase();
- state = "scheme";
- } else if (!stateOverride) {
- buffer = "";
- state = "no scheme";
- continue;
- } else {
- err("Invalid scheme.");
- break loop;
- }
- break;
-
- case "scheme":
- if (c && ALPHANUMERIC.test(c)) {
- buffer += c.toLowerCase();
- } else if (":" == c) {
- this._scheme = buffer;
- buffer = "";
- if (stateOverride) {
- break loop;
- }
- if (isRelativeScheme(this._scheme)) {
- this._isRelative = true;
- }
- if ("file" == this._scheme) {
- state = "relative";
- } else if (this._isRelative && base && base._scheme == this._scheme) {
- state = "relative or authority";
- } else if (this._isRelative) {
- state = "authority first slash";
- } else {
- state = "scheme data";
- }
- } else if (!stateOverride) {
- buffer = "";
- cursor = 0;
- state = "no scheme";
- continue;
- } else if (EOF == c) {
- break loop;
- } else {
- err("Code point not allowed in scheme: " + c);
- break loop;
- }
- break;
-
- case "scheme data":
- if ("?" == c) {
- this._query = "?";
- state = "query";
- } else if ("#" == c) {
- this._fragment = "#";
- state = "fragment";
- } else {
- if (EOF != c && " " != c && "\n" != c && "\r" != c) {
- this._schemeData += percentEscape(c);
- }
- }
- break;
-
- case "no scheme":
- if (!base || !isRelativeScheme(base._scheme)) {
- err("Missing scheme.");
- invalid.call(this);
- } else {
- state = "relative";
- continue;
- }
- break;
-
- case "relative or authority":
- if ("/" == c && "/" == input[cursor + 1]) {
- state = "authority ignore slashes";
- } else {
- err("Expected /, got: " + c);
- state = "relative";
- continue;
- }
- break;
-
- case "relative":
- this._isRelative = true;
- if ("file" != this._scheme) this._scheme = base._scheme;
- if (EOF == c) {
- this._host = base._host;
- this._port = base._port;
- this._path = base._path.slice();
- this._query = base._query;
- this._username = base._username;
- this._password = base._password;
- break loop;
- } else if ("/" == c || "\\" == c) {
- if ("\\" == c) err("\\ is an invalid code point.");
- state = "relative slash";
- } else if ("?" == c) {
- this._host = base._host;
- this._port = base._port;
- this._path = base._path.slice();
- this._query = "?";
- this._username = base._username;
- this._password = base._password;
- state = "query";
- } else if ("#" == c) {
- this._host = base._host;
- this._port = base._port;
- this._path = base._path.slice();
- this._query = base._query;
- this._fragment = "#";
- this._username = base._username;
- this._password = base._password;
- state = "fragment";
- } else {
- var nextC = input[cursor + 1];
- var nextNextC = input[cursor + 2];
- if ("file" != this._scheme || !ALPHA.test(c) || nextC != ":" && nextC != "|" || EOF != nextNextC && "/" != nextNextC && "\\" != nextNextC && "?" != nextNextC && "#" != nextNextC) {
- this._host = base._host;
- this._port = base._port;
- this._username = base._username;
- this._password = base._password;
- this._path = base._path.slice();
- this._path.pop();
- }
- state = "relative path";
- continue;
- }
- break;
-
- case "relative slash":
- if ("/" == c || "\\" == c) {
- if ("\\" == c) {
- err("\\ is an invalid code point.");
- }
- if ("file" == this._scheme) {
- state = "file host";
- } else {
- state = "authority ignore slashes";
- }
- } else {
- if ("file" != this._scheme) {
- this._host = base._host;
- this._port = base._port;
- this._username = base._username;
- this._password = base._password;
- }
- state = "relative path";
- continue;
- }
- break;
-
- case "authority first slash":
- if ("/" == c) {
- state = "authority second slash";
- } else {
- err("Expected '/', got: " + c);
- state = "authority ignore slashes";
- continue;
- }
- break;
-
- case "authority second slash":
- state = "authority ignore slashes";
- if ("/" != c) {
- err("Expected '/', got: " + c);
- continue;
- }
- break;
-
- case "authority ignore slashes":
- if ("/" != c && "\\" != c) {
- state = "authority";
- continue;
- } else {
- err("Expected authority, got: " + c);
- }
- break;
-
- case "authority":
- if ("@" == c) {
- if (seenAt) {
- err("@ already seen.");
- buffer += "%40";
- }
- seenAt = true;
- for (var i = 0; i < buffer.length; i++) {
- var cp = buffer[i];
- if (" " == cp || "\n" == cp || "\r" == cp) {
- err("Invalid whitespace in authority.");
- continue;
- }
- if (":" == cp && null === this._password) {
- this._password = "";
- continue;
- }
- var tempC = percentEscape(cp);
- null !== this._password ? this._password += tempC : this._username += tempC;
- }
- buffer = "";
- } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
- cursor -= buffer.length;
- buffer = "";
- state = "host";
- continue;
- } else {
- buffer += c;
- }
- break;
-
- case "file host":
- if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
- if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ":" || buffer[1] == "|")) {
- state = "relative path";
- } else if (buffer.length == 0) {
- state = "relative path start";
- } else {
- this._host = IDNAToASCII.call(this, buffer);
- buffer = "";
- state = "relative path start";
- }
- continue;
- } else if (" " == c || "\n" == c || "\r" == c) {
- err("Invalid whitespace in file host.");
- } else {
- buffer += c;
- }
- break;
-
- case "host":
- case "hostname":
- if (":" == c && !seenBracket) {
- this._host = IDNAToASCII.call(this, buffer);
- buffer = "";
- state = "port";
- if ("hostname" == stateOverride) {
- break loop;
- }
- } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
- this._host = IDNAToASCII.call(this, buffer);
- buffer = "";
- state = "relative path start";
- if (stateOverride) {
- break loop;
- }
- continue;
- } else if (" " != c && "\n" != c && "\r" != c) {
- if ("[" == c) {
- seenBracket = true;
- } else if ("]" == c) {
- seenBracket = false;
- }
- buffer += c;
- } else {
- err("Invalid code point in host/hostname: " + c);
- }
- break;
-
- case "port":
- if (/[0-9]/.test(c)) {
- buffer += c;
- } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c || stateOverride) {
- if ("" != buffer) {
- var temp = parseInt(buffer, 10);
- if (temp != relative[this._scheme]) {
- this._port = temp + "";
- }
- buffer = "";
- }
- if (stateOverride) {
- break loop;
- }
- state = "relative path start";
- continue;
- } else if (" " == c || "\n" == c || "\r" == c) {
- err("Invalid code point in port: " + c);
- } else {
- invalid.call(this);
- }
- break;
-
- case "relative path start":
- if ("\\" == c) err("'\\' not allowed in path.");
- state = "relative path";
- if ("/" != c && "\\" != c) {
- continue;
- }
- break;
-
- case "relative path":
- if (EOF == c || "/" == c || "\\" == c || !stateOverride && ("?" == c || "#" == c)) {
- if ("\\" == c) {
- err("\\ not allowed in relative path.");
- }
- var tmp;
- if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {
- buffer = tmp;
- }
- if (".." == buffer) {
- this._path.pop();
- if ("/" != c && "\\" != c) {
- this._path.push("");
- }
- } else if ("." == buffer && "/" != c && "\\" != c) {
- this._path.push("");
- } else if ("." != buffer) {
- if ("file" == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == "|") {
- buffer = buffer[0] + ":";
- }
- this._path.push(buffer);
- }
- buffer = "";
- if ("?" == c) {
- this._query = "?";
- state = "query";
- } else if ("#" == c) {
- this._fragment = "#";
- state = "fragment";
- }
- } else if (" " != c && "\n" != c && "\r" != c) {
- buffer += percentEscape(c);
- }
- break;
-
- case "query":
- if (!stateOverride && "#" == c) {
- this._fragment = "#";
- state = "fragment";
- } else if (EOF != c && " " != c && "\n" != c && "\r" != c) {
- this._query += percentEscapeQuery(c);
- }
- break;
-
- case "fragment":
- if (EOF != c && " " != c && "\n" != c && "\r" != c) {
- this._fragment += c;
- }
- break;
- }
- cursor++;
- }
- }
- function clear() {
- this._scheme = "";
- this._schemeData = "";
- this._username = "";
- this._password = null;
- this._host = "";
- this._port = "";
- this._path = [];
- this._query = "";
- this._fragment = "";
- this._isInvalid = false;
- this._isRelative = false;
- }
- function jURL(url, base) {
- if (base !== undefined && !(base instanceof jURL)) base = new jURL(String(base));
- this._url = url;
- clear.call(this);
- var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, "");
- parse.call(this, input, null, base);
- }
- jURL.prototype = {
- toString: function() {
- return this.href;
- },
- get href() {
- if (this._isInvalid) return this._url;
- var authority = "";
- if ("" != this._username || null != this._password) {
- authority = this._username + (null != this._password ? ":" + this._password : "") + "@";
- }
- return this.protocol + (this._isRelative ? "//" + authority + this.host : "") + this.pathname + this._query + this._fragment;
- },
- set href(href) {
- clear.call(this);
- parse.call(this, href);
- },
- get protocol() {
- return this._scheme + ":";
- },
- set protocol(protocol) {
- if (this._isInvalid) return;
- parse.call(this, protocol + ":", "scheme start");
- },
- get host() {
- return this._isInvalid ? "" : this._port ? this._host + ":" + this._port : this._host;
- },
- set host(host) {
- if (this._isInvalid || !this._isRelative) return;
- parse.call(this, host, "host");
- },
- get hostname() {
- return this._host;
- },
- set hostname(hostname) {
- if (this._isInvalid || !this._isRelative) return;
- parse.call(this, hostname, "hostname");
- },
- get port() {
- return this._port;
- },
- set port(port) {
- if (this._isInvalid || !this._isRelative) return;
- parse.call(this, port, "port");
- },
- get pathname() {
- return this._isInvalid ? "" : this._isRelative ? "/" + this._path.join("/") : this._schemeData;
- },
- set pathname(pathname) {
- if (this._isInvalid || !this._isRelative) return;
- this._path = [];
- parse.call(this, pathname, "relative path start");
- },
- get search() {
- return this._isInvalid || !this._query || "?" == this._query ? "" : this._query;
- },
- set search(search) {
- if (this._isInvalid || !this._isRelative) return;
- this._query = "?";
- if ("?" == search[0]) search = search.slice(1);
- parse.call(this, search, "query");
- },
- get hash() {
- return this._isInvalid || !this._fragment || "#" == this._fragment ? "" : this._fragment;
- },
- set hash(hash) {
- if (this._isInvalid) return;
- this._fragment = "#";
- if ("#" == hash[0]) hash = hash.slice(1);
- parse.call(this, hash, "fragment");
- },
- get origin() {
- var host;
- if (this._isInvalid || !this._scheme) {
- return "";
- }
- switch (this._scheme) {
- case "data":
- case "file":
- case "javascript":
- case "mailto":
- return "null";
- }
- host = this.host;
- if (!host) {
- return "";
- }
- return this._scheme + "://" + host;
- }
- };
- var OriginalURL = scope.URL;
- if (OriginalURL) {
- jURL.createObjectURL = function(blob) {
- return OriginalURL.createObjectURL.apply(OriginalURL, arguments);
- };
- jURL.revokeObjectURL = function(url) {
- OriginalURL.revokeObjectURL(url);
- };
- }
- scope.URL = jURL;
-})(self);
-
-(function(global) {
- if (global.JsMutationObserver) {
- return;
- }
- var registrationsTable = new WeakMap();
- var setImmediate;
- if (/Trident|Edge/.test(navigator.userAgent)) {
- setImmediate = setTimeout;
- } else if (window.setImmediate) {
- setImmediate = window.setImmediate;
- } else {
- var setImmediateQueue = [];
- var sentinel = String(Math.random());
- window.addEventListener("message", function(e) {
- if (e.data === sentinel) {
- var queue = setImmediateQueue;
- setImmediateQueue = [];
- queue.forEach(function(func) {
- func();
- });
- }
- });
- setImmediate = function(func) {
- setImmediateQueue.push(func);
- window.postMessage(sentinel, "*");
- };
- }
- var isScheduled = false;
- var scheduledObservers = [];
- function scheduleCallback(observer) {
- scheduledObservers.push(observer);
- if (!isScheduled) {
- isScheduled = true;
- setImmediate(dispatchCallbacks);
- }
- }
- function wrapIfNeeded(node) {
- return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
- }
- function dispatchCallbacks() {
- isScheduled = false;
- var observers = scheduledObservers;
- scheduledObservers = [];
- observers.sort(function(o1, o2) {
- return o1.uid_ - o2.uid_;
- });
- var anyNonEmpty = false;
- observers.forEach(function(observer) {
- var queue = observer.takeRecords();
- removeTransientObserversFor(observer);
- if (queue.length) {
- observer.callback_(queue, observer);
- anyNonEmpty = true;
- }
- });
- if (anyNonEmpty) dispatchCallbacks();
- }
- function removeTransientObserversFor(observer) {
- observer.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- if (!registrations) return;
- registrations.forEach(function(registration) {
- if (registration.observer === observer) registration.removeTransientObservers();
- });
- });
- }
- function forEachAncestorAndObserverEnqueueRecord(target, callback) {
- for (var node = target; node; node = node.parentNode) {
- var registrations = registrationsTable.get(node);
- if (registrations) {
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- if (node !== target && !options.subtree) continue;
- var record = callback(options);
- if (record) registration.enqueue(record);
- }
- }
- }
- }
- var uidCounter = 0;
- function JsMutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
- }
- JsMutationObserver.prototype = {
- observe: function(target, options) {
- target = wrapIfNeeded(target);
- if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
- throw new SyntaxError();
- }
- var registrations = registrationsTable.get(target);
- if (!registrations) registrationsTable.set(target, registrations = []);
- var registration;
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- registration.removeListeners();
- registration.options = options;
- break;
- }
- }
- if (!registration) {
- registration = new Registration(this, target, options);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- registration.addListeners();
- },
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registration.removeListeners();
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = [];
- this.removedNodes = [];
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
- function copyMutationRecord(original) {
- var record = new MutationRecord(original.type, original.target);
- record.addedNodes = original.addedNodes.slice();
- record.removedNodes = original.removedNodes.slice();
- record.previousSibling = original.previousSibling;
- record.nextSibling = original.nextSibling;
- record.attributeName = original.attributeName;
- record.attributeNamespace = original.attributeNamespace;
- record.oldValue = original.oldValue;
- return record;
- }
- var currentRecord, recordWithOldValue;
- function getRecord(type, target) {
- return currentRecord = new MutationRecord(type, target);
- }
- function getRecordWithOldValue(oldValue) {
- if (recordWithOldValue) return recordWithOldValue;
- recordWithOldValue = copyMutationRecord(currentRecord);
- recordWithOldValue.oldValue = oldValue;
- return recordWithOldValue;
- }
- function clearRecords() {
- currentRecord = recordWithOldValue = undefined;
- }
- function recordRepresentsCurrentMutation(record) {
- return record === recordWithOldValue || record === currentRecord;
- }
- function selectRecord(lastRecord, newRecord) {
- if (lastRecord === newRecord) return lastRecord;
- if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
- return null;
- }
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
- Registration.prototype = {
- enqueue: function(record) {
- var records = this.observer.records_;
- var length = records.length;
- if (records.length > 0) {
- var lastRecord = records[length - 1];
- var recordToReplaceLast = selectRecord(lastRecord, record);
- if (recordToReplaceLast) {
- records[length - 1] = recordToReplaceLast;
- return;
- }
- } else {
- scheduleCallback(this.observer);
- }
- records[length] = record;
- },
- addListeners: function() {
- this.addListeners_(this.target);
- },
- addListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
- },
- removeListeners: function() {
- this.removeListeners_(this.target);
- },
- removeListeners_: function(node) {
- var options = this.options;
- if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
- if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
- if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
- if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
- },
- addTransientObserver: function(node) {
- if (node === this.target) return;
- this.addListeners_(node);
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations) registrationsTable.set(node, registrations = []);
- registrations.push(this);
- },
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
- transientObservedNodes.forEach(function(node) {
- this.removeListeners_(node);
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i] === this) {
- registrations.splice(i, 1);
- break;
- }
- }
- }, this);
- },
- handleEvent: function(e) {
- e.stopImmediatePropagation();
- switch (e.type) {
- case "DOMAttrModified":
- var name = e.attrName;
- var namespace = e.relatedNode.namespaceURI;
- var target = e.target;
- var record = new getRecord("attributes", target);
- record.attributeName = name;
- record.attributeNamespace = namespace;
- var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.attributes) return;
- if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
- return;
- }
- if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMCharacterDataModified":
- var target = e.target;
- var record = getRecord("characterData", target);
- var oldValue = e.prevValue;
- forEachAncestorAndObserverEnqueueRecord(target, function(options) {
- if (!options.characterData) return;
- if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
- return record;
- });
- break;
-
- case "DOMNodeRemoved":
- this.addTransientObserver(e.target);
-
- case "DOMNodeInserted":
- var changedNode = e.target;
- var addedNodes, removedNodes;
- if (e.type === "DOMNodeInserted") {
- addedNodes = [ changedNode ];
- removedNodes = [];
- } else {
- addedNodes = [];
- removedNodes = [ changedNode ];
- }
- var previousSibling = changedNode.previousSibling;
- var nextSibling = changedNode.nextSibling;
- var record = getRecord("childList", e.target.parentNode);
- record.addedNodes = addedNodes;
- record.removedNodes = removedNodes;
- record.previousSibling = previousSibling;
- record.nextSibling = nextSibling;
- forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
- if (!options.childList) return;
- return record;
- });
- }
- clearRecords();
- }
- };
- global.JsMutationObserver = JsMutationObserver;
- if (!global.MutationObserver) {
- global.MutationObserver = JsMutationObserver;
- JsMutationObserver._isPolyfilled = true;
- }
-})(self);
-
-(function(scope) {
- "use strict";
- if (!window.performance) {
- var start = Date.now();
- window.performance = {
- now: function() {
- return Date.now() - start;
- }
- };
- }
- if (!window.requestAnimationFrame) {
- window.requestAnimationFrame = function() {
- var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
- return nativeRaf ? function(callback) {
- return nativeRaf(function() {
- callback(performance.now());
- });
- } : function(callback) {
- return window.setTimeout(callback, 1e3 / 60);
- };
- }();
- }
- if (!window.cancelAnimationFrame) {
- window.cancelAnimationFrame = function() {
- return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) {
- clearTimeout(id);
- };
- }();
- }
- var workingDefaultPrevented = function() {
- var e = document.createEvent("Event");
- e.initEvent("foo", true, true);
- e.preventDefault();
- return e.defaultPrevented;
- }();
- if (!workingDefaultPrevented) {
- var origPreventDefault = Event.prototype.preventDefault;
- Event.prototype.preventDefault = function() {
- if (!this.cancelable) {
- return;
- }
- origPreventDefault.call(this);
- Object.defineProperty(this, "defaultPrevented", {
- get: function() {
- return true;
- },
- configurable: true
- });
- };
- }
- var isIE = /Trident/.test(navigator.userAgent);
- if (!window.CustomEvent || isIE && typeof window.CustomEvent !== "function") {
- window.CustomEvent = function(inType, params) {
- params = params || {};
- var e = document.createEvent("CustomEvent");
- e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);
- return e;
- };
- window.CustomEvent.prototype = window.Event.prototype;
- }
- if (!window.Event || isIE && typeof window.Event !== "function") {
- var origEvent = window.Event;
- window.Event = function(inType, params) {
- params = params || {};
- var e = document.createEvent("Event");
- e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));
- return e;
- };
- window.Event.prototype = origEvent.prototype;
- }
-})(window.WebComponents);
-
-window.HTMLImports = window.HTMLImports || {
- flags: {}
-};
-
-(function(scope) {
- var IMPORT_LINK_TYPE = "import";
- var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link"));
- var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill);
- var wrap = function(node) {
- return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node;
- };
- var rootDocument = wrap(document);
- var currentScriptDescriptor = {
- get: function() {
- var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null);
- return wrap(script);
- },
- configurable: true
- };
- Object.defineProperty(document, "_currentScript", currentScriptDescriptor);
- Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor);
- var isIE = /Trident/.test(navigator.userAgent);
- function whenReady(callback, doc) {
- doc = doc || rootDocument;
- whenDocumentReady(function() {
- watchImportsLoad(callback, doc);
- }, doc);
- }
- var requiredReadyState = isIE ? "complete" : "interactive";
- var READY_EVENT = "readystatechange";
- function isDocumentReady(doc) {
- return doc.readyState === "complete" || doc.readyState === requiredReadyState;
- }
- function whenDocumentReady(callback, doc) {
- if (!isDocumentReady(doc)) {
- var checkReady = function() {
- if (doc.readyState === "complete" || doc.readyState === requiredReadyState) {
- doc.removeEventListener(READY_EVENT, checkReady);
- whenDocumentReady(callback, doc);
- }
- };
- doc.addEventListener(READY_EVENT, checkReady);
- } else if (callback) {
- callback();
- }
- }
- function markTargetLoaded(event) {
- event.target.__loaded = true;
- }
- function watchImportsLoad(callback, doc) {
- var imports = doc.querySelectorAll("link[rel=import]");
- var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = [];
- function checkDone() {
- if (parsedCount == importCount && callback) {
- callback({
- allImports: imports,
- loadedImports: newImports,
- errorImports: errorImports
- });
- }
- }
- function loadedImport(e) {
- markTargetLoaded(e);
- newImports.push(this);
- parsedCount++;
- checkDone();
- }
- function errorLoadingImport(e) {
- errorImports.push(this);
- parsedCount++;
- checkDone();
- }
- if (importCount) {
- for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) {
- if (isImportLoaded(imp)) {
- newImports.push(this);
- parsedCount++;
- checkDone();
- } else {
- imp.addEventListener("load", loadedImport);
- imp.addEventListener("error", errorLoadingImport);
- }
- }
- } else {
- checkDone();
- }
- }
- function isImportLoaded(link) {
- return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed;
- }
- if (useNative) {
- new MutationObserver(function(mxns) {
- for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) {
- if (m.addedNodes) {
- handleImports(m.addedNodes);
- }
- }
- }).observe(document.head, {
- childList: true
- });
- function handleImports(nodes) {
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (isImport(n)) {
- handleImport(n);
- }
- }
- }
- function isImport(element) {
- return element.localName === "link" && element.rel === "import";
- }
- function handleImport(element) {
- var loaded = element.import;
- if (loaded) {
- markTargetLoaded({
- target: element
- });
- } else {
- element.addEventListener("load", markTargetLoaded);
- element.addEventListener("error", markTargetLoaded);
- }
- }
- (function() {
- if (document.readyState === "loading") {
- var imports = document.querySelectorAll("link[rel=import]");
- for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) {
- handleImport(imp);
- }
- }
- })();
- }
- whenReady(function(detail) {
- window.HTMLImports.ready = true;
- window.HTMLImports.readyTime = new Date().getTime();
- var evt = rootDocument.createEvent("CustomEvent");
- evt.initCustomEvent("HTMLImportsLoaded", true, true, detail);
- rootDocument.dispatchEvent(evt);
- });
- scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;
- scope.useNative = useNative;
- scope.rootDocument = rootDocument;
- scope.whenReady = whenReady;
- scope.isIE = isIE;
-})(window.HTMLImports);
-
-(function(scope) {
- var modules = [];
- var addModule = function(module) {
- modules.push(module);
- };
- var initializeModules = function() {
- modules.forEach(function(module) {
- module(scope);
- });
- };
- scope.addModule = addModule;
- scope.initializeModules = initializeModules;
-})(window.HTMLImports);
-
-window.HTMLImports.addModule(function(scope) {
- var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g;
- var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g;
- var path = {
- resolveUrlsInStyle: function(style, linkUrl) {
- var doc = style.ownerDocument;
- var resolver = doc.createElement("a");
- style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver);
- return style;
- },
- resolveUrlsInCssText: function(cssText, linkUrl, urlObj) {
- var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP);
- r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP);
- return r;
- },
- replaceUrls: function(text, urlObj, linkUrl, regexp) {
- return text.replace(regexp, function(m, pre, url, post) {
- var urlPath = url.replace(/["']/g, "");
- if (linkUrl) {
- urlPath = new URL(urlPath, linkUrl).href;
- }
- urlObj.href = urlPath;
- urlPath = urlObj.href;
- return pre + "'" + urlPath + "'" + post;
- });
- }
- };
- scope.path = path;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var xhr = {
- async: true,
- ok: function(request) {
- return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0;
- },
- load: function(url, next, nextContext) {
- var request = new XMLHttpRequest();
- if (scope.flags.debug || scope.flags.bust) {
- url += "?" + Math.random();
- }
- request.open("GET", url, xhr.async);
- request.addEventListener("readystatechange", function(e) {
- if (request.readyState === 4) {
- var redirectedUrl = null;
- try {
- var locationHeader = request.getResponseHeader("Location");
- if (locationHeader) {
- redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader;
- }
- } catch (e) {
- console.error(e.message);
- }
- next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl);
- }
- });
- request.send();
- return request;
- },
- loadDocument: function(url, next, nextContext) {
- this.load(url, next, nextContext).responseType = "document";
- }
- };
- scope.xhr = xhr;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var xhr = scope.xhr;
- var flags = scope.flags;
- var Loader = function(onLoad, onComplete) {
- this.cache = {};
- this.onload = onLoad;
- this.oncomplete = onComplete;
- this.inflight = 0;
- this.pending = {};
- };
- Loader.prototype = {
- addNodes: function(nodes) {
- this.inflight += nodes.length;
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- this.require(n);
- }
- this.checkDone();
- },
- addNode: function(node) {
- this.inflight++;
- this.require(node);
- this.checkDone();
- },
- require: function(elt) {
- var url = elt.src || elt.href;
- elt.__nodeUrl = url;
- if (!this.dedupe(url, elt)) {
- this.fetch(url, elt);
- }
- },
- dedupe: function(url, elt) {
- if (this.pending[url]) {
- this.pending[url].push(elt);
- return true;
- }
- var resource;
- if (this.cache[url]) {
- this.onload(url, elt, this.cache[url]);
- this.tail();
- return true;
- }
- this.pending[url] = [ elt ];
- return false;
- },
- fetch: function(url, elt) {
- flags.load && console.log("fetch", url, elt);
- if (!url) {
- setTimeout(function() {
- this.receive(url, elt, {
- error: "href must be specified"
- }, null);
- }.bind(this), 0);
- } else if (url.match(/^data:/)) {
- var pieces = url.split(",");
- var header = pieces[0];
- var body = pieces[1];
- if (header.indexOf(";base64") > -1) {
- body = atob(body);
- } else {
- body = decodeURIComponent(body);
- }
- setTimeout(function() {
- this.receive(url, elt, null, body);
- }.bind(this), 0);
- } else {
- var receiveXhr = function(err, resource, redirectedUrl) {
- this.receive(url, elt, err, resource, redirectedUrl);
- }.bind(this);
- xhr.load(url, receiveXhr);
- }
- },
- receive: function(url, elt, err, resource, redirectedUrl) {
- this.cache[url] = resource;
- var $p = this.pending[url];
- for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
- this.onload(url, p, resource, err, redirectedUrl);
- this.tail();
- }
- this.pending[url] = null;
- },
- tail: function() {
- --this.inflight;
- this.checkDone();
- },
- checkDone: function() {
- if (!this.inflight) {
- this.oncomplete();
- }
- }
- };
- scope.Loader = Loader;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var Observer = function(addCallback) {
- this.addCallback = addCallback;
- this.mo = new MutationObserver(this.handler.bind(this));
- };
- Observer.prototype = {
- handler: function(mutations) {
- for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) {
- if (m.type === "childList" && m.addedNodes.length) {
- this.addedNodes(m.addedNodes);
- }
- }
- },
- addedNodes: function(nodes) {
- if (this.addCallback) {
- this.addCallback(nodes);
- }
- for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) {
- if (n.children && n.children.length) {
- this.addedNodes(n.children);
- }
- }
- },
- observe: function(root) {
- this.mo.observe(root, {
- childList: true,
- subtree: true
- });
- }
- };
- scope.Observer = Observer;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var path = scope.path;
- var rootDocument = scope.rootDocument;
- var flags = scope.flags;
- var isIE = scope.isIE;
- var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
- var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]";
- var importParser = {
- documentSelectors: IMPORT_SELECTOR,
- importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]:not([type])", "style:not([type])", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","),
- map: {
- link: "parseLink",
- script: "parseScript",
- style: "parseStyle"
- },
- dynamicElements: [],
- parseNext: function() {
- var next = this.nextToParse();
- if (next) {
- this.parse(next);
- }
- },
- parse: function(elt) {
- if (this.isParsed(elt)) {
- flags.parse && console.log("[%s] is already parsed", elt.localName);
- return;
- }
- var fn = this[this.map[elt.localName]];
- if (fn) {
- this.markParsing(elt);
- fn.call(this, elt);
- }
- },
- parseDynamic: function(elt, quiet) {
- this.dynamicElements.push(elt);
- if (!quiet) {
- this.parseNext();
- }
- },
- markParsing: function(elt) {
- flags.parse && console.log("parsing", elt);
- this.parsingElement = elt;
- },
- markParsingComplete: function(elt) {
- elt.__importParsed = true;
- this.markDynamicParsingComplete(elt);
- if (elt.__importElement) {
- elt.__importElement.__importParsed = true;
- this.markDynamicParsingComplete(elt.__importElement);
- }
- this.parsingElement = null;
- flags.parse && console.log("completed", elt);
- },
- markDynamicParsingComplete: function(elt) {
- var i = this.dynamicElements.indexOf(elt);
- if (i >= 0) {
- this.dynamicElements.splice(i, 1);
- }
- },
- parseImport: function(elt) {
- elt.import = elt.__doc;
- if (window.HTMLImports.__importsParsingHook) {
- window.HTMLImports.__importsParsingHook(elt);
- }
- if (elt.import) {
- elt.import.__importParsed = true;
- }
- this.markParsingComplete(elt);
- if (elt.__resource && !elt.__error) {
- elt.dispatchEvent(new CustomEvent("load", {
- bubbles: false
- }));
- } else {
- elt.dispatchEvent(new CustomEvent("error", {
- bubbles: false
- }));
- }
- if (elt.__pending) {
- var fn;
- while (elt.__pending.length) {
- fn = elt.__pending.shift();
- if (fn) {
- fn({
- target: elt
- });
- }
- }
- }
- this.parseNext();
- },
- parseLink: function(linkElt) {
- if (nodeIsImport(linkElt)) {
- this.parseImport(linkElt);
- } else {
- linkElt.href = linkElt.href;
- this.parseGeneric(linkElt);
- }
- },
- parseStyle: function(elt) {
- var src = elt;
- elt = cloneStyle(elt);
- src.__appliedElement = elt;
- elt.__importElement = src;
- this.parseGeneric(elt);
- },
- parseGeneric: function(elt) {
- this.trackElement(elt);
- this.addElementToDocument(elt);
- },
- rootImportForElement: function(elt) {
- var n = elt;
- while (n.ownerDocument.__importLink) {
- n = n.ownerDocument.__importLink;
- }
- return n;
- },
- addElementToDocument: function(elt) {
- var port = this.rootImportForElement(elt.__importElement || elt);
- port.parentNode.insertBefore(elt, port);
- },
- trackElement: function(elt, callback) {
- var self = this;
- var done = function(e) {
- elt.removeEventListener("load", done);
- elt.removeEventListener("error", done);
- if (callback) {
- callback(e);
- }
- self.markParsingComplete(elt);
- self.parseNext();
- };
- elt.addEventListener("load", done);
- elt.addEventListener("error", done);
- if (isIE && elt.localName === "style") {
- var fakeLoad = false;
- if (elt.textContent.indexOf("@import") == -1) {
- fakeLoad = true;
- } else if (elt.sheet) {
- fakeLoad = true;
- var csr = elt.sheet.cssRules;
- var len = csr ? csr.length : 0;
- for (var i = 0, r; i < len && (r = csr[i]); i++) {
- if (r.type === CSSRule.IMPORT_RULE) {
- fakeLoad = fakeLoad && Boolean(r.styleSheet);
- }
- }
- }
- if (fakeLoad) {
- setTimeout(function() {
- elt.dispatchEvent(new CustomEvent("load", {
- bubbles: false
- }));
- });
- }
- }
- },
- parseScript: function(scriptElt) {
- var script = document.createElement("script");
- script.__importElement = scriptElt;
- script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt);
- scope.currentScript = scriptElt;
- this.trackElement(script, function(e) {
- if (script.parentNode) {
- script.parentNode.removeChild(script);
- }
- scope.currentScript = null;
- });
- this.addElementToDocument(script);
- },
- nextToParse: function() {
- this._mayParse = [];
- return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic());
- },
- nextToParseInDoc: function(doc, link) {
- if (doc && this._mayParse.indexOf(doc) < 0) {
- this._mayParse.push(doc);
- var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc));
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (!this.isParsed(n)) {
- if (this.hasResource(n)) {
- return nodeIsImport(n) ? this.nextToParseInDoc(n.__doc, n) : n;
- } else {
- return;
- }
- }
- }
- }
- return link;
- },
- nextToParseDynamic: function() {
- return this.dynamicElements[0];
- },
- parseSelectorsForNode: function(node) {
- var doc = node.ownerDocument || node;
- return doc === rootDocument ? this.documentSelectors : this.importsSelectors;
- },
- isParsed: function(node) {
- return node.__importParsed;
- },
- needsDynamicParsing: function(elt) {
- return this.dynamicElements.indexOf(elt) >= 0;
- },
- hasResource: function(node) {
- if (nodeIsImport(node) && node.__doc === undefined) {
- return false;
- }
- return true;
- }
- };
- function nodeIsImport(elt) {
- return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE;
- }
- function generateScriptDataUrl(script) {
- var scriptContent = generateScriptContent(script);
- return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent);
- }
- function generateScriptContent(script) {
- return script.textContent + generateSourceMapHint(script);
- }
- function generateSourceMapHint(script) {
- var owner = script.ownerDocument;
- owner.__importedScripts = owner.__importedScripts || 0;
- var moniker = script.ownerDocument.baseURI;
- var num = owner.__importedScripts ? "-" + owner.__importedScripts : "";
- owner.__importedScripts++;
- return "\n//# sourceURL=" + moniker + num + ".js\n";
- }
- function cloneStyle(style) {
- var clone = style.ownerDocument.createElement("style");
- clone.textContent = style.textContent;
- path.resolveUrlsInStyle(clone);
- return clone;
- }
- scope.parser = importParser;
- scope.IMPORT_SELECTOR = IMPORT_SELECTOR;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var flags = scope.flags;
- var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
- var IMPORT_SELECTOR = scope.IMPORT_SELECTOR;
- var rootDocument = scope.rootDocument;
- var Loader = scope.Loader;
- var Observer = scope.Observer;
- var parser = scope.parser;
- var importer = {
- documents: {},
- documentPreloadSelectors: IMPORT_SELECTOR,
- importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","),
- loadNode: function(node) {
- importLoader.addNode(node);
- },
- loadSubtree: function(parent) {
- var nodes = this.marshalNodes(parent);
- importLoader.addNodes(nodes);
- },
- marshalNodes: function(parent) {
- return parent.querySelectorAll(this.loadSelectorsForNode(parent));
- },
- loadSelectorsForNode: function(node) {
- var doc = node.ownerDocument || node;
- return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors;
- },
- loaded: function(url, elt, resource, err, redirectedUrl) {
- flags.load && console.log("loaded", url, elt);
- elt.__resource = resource;
- elt.__error = err;
- if (isImportLink(elt)) {
- var doc = this.documents[url];
- if (doc === undefined) {
- doc = err ? null : makeDocument(resource, redirectedUrl || url);
- if (doc) {
- doc.__importLink = elt;
- this.bootDocument(doc);
- }
- this.documents[url] = doc;
- }
- elt.__doc = doc;
- }
- parser.parseNext();
- },
- bootDocument: function(doc) {
- this.loadSubtree(doc);
- this.observer.observe(doc);
- parser.parseNext();
- },
- loadedAll: function() {
- parser.parseNext();
- }
- };
- var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer));
- importer.observer = new Observer();
- function isImportLink(elt) {
- return isLinkRel(elt, IMPORT_LINK_TYPE);
- }
- function isLinkRel(elt, rel) {
- return elt.localName === "link" && elt.getAttribute("rel") === rel;
- }
- function hasBaseURIAccessor(doc) {
- return !!Object.getOwnPropertyDescriptor(doc, "baseURI");
- }
- function makeDocument(resource, url) {
- var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE);
- doc._URL = url;
- var base = doc.createElement("base");
- base.setAttribute("href", url);
- if (!doc.baseURI && !hasBaseURIAccessor(doc)) {
- Object.defineProperty(doc, "baseURI", {
- value: url
- });
- }
- var meta = doc.createElement("meta");
- meta.setAttribute("charset", "utf-8");
- doc.head.appendChild(meta);
- doc.head.appendChild(base);
- doc.body.innerHTML = resource;
- if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {
- HTMLTemplateElement.bootstrap(doc);
- }
- return doc;
- }
- if (!document.baseURI) {
- var baseURIDescriptor = {
- get: function() {
- var base = document.querySelector("base");
- return base ? base.href : window.location.href;
- },
- configurable: true
- };
- Object.defineProperty(document, "baseURI", baseURIDescriptor);
- Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor);
- }
- scope.importer = importer;
- scope.importLoader = importLoader;
-});
-
-window.HTMLImports.addModule(function(scope) {
- var parser = scope.parser;
- var importer = scope.importer;
- var dynamic = {
- added: function(nodes) {
- var owner, parsed, loading;
- for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
- if (!owner) {
- owner = n.ownerDocument;
- parsed = parser.isParsed(owner);
- }
- loading = this.shouldLoadNode(n);
- if (loading) {
- importer.loadNode(n);
- }
- if (this.shouldParseNode(n) && parsed) {
- parser.parseDynamic(n, loading);
- }
- }
- },
- shouldLoadNode: function(node) {
- return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node));
- },
- shouldParseNode: function(node) {
- return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node));
- }
- };
- importer.observer.addCallback = dynamic.added.bind(dynamic);
- var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector;
-});
-
-(function(scope) {
- var initializeModules = scope.initializeModules;
- var isIE = scope.isIE;
- if (scope.useNative) {
- return;
- }
- initializeModules();
- var rootDocument = scope.rootDocument;
- function bootstrap() {
- window.HTMLImports.importer.bootDocument(rootDocument);
- }
- if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) {
- bootstrap();
- } else {
- document.addEventListener("DOMContentLoaded", bootstrap);
- }
-})(window.HTMLImports);
-
-window.CustomElements = window.CustomElements || {
- flags: {}
-};
-
-(function(scope) {
- var flags = scope.flags;
- var modules = [];
- var addModule = function(module) {
- modules.push(module);
- };
- var initializeModules = function() {
- modules.forEach(function(module) {
- module(scope);
- });
- };
- scope.addModule = addModule;
- scope.initializeModules = initializeModules;
- scope.hasNative = Boolean(document.registerElement);
- scope.isIE = /Trident/.test(navigator.userAgent);
- scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative);
-})(window.CustomElements);
-
-window.CustomElements.addModule(function(scope) {
- var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none";
- function forSubtree(node, cb) {
- findAllElements(node, function(e) {
- if (cb(e)) {
- return true;
- }
- forRoots(e, cb);
- });
- forRoots(node, cb);
- }
- function findAllElements(node, find, data) {
- var e = node.firstElementChild;
- if (!e) {
- e = node.firstChild;
- while (e && e.nodeType !== Node.ELEMENT_NODE) {
- e = e.nextSibling;
- }
- }
- while (e) {
- if (find(e, data) !== true) {
- findAllElements(e, find, data);
- }
- e = e.nextElementSibling;
- }
- return null;
- }
- function forRoots(node, cb) {
- var root = node.shadowRoot;
- while (root) {
- forSubtree(root, cb);
- root = root.olderShadowRoot;
- }
- }
- function forDocumentTree(doc, cb) {
- _forDocumentTree(doc, cb, []);
- }
- function _forDocumentTree(doc, cb, processingDocuments) {
- doc = window.wrap(doc);
- if (processingDocuments.indexOf(doc) >= 0) {
- return;
- }
- processingDocuments.push(doc);
- var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]");
- for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) {
- if (n.import) {
- _forDocumentTree(n.import, cb, processingDocuments);
- }
- }
- cb(doc);
- }
- scope.forDocumentTree = forDocumentTree;
- scope.forSubtree = forSubtree;
-});
-
-window.CustomElements.addModule(function(scope) {
- var flags = scope.flags;
- var forSubtree = scope.forSubtree;
- var forDocumentTree = scope.forDocumentTree;
- function addedNode(node, isAttached) {
- return added(node, isAttached) || addedSubtree(node, isAttached);
- }
- function added(node, isAttached) {
- if (scope.upgrade(node, isAttached)) {
- return true;
- }
- if (isAttached) {
- attached(node);
- }
- }
- function addedSubtree(node, isAttached) {
- forSubtree(node, function(e) {
- if (added(e, isAttached)) {
- return true;
- }
- });
- }
- var hasThrottledAttached = window.MutationObserver._isPolyfilled && flags["throttle-attached"];
- scope.hasPolyfillMutations = hasThrottledAttached;
- scope.hasThrottledAttached = hasThrottledAttached;
- var isPendingMutations = false;
- var pendingMutations = [];
- function deferMutation(fn) {
- pendingMutations.push(fn);
- if (!isPendingMutations) {
- isPendingMutations = true;
- setTimeout(takeMutations);
- }
- }
- function takeMutations() {
- isPendingMutations = false;
- var $p = pendingMutations;
- for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
- p();
- }
- pendingMutations = [];
- }
- function attached(element) {
- if (hasThrottledAttached) {
- deferMutation(function() {
- _attached(element);
- });
- } else {
- _attached(element);
- }
- }
- function _attached(element) {
- if (element.__upgraded__ && !element.__attached) {
- element.__attached = true;
- if (element.attachedCallback) {
- element.attachedCallback();
- }
- }
- }
- function detachedNode(node) {
- detached(node);
- forSubtree(node, function(e) {
- detached(e);
- });
- }
- function detached(element) {
- if (hasThrottledAttached) {
- deferMutation(function() {
- _detached(element);
- });
- } else {
- _detached(element);
- }
- }
- function _detached(element) {
- if (element.__upgraded__ && element.__attached) {
- element.__attached = false;
- if (element.detachedCallback) {
- element.detachedCallback();
- }
- }
- }
- function inDocument(element) {
- var p = element;
- var doc = window.wrap(document);
- while (p) {
- if (p == doc) {
- return true;
- }
- p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host;
- }
- }
- function watchShadow(node) {
- if (node.shadowRoot && !node.shadowRoot.__watched) {
- flags.dom && console.log("watching shadow-root for: ", node.localName);
- var root = node.shadowRoot;
- while (root) {
- observe(root);
- root = root.olderShadowRoot;
- }
- }
- }
- function handler(root, mutations) {
- if (flags.dom) {
- var mx = mutations[0];
- if (mx && mx.type === "childList" && mx.addedNodes) {
- if (mx.addedNodes) {
- var d = mx.addedNodes[0];
- while (d && d !== document && !d.host) {
- d = d.parentNode;
- }
- var u = d && (d.URL || d._URL || d.host && d.host.localName) || "";
- u = u.split("/?").shift().split("/").pop();
- }
- }
- console.group("mutations (%d) [%s]", mutations.length, u || "");
- }
- var isAttached = inDocument(root);
- mutations.forEach(function(mx) {
- if (mx.type === "childList") {
- forEach(mx.addedNodes, function(n) {
- if (!n.localName) {
- return;
- }
- addedNode(n, isAttached);
- });
- forEach(mx.removedNodes, function(n) {
- if (!n.localName) {
- return;
- }
- detachedNode(n);
- });
- }
- });
- flags.dom && console.groupEnd();
- }
- function takeRecords(node) {
- node = window.wrap(node);
- if (!node) {
- node = window.wrap(document);
- }
- while (node.parentNode) {
- node = node.parentNode;
- }
- var observer = node.__observer;
- if (observer) {
- handler(node, observer.takeRecords());
- takeMutations();
- }
- }
- var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
- function observe(inRoot) {
- if (inRoot.__observer) {
- return;
- }
- var observer = new MutationObserver(handler.bind(this, inRoot));
- observer.observe(inRoot, {
- childList: true,
- subtree: true
- });
- inRoot.__observer = observer;
- }
- function upgradeDocument(doc) {
- doc = window.wrap(doc);
- flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop());
- var isMainDocument = doc === window.wrap(document);
- addedNode(doc, isMainDocument);
- observe(doc);
- flags.dom && console.groupEnd();
- }
- function upgradeDocumentTree(doc) {
- forDocumentTree(doc, upgradeDocument);
- }
- var originalCreateShadowRoot = Element.prototype.createShadowRoot;
- if (originalCreateShadowRoot) {
- Element.prototype.createShadowRoot = function() {
- var root = originalCreateShadowRoot.call(this);
- window.CustomElements.watchShadow(this);
- return root;
- };
- }
- scope.watchShadow = watchShadow;
- scope.upgradeDocumentTree = upgradeDocumentTree;
- scope.upgradeDocument = upgradeDocument;
- scope.upgradeSubtree = addedSubtree;
- scope.upgradeAll = addedNode;
- scope.attached = attached;
- scope.takeRecords = takeRecords;
-});
-
-window.CustomElements.addModule(function(scope) {
- var flags = scope.flags;
- function upgrade(node, isAttached) {
- if (node.localName === "template") {
- if (window.HTMLTemplateElement && HTMLTemplateElement.decorate) {
- HTMLTemplateElement.decorate(node);
- }
- }
- if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
- var is = node.getAttribute("is");
- var definition = scope.getRegisteredDefinition(node.localName) || scope.getRegisteredDefinition(is);
- if (definition) {
- if (is && definition.tag == node.localName || !is && !definition.extends) {
- return upgradeWithDefinition(node, definition, isAttached);
- }
- }
- }
- }
- function upgradeWithDefinition(element, definition, isAttached) {
- flags.upgrade && console.group("upgrade:", element.localName);
- if (definition.is) {
- element.setAttribute("is", definition.is);
- }
- implementPrototype(element, definition);
- element.__upgraded__ = true;
- created(element);
- if (isAttached) {
- scope.attached(element);
- }
- scope.upgradeSubtree(element, isAttached);
- flags.upgrade && console.groupEnd();
- return element;
- }
- function implementPrototype(element, definition) {
- if (Object.__proto__) {
- element.__proto__ = definition.prototype;
- } else {
- customMixin(element, definition.prototype, definition.native);
- element.__proto__ = definition.prototype;
- }
- }
- function customMixin(inTarget, inSrc, inNative) {
- var used = {};
- var p = inSrc;
- while (p !== inNative && p !== HTMLElement.prototype) {
- var keys = Object.getOwnPropertyNames(p);
- for (var i = 0, k; k = keys[i]; i++) {
- if (!used[k]) {
- Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k));
- used[k] = 1;
- }
- }
- p = Object.getPrototypeOf(p);
- }
- }
- function created(element) {
- if (element.createdCallback) {
- element.createdCallback();
- }
- }
- scope.upgrade = upgrade;
- scope.upgradeWithDefinition = upgradeWithDefinition;
- scope.implementPrototype = implementPrototype;
-});
-
-window.CustomElements.addModule(function(scope) {
- var isIE = scope.isIE;
- var upgradeDocumentTree = scope.upgradeDocumentTree;
- var upgradeAll = scope.upgradeAll;
- var upgradeWithDefinition = scope.upgradeWithDefinition;
- var implementPrototype = scope.implementPrototype;
- var useNative = scope.useNative;
- function register(name, options) {
- var definition = options || {};
- if (!name) {
- throw new Error("document.registerElement: first argument `name` must not be empty");
- }
- if (name.indexOf("-") < 0) {
- throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'.");
- }
- if (isReservedTag(name)) {
- throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid.");
- }
- if (getRegisteredDefinition(name)) {
- throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered");
- }
- if (!definition.prototype) {
- definition.prototype = Object.create(HTMLElement.prototype);
- }
- definition.__name = name.toLowerCase();
- if (definition.extends) {
- definition.extends = definition.extends.toLowerCase();
- }
- definition.lifecycle = definition.lifecycle || {};
- definition.ancestry = ancestry(definition.extends);
- resolveTagName(definition);
- resolvePrototypeChain(definition);
- overrideAttributeApi(definition.prototype);
- registerDefinition(definition.__name, definition);
- definition.ctor = generateConstructor(definition);
- definition.ctor.prototype = definition.prototype;
- definition.prototype.constructor = definition.ctor;
- if (scope.ready) {
- upgradeDocumentTree(document);
- }
- return definition.ctor;
- }
- function overrideAttributeApi(prototype) {
- if (prototype.setAttribute._polyfilled) {
- return;
- }
- var setAttribute = prototype.setAttribute;
- prototype.setAttribute = function(name, value) {
- changeAttribute.call(this, name, value, setAttribute);
- };
- var removeAttribute = prototype.removeAttribute;
- prototype.removeAttribute = function(name) {
- changeAttribute.call(this, name, null, removeAttribute);
- };
- prototype.setAttribute._polyfilled = true;
- }
- function changeAttribute(name, value, operation) {
- name = name.toLowerCase();
- var oldValue = this.getAttribute(name);
- operation.apply(this, arguments);
- var newValue = this.getAttribute(name);
- if (this.attributeChangedCallback && newValue !== oldValue) {
- this.attributeChangedCallback(name, oldValue, newValue);
- }
- }
- function isReservedTag(name) {
- for (var i = 0; i < reservedTagList.length; i++) {
- if (name === reservedTagList[i]) {
- return true;
- }
- }
- }
- var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ];
- function ancestry(extnds) {
- var extendee = getRegisteredDefinition(extnds);
- if (extendee) {
- return ancestry(extendee.extends).concat([ extendee ]);
- }
- return [];
- }
- function resolveTagName(definition) {
- var baseTag = definition.extends;
- for (var i = 0, a; a = definition.ancestry[i]; i++) {
- baseTag = a.is && a.tag;
- }
- definition.tag = baseTag || definition.__name;
- if (baseTag) {
- definition.is = definition.__name;
- }
- }
- function resolvePrototypeChain(definition) {
- if (!Object.__proto__) {
- var nativePrototype = HTMLElement.prototype;
- if (definition.is) {
- var inst = document.createElement(definition.tag);
- nativePrototype = Object.getPrototypeOf(inst);
- }
- var proto = definition.prototype, ancestor;
- var foundPrototype = false;
- while (proto) {
- if (proto == nativePrototype) {
- foundPrototype = true;
- }
- ancestor = Object.getPrototypeOf(proto);
- if (ancestor) {
- proto.__proto__ = ancestor;
- }
- proto = ancestor;
- }
- if (!foundPrototype) {
- console.warn(definition.tag + " prototype not found in prototype chain for " + definition.is);
- }
- definition.native = nativePrototype;
- }
- }
- function instantiate(definition) {
- return upgradeWithDefinition(domCreateElement(definition.tag), definition);
- }
- var registry = {};
- function getRegisteredDefinition(name) {
- if (name) {
- return registry[name.toLowerCase()];
- }
- }
- function registerDefinition(name, definition) {
- registry[name] = definition;
- }
- function generateConstructor(definition) {
- return function() {
- return instantiate(definition);
- };
- }
- var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
- function createElementNS(namespace, tag, typeExtension) {
- if (namespace === HTML_NAMESPACE) {
- return createElement(tag, typeExtension);
- } else {
- return domCreateElementNS(namespace, tag);
- }
- }
- function createElement(tag, typeExtension) {
- if (tag) {
- tag = tag.toLowerCase();
- }
- if (typeExtension) {
- typeExtension = typeExtension.toLowerCase();
- }
- var definition = getRegisteredDefinition(typeExtension || tag);
- if (definition) {
- if (tag == definition.tag && typeExtension == definition.is) {
- return new definition.ctor();
- }
- if (!typeExtension && !definition.is) {
- return new definition.ctor();
- }
- }
- var element;
- if (typeExtension) {
- element = createElement(tag);
- element.setAttribute("is", typeExtension);
- return element;
- }
- element = domCreateElement(tag);
- if (tag.indexOf("-") >= 0) {
- implementPrototype(element, HTMLElement);
- }
- return element;
- }
- var domCreateElement = document.createElement.bind(document);
- var domCreateElementNS = document.createElementNS.bind(document);
- var isInstance;
- if (!Object.__proto__ && !useNative) {
- isInstance = function(obj, ctor) {
- if (obj instanceof ctor) {
- return true;
- }
- var p = obj;
- while (p) {
- if (p === ctor.prototype) {
- return true;
- }
- p = p.__proto__;
- }
- return false;
- };
- } else {
- isInstance = function(obj, base) {
- return obj instanceof base;
- };
- }
- function wrapDomMethodToForceUpgrade(obj, methodName) {
- var orig = obj[methodName];
- obj[methodName] = function() {
- var n = orig.apply(this, arguments);
- upgradeAll(n);
- return n;
- };
- }
- wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode");
- wrapDomMethodToForceUpgrade(document, "importNode");
- document.registerElement = register;
- document.createElement = createElement;
- document.createElementNS = createElementNS;
- scope.registry = registry;
- scope.instanceof = isInstance;
- scope.reservedTagList = reservedTagList;
- scope.getRegisteredDefinition = getRegisteredDefinition;
- document.register = document.registerElement;
-});
-
-(function(scope) {
- var useNative = scope.useNative;
- var initializeModules = scope.initializeModules;
- var isIE = scope.isIE;
- if (useNative) {
- var nop = function() {};
- scope.watchShadow = nop;
- scope.upgrade = nop;
- scope.upgradeAll = nop;
- scope.upgradeDocumentTree = nop;
- scope.upgradeSubtree = nop;
- scope.takeRecords = nop;
- scope.instanceof = function(obj, base) {
- return obj instanceof base;
- };
- } else {
- initializeModules();
- }
- var upgradeDocumentTree = scope.upgradeDocumentTree;
- var upgradeDocument = scope.upgradeDocument;
- if (!window.wrap) {
- if (window.ShadowDOMPolyfill) {
- window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded;
- window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded;
- } else {
- window.wrap = window.unwrap = function(node) {
- return node;
- };
- }
- }
- if (window.HTMLImports) {
- window.HTMLImports.__importsParsingHook = function(elt) {
- if (elt.import) {
- upgradeDocument(wrap(elt.import));
- }
- };
- }
- function bootstrap() {
- upgradeDocumentTree(window.wrap(document));
- window.CustomElements.ready = true;
- var requestAnimationFrame = window.requestAnimationFrame || function(f) {
- setTimeout(f, 16);
- };
- requestAnimationFrame(function() {
- setTimeout(function() {
- window.CustomElements.readyTime = Date.now();
- if (window.HTMLImports) {
- window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime;
- }
- document.dispatchEvent(new CustomEvent("WebComponentsReady", {
- bubbles: true
- }));
- });
- });
- }
- if (document.readyState === "complete" || scope.flags.eager) {
- bootstrap();
- } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) {
- bootstrap();
- } else {
- var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded";
- window.addEventListener(loadEvent, bootstrap);
- }
-})(window.CustomElements);
-
-(function(scope) {
- if (!Function.prototype.bind) {
- Function.prototype.bind = function(scope) {
- var self = this;
- var args = Array.prototype.slice.call(arguments, 1);
- return function() {
- var args2 = args.slice();
- args2.push.apply(args2, arguments);
- return self.apply(scope, args2);
- };
- };
- }
-})(window.WebComponents);
-
-(function(scope) {
- var style = document.createElement("style");
- style.textContent = "" + "body {" + "transition: opacity ease-in 0.2s;" + " } \n" + "body[unresolved] {" + "opacity: 0; display: block; overflow: hidden; position: relative;" + " } \n";
- var head = document.querySelector("head");
- head.insertBefore(style, head.firstChild);
-})(window.WebComponents);
-
-(function(scope) {
- window.Platform = scope;
-})(window.WebComponents);
\ No newline at end of file