diff --git a/dashboard-ui/bower_components/Swiper/.bower.json b/dashboard-ui/bower_components/Swiper/.bower.json new file mode 100644 index 0000000000..9b0a6f040d --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/.bower.json @@ -0,0 +1,58 @@ +{ + "name": "Swiper", + "repository": { + "type": "git", + "url": "https://github.com/nolimits4web/Swiper.git" + }, + "description": "Most modern mobile touch slider and framework with hardware accelerated transitions", + "version": "3.3.0", + "author": "Vladimir Kharlampidi", + "homepage": "http://www.idangero.us/swiper/", + "keywords": [ + "swiper", + "swipe", + "slider", + "touch", + "ios", + "mobile", + "cordova", + "phonegap", + "app", + "framework", + "carousel", + "gallery" + ], + "dependencies": {}, + "scripts": [ + "dist/js/swiper.js" + ], + "main": [ + "dist/js/swiper.js", + "dist/css/swiper.css" + ], + "styles": [ + "dist/css/swiper.css" + ], + "license": [ + "MIT" + ], + "ignore": [ + ".*", + "demos", + "gulpfile", + "build", + "node_modules", + "playground", + "package.json" + ], + "_release": "3.3.0", + "_resolution": { + "type": "version", + "tag": "v3.3.0", + "commit": "d1b5b19c872068ebb14bfb854af838c30285cecd" + }, + "_source": "git://github.com/nolimits4web/Swiper.git", + "_target": "~3.3.0", + "_originalSource": "swiper", + "_direct": true +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/Swiper/CHANGELOG.md b/dashboard-ui/bower_components/Swiper/CHANGELOG.md new file mode 100644 index 0000000000..f022142a34 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/CHANGELOG.md @@ -0,0 +1,227 @@ +# Change Log + +## Swiper 3.3.0 - Released on January 10, 2016 + * New 3D Flip effect. Can be enabled with `effect: 'flip' parameter + * New types of pagination with new parameters: + * `paginationType` - type of pagination. Can be `'bullets'` (default) or `'fraction'` or `'progress'` or `'custom'` + * `paginationFractionRender(swiper, currentClass, totalClass)` - custom function to render "fraction" type pagination + * `paginationProgressRender(swiper, progressbarClass)` - custom function to render "progress" type pagination + * `paginationCustomRender(swiper, current, total)` - custom function to render "custom" type pagination + * New `lazyLoadingInPrevNextAmount` parameter allows to lazy load images in specified amount of next/prev slides + * New `autoplayStopOnLast` parameter (`true` by default) tells to autoplay should it stop on last slide or start from first slide + * New `onAutoplay(swiper)` callback + * Minor fixes + +## Swiper 3.2.7 - Released on December 7, 2015 + * Fixed issue with using HTMLElements for next/prevButton parameters with breakpoints + * Fixed issue with not working Auto Height when using Controller + +## Swiper 3.2.6 - Released on November 28, 2015 + * Fixed issue in RTL layout using `mousewheelControl` + * Fixed issue in RTL layout using Parallax + +## Swiper 3.2.5 - Released on November 21, 2015 + * New "Auto Height" mode when container/wrapper adopts to the height of currently active slide. Can be enabled with `autoHeight: true` parameter + * Fixed issue with break points in FireFox + * Fixed issue with wrong slides position when using effects + * Fixed issue with none-updated scroll bar after using `setWrapperTranslate` + * Minor fixes + +## Swiper 3.2.0 - Released on November 7, 2015 + * Added responsive breakpoints support using new `breakpoints` parameter. Now you can specify different `slidesPerView` and other similar parameters for different sizes: + ```js + slidesPerView: 5, + spaceBetween: 50, + breakpoints: { + 1024: { + slidesPerView: 4, + spaceBetween: 40 + }, + 768: { + slidesPerView: 3, + spaceBetween: 30 + }, + 320: { + slidesPerView: 1, + spaceBetween: 10 + } + } + ``` + + * New callbacks: `onSlideNextStart`, `onSlideNextEnd`, `onSlidePrevStart`, `onSlidePrevEnd` + * Added Meteor package `meteor add nolimits4web:swiper` + * Fixed issue with mouse touchMove/End callbacks firing all the time + * Fixed issue with mousewheel in Chrome + * Minor fixes + +## Swiper 3.1.7 - Released on October 10, 2015 + * Fixed issue with lazy loading trying to download `undefined`-src images + * Fixed lazy loading on slides using jQuery version + * Fixed issue with `slideToClickedSlide` with `loop` and `centeredSlides` + * Fixed issue with wrong slides fill when number of slides less than `slidesPerView * slidesPerColumn` with `slidesPerColumnFill: 'row'` + * Minor fixes + +## Swiper 3.1.5 - Released on September 28, 2015 + * Added support for images `srcset` with lazy loading using `data-srcset` attribute + * Fixed new Chrome errors with `WebkitCSSMatrix` + * Fixed issue with `slideToClickedSlide` with `loop` and `centeredSlides` + * New `freeModeMinimumVelocity` parameter to set minimum required touch velocity to trigger free mode momentum + * Ability to make the Scrollbar draggable using new paramaters: + * `scrollbarDraggable` - (boolean) by default is `false`. Allows to enable draggable scrollbar + * `scrollbarSnapOnRelease` - (boolean) by default is `false`. Control slider snap on scrollbar release + * Minor fixes + +## Swiper 3.1.2 - Released on August 22, 2015 + * Fixed issues with loop and mousewheel when swiper stopped on last slide + * Imporved mouse wheel behavior in latest Chrome + * Fixed issue with `slidesPerView: 'auto'` and enabled `loop:true` mode to set `loopedSlides` to the amount of slides by default (if not specified) + * New `mousewheelSensitivity: 1` parameter allows to tweak mouse wheel sensitivity + * Fixed issue with updating swiper when swiping is locked (with `allowSwipeToNext`/`allowSwipeToPrev`) + * Fixed issue with wrong calculating of "visible" slides with enabled `centeredSlides` + * CSS fixes for 3D effects + * New options to release Swiper events for swipe-to-go-back work in iOS UIWebView with two options: + * `iOSEdgeSwipeDetection` (by default is `false`) - enable ios edge detection and release Swiper events + * `iOSEdgeSwipeThreshold` (default value is `20`) - area in `px` from left edge of screen to release events + * Improved source maps + * Minor fixes + +## Swiper 3.1.0 - Released on July 14, 2015 + * Accessibility (a11y) + * Fixed issue with wrong buttons labels + * Added support for pagination bullets + * New accessibility parameter for pagination label `paginationBulletMessage: 'Go to slide {{index}}'` + * Controler + * New parameter `controlBy` which can be 'slide' (by default) or 'container'. Defines a way how to control another slider: slide by slide or depending on all slides/container (like before) + * Now controllers in `controlBy: 'slide'` (default) mode will respect grid of each other + * Pagination + * New `paginationElement` parameter defines which HTML tag will be use to represent single pagination bullet. By default it is `span` + * New `roundLengths` parameter (by default is `false`) to round values of slides width and height to prevent blurry texts on usual resolution screens + * New `slidesOffsetBefore: 0` and `slidesOffsetAfter: 0` (in px) parameters to add additional slide offset within a container + * Correct calculation for slides size when use CSS padding on `.swiper-container` + * Fixed issue with not working onResize handler when swipes are locked + * Fixed issue with "jumping" effect when you disable `onlyExternal` during touchmove + * Fixed issue when slider goes to previos slide from last slide after window resize + * Added new `swiper.jquery.umd.js` version for the environment where both Swiper and jQuery included as modules + * Minor fixes + +## Swiper 3.0.8 - Released on June 14, 2015 + * Fixed issue with wrong active index and callbacks in Fade effect + * New mousewheel parameters: + * `mousewheelReleaseOnEdges` - will release mousewheel event and allow page scrolling when swiper is on edge positions (in the beginning or in the end) + * `mousewheelInvert` - option to invert mousewheel slides + * Fixed issue with lazy loading in next slides when `slidesPerView` > 1 + * Fixed issue with resistance bounds when swiping is locked + * Fixed issue with wrong slides order in multi-row mode (when `slidesPerColumn` > 1) + * Fixed issue with not working keyboard control in RTL mode + * Fixed issue with nested fade-effect swipers + * Minor fixes + +## Swiper 3.0.7 - Released on April 25, 2015 + * New `width` and `height` parameters to force Swiper size, useful when it is hidden on intialization + * Better support for "Scroll Container". So now Swiper can be used as a scroll container with one single "scrollable"/"swipeable" slide + * Added lazy loading for background images with `data-background` attribute on required elements + * New "Sticky Free Mode" (with `freeModeSticky` parameter) which will snap to slides positions in free mode + * Fixed issues with lazy loading + * Fixed slide removing when loop mode is enabled + * Fixed issues with Autoplay and Fade effect + * Minor fixes + +## Swiper 3.0.6 - Released on March 27, 2015 + * Fixed sometimes wrong slides position when using "Fade" effect + * `.destroy(deleteInstance, cleanupStyles)` method now has second `cleanupStyles` argument, when passed - all custom styles will be removed from slides, wrapper and container. Useful if you need to destroy Swiper and to init again with new options or in different direction + * Minor fixes + +## Swiper 3.0.5 - Released on March 21, 2015 + * New Keyboard accessibility module to provide foucsable navigation buttons and basic ARIA for screen readers with new parameters: + * `a11y: false` - enable accessibility + * `prevSlideMessage: 'Previous slide'` - message for screen readers for previous button + * `nextSlideMessage: 'Next slide'` - message for screen readers for next button + * `firstSlideMessage: 'This is the first slide'` - message for screen readers for previous button when swiper is on first slide + * `lastSlideMessage: 'This is the last slide'` - message for screen readers for next button when swiper is on last slide + * New Emitter module. It allows to work with callbacks like with events, even adding them after initialization with new methods: + * `.on(event, handler)` - add event/callback + * `.off(event, handler)` - remove this event/callback + * `.once(event, handler)` - add event/callback that will be executed only once + * Plugins API is back. It allows to write custom Swiper plugins + * Better support for browser that don't support flexbox layout + * New parameter `setWrapperSize` (be default it is `false`) to provide better compatibility with browser without flexbox support. Enabled this option and plugin will set width/height on swiper wrapper equal to total size of all slides + * New `virtualTranslate` parameter. When it is enabled swiper will be operated as usual except it will not move. Useful when you may need to create custom slide transition + * Added support for multiple Pagination containers + * Fixed `onLazyImage...` callbacks + * Fixed issue with not accessible links inside of Slides on Android < 4.4 + * Fixed pagination bullets behavior in loop mode with specified `slidesPerGroup` + * Fixed issues with clicks on IE 10+ touch devices + * Fixed issues with Coverflow support on IE 10+ + * Hashnav now will update document hash after transition to prevent browsers UI lags, not in the beginning like before + * Super basic support for IE 9 with swiper.jquery version. No animation and transitions, but basic stuff like switching slides/pagination/scrollbars works + + +## Swiper 3.0.4 - Released on March 6, 2015 + * New Images Lazy Load component + * With new parameters `lazyLoading`, `lazyLoadingInPrevNext`, `lazyLoadingOnTransitionStart` (all disabled by default) + * With new callbacks `onLazyImageLoad` and `onLazyImageReady` + * `updateOnImages` ready split into 2 parameters: + * `preloadImages` (by default is true) - to preload all images on swiper init + * `updateOnImages` (by default is true) - update swiper when all images loaded + * Fixed issues with touchmove on fouces form elements + * New `onObserverUpdate` callback function to be called after updates by ovserver + * Fixed issue with not working inputs with keyboard control for jQuery version + * New `paginationBulletRender` parameter that accepts function which allow custom pagination elements layout + * Hash Navigation will run callback dpending on `runCallbacksOnInit` parameter + * `watchVisibility` parameter renamed to `watchSlidesVisibility` + +## Swiper 3.0.3 - Released on March 1, 2015 + * Fixed issue with not firing onSlideChangeEnd callback after calling .slideTo with +runCallbacks=false + * Fixed values of isBeginning/isEnd when there is only one slide + * New `crossFade` option for fade effect + * Improved support for devices with both touch and mouse inputs, not yet on IE + * Fixed not correctly working mousewheel and keyobard control in swiper.jquery version + * New parallax module for transitions with parallax effects on internal elements + * Improved .update and .onResize methods + * Minor fixes + +## Swiper 3.0.2 - Released on February 22, 2015 + * Fixed issue with keyboard events not cleaned up with Swiper.destroy + * Encoded inline SVG images for IE support + * New callbacks + * onInit (swiper) + * onTouchMoveOpposite (swiper, e) + * Fixed free mode momentum in RTL layout + * `.update` method improved to fully cover what `onResize` do for full and correct update + * Exposed `swiper.touches` object with the following properties: `startX`, `startY`, `currentX`, `currentY`, `diff` + * New methods to remove slides + * `.removeSlide(index)` or `.removeSlide([indexes])` - to remove selected slides + * `.removeAllSlides()` - to remove all slides + +## Swiper 3.0.1 - Released on February 13, 2015 + * Fixed issue with navigation buttons in Firefox in loop mode + * Fixed issue with image dragging in IE 10+ + +## Swiper 3.0.0 - Released on February 11, 2015 + * Initial release of all new Swiper 3 + * Removed features + * Dropped support for old browsers. Now it is compatible with: + * iOS 7+ + * Android 4+ (multirow mode only for Android 4.4+) + * Latest Chrome, Safari, Firefox and Opera desktop browsers + * WP 8+, IE 10+ (3D effects may not work correctly on IE because of wrong nested 3D transform support) + * Scroll Container. Removed in favor of pure CSS `overflow: auto` with `-webkit-overflow-scrolling: touch` + * New features + * Swiper now uses modern flexbox layout, which by itself give more features and advantages + * Such Swiper 2.x plugins as Hash Navigation, Smooth Progress, 3D Flow and Scrollbar are now incoroporated into Swiper 3.x core + * Full RTL support + * Built-in navigation buttons/arrows + * Controller. Now one Swiper could be controlled (or control itself) by another Swiper + * Multi row slides layout with `slidesPerColumn` option + * Better support for nested Swipers, now it is possible to use same-direction nested Swipers, like horizontal in horizontal + * Space between slides + * New transition effects: 3D Coverflow, 3D Cube and Fade transitions + * Slides are `border-box` now, so it is possible to use borders and paddings directly on slides + * Auto layout mode (`slidesPerView: 'auto'`) now gives more freedom, you can even specify slides sizes in % and use margins on them + * Mutation Observers. If enabled, Swiper will watch for changes in Dom and update its layout automatically + * Better clicks prevention during swiping + * Many of API methods, parameters and callbacks are changed + * Added a bit lightweight jQuery/Zepto version of Swiper that can be used if you use jQuery/Zepto in your project + + diff --git a/dashboard-ui/bower_components/Swiper/LICENSE b/dashboard-ui/bower_components/Swiper/LICENSE new file mode 100644 index 0000000000..1e18fd4120 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Vladimir Kharlampidi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/dashboard-ui/bower_components/Swiper/bower.json b/dashboard-ui/bower_components/Swiper/bower.json new file mode 100644 index 0000000000..4d8ee8a23b --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/bower.json @@ -0,0 +1,35 @@ +{ + "name": "Swiper", + "repository": { + "type": "git", + "url": "https://github.com/nolimits4web/Swiper.git" + }, + "description": "Most modern mobile touch slider and framework with hardware accelerated transitions", + "version": "3.3.0", + "author": "Vladimir Kharlampidi", + "homepage": "http://www.idangero.us/swiper/", + "keywords": ["swiper", "swipe", "slider", "touch", "ios", "mobile", "cordova", "phonegap", "app", "framework", "carousel", "gallery"], + "dependencies": { + }, + "scripts": [ + "dist/js/swiper.js" + ], + "main": [ + "dist/js/swiper.js", + "dist/css/swiper.css" + ], + "styles": [ + "dist/css/swiper.css" + ], + "license": ["MIT"], + "dependencies": {}, + "ignore": [ + ".*", + "demos", + "gulpfile", + "build", + "node_modules", + "playground", + "package.json" + ] +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/Swiper/component.json b/dashboard-ui/bower_components/Swiper/component.json new file mode 100644 index 0000000000..56ced8b4ea --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/component.json @@ -0,0 +1,17 @@ +{ + "name": "swiper", + "repo": "https://github.com/nolimits4web/Swiper.git", + "description": "Most modern mobile touch slider and framework with hardware accelerated transitions", + "version": "3.3.0", + "keywords": ["swiper", "swipe", "slider", "touch", "ios", "mobile", "cordova", "phonegap", "app", "framework", "carousel", "gallery"], + "dependencies": { + }, + "scripts": [ + "dist/js/swiper.js" + ], + "main": "dist/js/swiper.js", + "styles": [ + "dist/css/swiper.css" + ], + "license": ["MIT"] +} diff --git a/dashboard-ui/bower_components/Swiper/dist/css/swiper.css b/dashboard-ui/bower_components/Swiper/dist/css/swiper.css new file mode 100644 index 0000000000..d4e4e0e61f --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/css/swiper.css @@ -0,0 +1,547 @@ +/** + * Swiper 3.3.0 + * 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: January 10, 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/css/swiper.min.css b/dashboard-ui/bower_components/Swiper/dist/css/swiper.min.css new file mode 100644 index 0000000000..7354722b33 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/css/swiper.min.css @@ -0,0 +1,15 @@ +/** + * Swiper 3.3.0 + * 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: January 10, 2016 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}} \ No newline at end of file diff --git a/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 new file mode 100644 index 0000000000..80ec0f0741 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.min.js.map @@ -0,0 +1 @@ +{"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","detail","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","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","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","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","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","find","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","next","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","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","nextSlide","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","destroyLoop","removeAttr","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","prevSlide","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.0\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: January 10, 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 // 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 for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\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 s.container.each(function () {\n new Swiper(this, params);\n });\n return;\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.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 \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 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])) {\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 activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\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 }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton) {\n if (s.isBeginning) {\n $(s.params.prevButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));\n }\n else {\n $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));\n }\n }\n if (s.params.nextButton) {\n if (s.isEnd) {\n $(s.params.nextButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));\n }\n else {\n $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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 + '\">';\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 }\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 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 s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n s.slideTo(s.activeIndex, 0, false, true);\n }\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) {\n $(s.params.nextButton)[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton) {\n $(s.params.prevButton)[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) $(s.params.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 (detach) {\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) return;\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.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 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 \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 //Opera & IE\n if (e.detail) delta = -e.detail;\n //WebKits\n else 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) {\n var nextButton = $(s.params.nextButton);\n s.a11y.makeFocusable(nextButton);\n s.a11y.addRole(nextButton, 'button');\n s.a11y.addLabel(nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton) {\n var prevButton = $(s.params.prevButton);\n s.a11y.makeFocusable(prevButton);\n s.a11y.addRole(prevButton, 'button');\n s.a11y.addLabel(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}"],"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 new file mode 100644 index 0000000000..afda29ede2 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.umd.min.js.map @@ -0,0 +1 @@ +{"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","detail","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","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","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","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","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","find","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","next","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","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","nextSlide","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","destroyLoop","removeAttr","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","prevSlide","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":"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","file":"swiper.jquery.umd.min.js","sourcesContent":["/**\n * Swiper 3.3.0\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: January 10, 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 // 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 for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\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 s.container.each(function () {\n new Swiper(this, params);\n });\n return;\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.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 \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 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])) {\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 activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\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 }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton) {\n if (s.isBeginning) {\n $(s.params.prevButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));\n }\n else {\n $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));\n }\n }\n if (s.params.nextButton) {\n if (s.isEnd) {\n $(s.params.nextButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));\n }\n else {\n $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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 + '\">';\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 }\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 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 s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n s.slideTo(s.activeIndex, 0, false, true);\n }\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) {\n $(s.params.nextButton)[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton) {\n $(s.params.prevButton)[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) $(s.params.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 (detach) {\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) return;\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.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 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 \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 //Opera & IE\n if (e.detail) delta = -e.detail;\n //WebKits\n else 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) {\n var nextButton = $(s.params.nextButton);\n s.a11y.makeFocusable(nextButton);\n s.a11y.addRole(nextButton, 'button');\n s.a11y.addLabel(nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton) {\n var prevButton = $(s.params.prevButton);\n s.a11y.makeFocusable(prevButton);\n s.a11y.addRole(prevButton, 'button');\n s.a11y.addLabel(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}));"],"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 new file mode 100644 index 0000000000..414dc6e76c --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.min.js.map @@ -0,0 +1 @@ +{"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","detail","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","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","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","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","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","find","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","next","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","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","nextSlide","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","destroyLoop","removeAttr","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","prevSlide","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.0\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: January 10, 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 // 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 for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\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 s.container.each(function () {\n new Swiper(this, params);\n });\n return;\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.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 \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 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])) {\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 activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\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 }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton) {\n if (s.isBeginning) {\n $(s.params.prevButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));\n }\n else {\n $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));\n }\n }\n if (s.params.nextButton) {\n if (s.isEnd) {\n $(s.params.nextButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));\n }\n else {\n $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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 + '\">';\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 }\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 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 s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n s.slideTo(s.activeIndex, 0, false, true);\n }\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) {\n $(s.params.nextButton)[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton) {\n $(s.params.prevButton)[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) $(s.params.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 (detach) {\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) return;\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.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 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 \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 //Opera & IE\n if (e.detail) delta = -e.detail;\n //WebKits\n else 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) {\n var nextButton = $(s.params.nextButton);\n s.a11y.makeFocusable(nextButton);\n s.a11y.addRole(nextButton, 'button');\n s.a11y.addLabel(nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton) {\n var prevButton = $(s.params.prevButton);\n s.a11y.makeFocusable(prevButton);\n s.a11y.addRole(prevButton, 'button');\n s.a11y.addLabel(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}"],"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 new file mode 100644 index 0000000000..49d252db53 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js @@ -0,0 +1,3713 @@ +/** + * Swiper 3.3.0 + * 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: January 10, 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, + // 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; + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + } + }; + // 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) { + s.container.each(function () { + new Swiper(this, params); + }); + return; + } + + // 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.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); + } + + // 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 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])) { + 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); + activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + activeSlide.prev('.' + s.params.slideClass).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)); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton) { + if (s.isBeginning) { + $(s.params.prevButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton)); + } + else { + $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton)); + } + } + if (s.params.nextButton) { + if (s.isEnd) { + $(s.params.nextButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton)); + } + else { + $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.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); + } + } + }; + /*========================= + 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; + } + 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) { + s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + s.slideTo(s.activeIndex, 0, false, true); + } + } + // 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.params.nextButton)[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton) { + $(s.params.prevButton)[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) $(s.params.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 (detach) { + 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) 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.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); + 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 (!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; + //Opera & IE + if (e.detail) delta = -e.detail; + //WebKits + else 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) { + var nextButton = $(s.params.nextButton); + s.a11y.makeFocusable(nextButton); + s.a11y.addRole(nextButton, 'button'); + s.a11y.addLabel(nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton) { + var prevButton = $(s.params.prevButton); + s.a11y.makeFocusable(prevButton); + s.a11y.addRole(prevButton, 'button'); + s.a11y.addLabel(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; + }); +} \ No newline at end of file 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 new file mode 100644 index 0000000000..b2a64858fd --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.3.0 + * 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: January 10, 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(e.detail)t=-e.detail;else 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,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 h in s)if("object"!=typeof s[h]||null===s[h]||(s[h].nodeType||s[h]===window||s[h]===document||"undefined"!=typeof Dom7&&s[h]instanceof Dom7||"undefined"!=typeof jQuery&&s[h]instanceof jQuery))f[h]=s[h];else{f[h]={};for(var g in s[h])f[h][g]=s[h][g]}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;for(var t in a)y.params[t]=a[t];y.currentBreakpoint=e}},y.params.breakpoints&&y.setBreakpoint(),y.container=a(e),0!==y.container.length)){if(y.container.length>1)return void y.container.each(function(){new t(this,s)});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),"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.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 h;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),(!y.support.flexbox||y.params.setWrapperSize)&&(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(h=[],e=0;eMath.floor(y.snapGrid[y.snapGrid.length-1])&&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);if(e.addClass(y.params.slideActiveClass),e.next("."+y.params.slideClass).addClass(y.params.slideNextClass),e.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var t,s=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(t=Math.ceil(y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup,t>y.slides.length-1-2*y.loopedSlides&&(t-=y.slides.length-2*y.loopedSlides),t>s-1&&(t-=s),0>t&&"bullets"!==y.params.paginationType&&(t=s+t)):t="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()===t&&a(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(t).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(t+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(s)),"progress"===y.params.paginationType){var r=(t+1)/s,i=r,n=1;y.isHorizontal()||(n=r,i=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+i+") scaleY("+n+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&y.paginationContainer.html(y.params.paginationCustomRender(y,t+1,s))}y.params.loop||(y.params.prevButton&&(y.isBeginning?(a(y.params.prevButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(a(y.params.prevButton))):(a(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(a(y.params.prevButton)))),y.params.nextButton&&(y.isEnd?(a(y.params.nextButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(a(y.params.nextButton))):(a(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(a(y.params.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.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))}},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;if(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),y.params.freeMode){var s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),("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.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var b=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?b=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(b=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":b[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":b[1],end:y.support.touch||!y.params.simulateTouch?"touchend":b[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 t=e?"off":"on",r=e?"removeEventListener":"addEventListener",i="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],n=y.support.touch?i:document,o=y.params.nested?!0:!1;y.browser.ie?(i[r](y.touchEvents.start,y.onTouchStart,!1),n[r](y.touchEvents.move,y.onTouchMove,o),n[r](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(i[r](y.touchEvents.start,y.onTouchStart,!1),i[r](y.touchEvents.move,y.onTouchMove,o),i[r](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(i[r]("mousedown",y.onTouchStart,!1),document[r]("mousemove",y.onTouchMove,o),document[r]("mouseup",y.onTouchEnd,!1))),window[r]("resize",y.onResize),y.params.nextButton&&(a(y.params.nextButton)[t]("click",y.onClickNext),y.params.a11y&&y.a11y&&a(y.params.nextButton)[t]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&(a(y.params.prevButton)[t]("click",y.onClickPrev),y.params.a11y&&y.a11y&&a(y.params.prevButton)[t]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(a(y.paginationContainer)[t]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&a(y.paginationContainer)[t]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&i[r]("click",y.preventClicks,!0)},y.attachEvents=function(e){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,x,S,C,z,M,P,I,k,E,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,B;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,x=!1,S=!0,z=void 0,B=void 0,y.touches.startX=t,y.touches.startY=s,C=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!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||e.preventedByNestedSwiper)){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,C=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return x=!0,void(y.allowClick=!1);if(S&&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 z){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;z=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(z&&y.emit("onTouchMoveOpposite",y,e),"undefined"==typeof B&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(B=!0),T){if(z)return void(T=!1);if(B||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,e),e.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&e.stopPropagation(),x||(s.loop&&y.fixLoop(),P=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()),E=!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")),x=!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",M=r+P;var i=!0;if(r>0&&M>y.minTranslate()?(i=!1,y.params.resistance&&(M=y.minTranslate()-1+Math.pow(-y.minTranslate()+P+r,y.params.resistanceRatio))):0>r&&MM&&(M=P),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&M>P&&(M=P),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(M=P);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,M=P,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:C}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(M),y.setWrapperTranslate(M)}}}}}},y.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),S&&y.emit("onTouchEnd",y,e),S=!1,T){y.params.grabCursor&&x&&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-C;if(y.allowClick&&(y.updateClickedSlide(e),y.emit("onTap",y,e),300>s&&t-L>300&&(k&&clearTimeout(k),k=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&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,e))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!T||!x||!y.swipeDirection||0===y.touches.diff||M===P)return void(T=x=!1);T=x=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-M,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,E=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(y.snapGrid[h]-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 z=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(z>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(z>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.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),h=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),g=y.params.cube.shadowScale,v=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;e.transform("scale3d("+g+", 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,h=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=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 g="translate3d("+h+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),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),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(A){}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 O in y.plugins){var R=y.plugins[O](y,y.params[O]);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(){if(y.params.nextButton){var e=a(y.params.nextButton);y.a11y.makeFocusable(e),y.a11y.addRole(e,"button"),y.a11y.addLabel(e,y.params.nextSlideMessage)}if(y.params.prevButton){var t=a(y.params.prevButton);y.a11y.makeFocusable(t),y.a11y.addRole(t,"button"),y.a11y.addLabel(t,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; + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + } + }; + // 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) { + s.container.each(function () { + new Swiper(this, params); + }); + return; + } + + // 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.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); + } + + // 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 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])) { + 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); + activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + activeSlide.prev('.' + s.params.slideClass).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)); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton) { + if (s.isBeginning) { + $(s.params.prevButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton)); + } + else { + $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton)); + } + } + if (s.params.nextButton) { + if (s.isEnd) { + $(s.params.nextButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton)); + } + else { + $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.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); + } + } + }; + /*========================= + 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; + } + 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) { + s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + s.slideTo(s.activeIndex, 0, false, true); + } + } + // 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.params.nextButton)[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton) { + $(s.params.prevButton)[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) $(s.params.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 (detach) { + 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) 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.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); + 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 (!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; + //Opera & IE + if (e.detail) delta = -e.detail; + //WebKits + else 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) { + var nextButton = $(s.params.nextButton); + s.a11y.makeFocusable(nextButton); + s.a11y.addRole(nextButton, 'button'); + s.a11y.addLabel(nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton) { + var prevButton = $(s.params.prevButton); + s.a11y.makeFocusable(prevButton); + s.a11y.addRole(prevButton, 'button'); + s.a11y.addLabel(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; +})); \ No newline at end of file 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 new file mode 100644 index 0000000000..f436ece627 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.3.0 + * 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: January 10, 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(e.detail)t=-e.detail;else 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,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 h in s)if("object"!=typeof s[h]||null===s[h]||(s[h].nodeType||s[h]===window||s[h]===document||"undefined"!=typeof Dom7&&s[h]instanceof Dom7||"undefined"!=typeof jQuery&&s[h]instanceof jQuery))f[h]=s[h];else{f[h]={};for(var g in s[h])f[h][g]=s[h][g]}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;for(var t in a)y.params[t]=a[t];y.currentBreakpoint=e}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(a),0!==y.container.length)){if(y.container.length>1)return void y.container.each(function(){new t(this,s)});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),"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.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 h;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),(!y.support.flexbox||y.params.setWrapperSize)&&(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(h=[],e=0;eMath.floor(y.snapGrid[y.snapGrid.length-1])&&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);if(a.addClass(y.params.slideActiveClass),a.next("."+y.params.slideClass).addClass(y.params.slideNextClass),a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var t,s=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(t=Math.ceil(y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup,t>y.slides.length-1-2*y.loopedSlides&&(t-=y.slides.length-2*y.loopedSlides),t>s-1&&(t-=s),0>t&&"bullets"!==y.params.paginationType&&(t=s+t)):t="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()===t&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(t).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(t+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(s)),"progress"===y.params.paginationType){var r=(t+1)/s,i=r,n=1;y.isHorizontal()||(n=r,i=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+i+") scaleY("+n+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&y.paginationContainer.html(y.params.paginationCustomRender(y,t+1,s))}y.params.loop||(y.params.prevButton&&(y.isBeginning?(e(y.params.prevButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(e(y.params.prevButton))):(e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(e(y.params.prevButton)))),y.params.nextButton&&(y.isEnd?(e(y.params.nextButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(e(y.params.nextButton))):(e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(e(y.params.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.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))}},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;if(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),y.params.freeMode){var s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),("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.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var b=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?b=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(b=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":b[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":b[1],end:y.support.touch||!y.params.simulateTouch?"touchend":b[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(a){var t=a?"off":"on",r=a?"removeEventListener":"addEventListener",i="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],n=y.support.touch?i:document,o=y.params.nested?!0:!1;y.browser.ie?(i[r](y.touchEvents.start,y.onTouchStart,!1),n[r](y.touchEvents.move,y.onTouchMove,o),n[r](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(i[r](y.touchEvents.start,y.onTouchStart,!1),i[r](y.touchEvents.move,y.onTouchMove,o),i[r](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(i[r]("mousedown",y.onTouchStart,!1),document[r]("mousemove",y.onTouchMove,o),document[r]("mouseup",y.onTouchEnd,!1))),window[r]("resize",y.onResize),y.params.nextButton&&(e(y.params.nextButton)[t]("click",y.onClickNext),y.params.a11y&&y.a11y&&e(y.params.nextButton)[t]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&(e(y.params.prevButton)[t]("click",y.onClickPrev),y.params.a11y&&y.a11y&&e(y.params.prevButton)[t]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(e(y.paginationContainer)[t]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&e(y.paginationContainer)[t]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&i[r]("click",y.preventClicks,!0)},y.attachEvents=function(e){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 x,T,S,C,z,M,P,I,k,E,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,B;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(x=!0,T=!1,S=!0,z=void 0,B=void 0,y.touches.startX=t,y.touches.startY=s,C=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(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||a.preventedByNestedSwiper)){if(y.params.onlyExternal)return y.allowClick=!1,void(x&&(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,C=Date.now()));if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(D))return T=!0,void(y.allowClick=!1);if(S&&y.emit("onTouchMove",y,a),!(a.targetTouches&&a.targetTouches.length>1)){if(y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,"undefined"==typeof z){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;z=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(z&&y.emit("onTouchMoveOpposite",y,a),"undefined"==typeof B&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(B=!0),x){if(z)return void(x=!1);if(B||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),T||(s.loop&&y.fixLoop(),P=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()),E=!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")),T=!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",M=r+P;var i=!0;if(r>0&&M>y.minTranslate()?(i=!1,y.params.resistance&&(M=y.minTranslate()-1+Math.pow(-y.minTranslate()+P+r,y.params.resistanceRatio))):0>r&&MM&&(M=P),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&M>P&&(M=P),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(M=P);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,M=P,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:C}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(M),y.setWrapperTranslate(M)}}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&y.emit("onTouchEnd",y,a),S=!1,x){y.params.grabCursor&&T&&x&&(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-C;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),300>s&&t-L>300&&(k&&clearTimeout(k), +k=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!e(a.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,a))},300)),300>s&&300>t-L&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,a))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!x||!T||!y.swipeDirection||0===y.touches.diff||M===P)return void(x=T=!1);x=T=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-M,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,E=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(y.snapGrid[h]-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 z=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(z>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(z>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.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),h=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),g=y.params.cube.shadowScale,v=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;a.transform("scale3d("+g+", 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,h=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=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 g="translate3d("+h+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),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),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(A){}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 O in y.plugins){var R=y.plugins[O](y,y.params[O]);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(){if(y.params.nextButton){var a=e(y.params.nextButton);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.nextSlideMessage)}if(y.params.prevButton){var t=e(y.params.prevButton);y.a11y.makeFocusable(t),y.a11y.addRole(t,"button"),y.a11y.addLabel(t,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; + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + } + }; + // 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) { + s.container.each(function () { + new Swiper(this, params); + }); + return; + } + + // 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.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); + } + + // 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 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])) { + 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); + activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + activeSlide.prev('.' + s.params.slideClass).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)); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton) { + if (s.isBeginning) { + $(s.params.prevButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton)); + } + else { + $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton)); + } + } + if (s.params.nextButton) { + if (s.isEnd) { + $(s.params.nextButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton)); + } + else { + $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.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); + } + } + }; + /*========================= + 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; + } + 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) { + s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + s.slideTo(s.activeIndex, 0, false, true); + } + } + // 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.params.nextButton)[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton) { + $(s.params.prevButton)[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) $(s.params.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 (detach) { + 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) 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.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); + 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 (!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; + //Opera & IE + if (e.detail) delta = -e.detail; + //WebKits + else 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) { + var nextButton = $(s.params.nextButton); + s.a11y.makeFocusable(nextButton); + s.a11y.addRole(nextButton, 'button'); + s.a11y.addLabel(nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton) { + var prevButton = $(s.params.prevButton); + s.a11y.makeFocusable(prevButton); + s.a11y.addRole(prevButton, 'button'); + s.a11y.addLabel(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; + }); +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.min.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.min.js new file mode 100644 index 0000000000..a5c363b835 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.3.0 + * 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: January 10, 2016 + */ +!function(){"use strict";function e(e){e.fn.swiper=function(a){var i;return e(this).each(function(){var e=new t(this,a);i||(i=e)}),i}}var a,t=function(e,r){function s(e){return Math.floor(e)}function n(){b.autoplayTimeoutId=setTimeout(function(){b.params.loop?(b.fixLoop(),b._slideNext(),b.emit("onAutoplay",b)):b.isEnd?r.autoplayStopOnLast?b.stopAutoplay():(b._slideTo(0),b.emit("onAutoplay",b)):(b._slideNext(),b.emit("onAutoplay",b))},b.params.autoplay)}function o(e,t){var i=a(e.target);if(!i.is(t))if("string"==typeof t)i=i.parents(t);else if(t.nodeType){var r;return i.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==i.length)return i[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,i=new t(function(e){e.forEach(function(e){b.onResize(!0),b.emit("onObserverUpdate",b,e)})});i.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}),b.observers.push(i)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!b.params.allowSwipeToNext&&(b.isHorizontal()&&39===a||!b.isHorizontal()&&40===a))return!1;if(!b.params.allowSwipeToPrev&&(b.isHorizontal()&&37===a||!b.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(b.container.parents(".swiper-slide").length>0&&0===b.container.parents(".swiper-slide-active").length)return;var i={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,s=window.innerHeight,n=b.container.offset();b.rtl&&(n.left=n.left-b.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+b.width,n.top],[n.left,n.top+b.height],[n.left+b.width,n.top+b.height]],l=0;l=i.left&&p[0]<=i.left+r&&p[1]>=i.top&&p[1]<=i.top+s&&(t=!0)}if(!t)return}b.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!b.rtl||37===a&&b.rtl)&&b.slideNext(),(37===a&&!b.rtl||39===a&&b.rtl)&&b.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&b.slideNext(),38===a&&b.slidePrev())}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=b.mousewheel.event,t=0,i=b.rtl?-1:1;if(e.detail)t=-e.detail;else if("mousewheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*i}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*i:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*i}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*i:-e.deltaY;if(0!==t){if(b.params.mousewheelInvert&&(t=-t),b.params.freeMode){var r=b.getWrapperTranslate()+t*b.params.mousewheelSensitivity,s=b.isBeginning,n=b.isEnd;if(r>=b.minTranslate()&&(r=b.minTranslate()),r<=b.maxTranslate()&&(r=b.maxTranslate()),b.setWrapperTransition(0),b.setWrapperTranslate(r),b.updateProgress(),b.updateActiveIndex(),(!s&&b.isBeginning||!n&&b.isEnd)&&b.updateClasses(),b.params.freeModeSticky?(clearTimeout(b.mousewheel.timeout),b.mousewheel.timeout=setTimeout(function(){b.slideReset()},300)):b.params.lazyLoading&&b.lazy&&b.lazy.load(),0===r||r===b.maxTranslate())return}else{if((new window.Date).getTime()-b.mousewheel.lastScrollTime>60)if(0>t)if(b.isEnd&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slideNext();else if(b.isBeginning&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slidePrev();b.mousewheel.lastScrollTime=(new window.Date).getTime()}return b.params.autoplay&&b.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function u(e,t){e=a(e);var i,r,s,n=b.rtl?-1:1;i=e.attr("data-swiper-parallax")||"0",r=e.attr("data-swiper-parallax-x"),s=e.attr("data-swiper-parallax-y"),r||s?(r=r||"0",s=s||"0"):b.isHorizontal()?(r=i,s="0"):(s=i,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",s=s.indexOf("%")>=0?parseInt(s,10)*t+"%":s*t+"px",e.transform("translate3d("+r+", "+s+",0px)")}function c(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,r);var m={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,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},f=r&&r.virtualTranslate;r=r||{};var h={};for(var g in r)if("object"!=typeof r[g]||null===r[g]||(r[g].nodeType||r[g]===window||r[g]===document||"undefined"!=typeof i&&r[g]instanceof i||"undefined"!=typeof jQuery&&r[g]instanceof jQuery))h[g]=r[g];else{h[g]={};for(var v in r[g])h[g][v]=r[g][v]}for(var w in m)if("undefined"==typeof r[w])r[w]=m[w];else if("object"==typeof r[w])for(var y in m[w])"undefined"==typeof r[w][y]&&(r[w][y]=m[w][y]);var b=this;if(b.params=r,b.originalParams=h,b.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof i&&(a=i),("undefined"!=typeof a||(a="undefined"==typeof i?window.Dom7||window.Zepto||window.jQuery:i))&&(b.$=a,b.currentBreakpoint=void 0,b.getActiveBreakpoint=function(){if(!b.params.breakpoints)return!1;var e,a=!1,t=[];for(e in b.params.breakpoints)b.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var i=0;i=window.innerWidth&&!a&&(a=e);return a||"max"},b.setBreakpoint=function(){var e=b.getActiveBreakpoint();if(e&&b.currentBreakpoint!==e){var a=e in b.params.breakpoints?b.params.breakpoints[e]:b.originalParams;for(var t in a)b.params[t]=a[t];b.currentBreakpoint=e}},b.params.breakpoints&&b.setBreakpoint(),b.container=a(e),0!==b.container.length)){if(b.container.length>1)return void b.container.each(function(){new t(this,r)});b.container[0].swiper=b,b.container.data("swiper",b),b.classNames.push("swiper-container-"+b.params.direction),b.params.freeMode&&b.classNames.push("swiper-container-free-mode"),b.support.flexbox||(b.classNames.push("swiper-container-no-flexbox"),b.params.slidesPerColumn=1),b.params.autoHeight&&b.classNames.push("swiper-container-autoheight"),(b.params.parallax||b.params.watchSlidesVisibility)&&(b.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(b.params.effect)>=0&&(b.support.transforms3d?(b.params.watchSlidesProgress=!0,b.classNames.push("swiper-container-3d")):b.params.effect="slide"),"slide"!==b.params.effect&&b.classNames.push("swiper-container-"+b.params.effect),"cube"===b.params.effect&&(b.params.resistanceRatio=0,b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.centeredSlides=!1,b.params.spaceBetween=0,b.params.virtualTranslate=!0,b.params.setWrapperSize=!1),("fade"===b.params.effect||"flip"===b.params.effect)&&(b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.watchSlidesProgress=!0,b.params.spaceBetween=0,b.params.setWrapperSize=!1,"undefined"==typeof f&&(b.params.virtualTranslate=!0)),b.params.grabCursor&&b.support.touch&&(b.params.grabCursor=!1),b.wrapper=b.container.children("."+b.params.wrapperClass),b.params.pagination&&(b.paginationContainer=a(b.params.pagination),"bullets"===b.params.paginationType&&b.params.paginationClickable?b.paginationContainer.addClass("swiper-pagination-clickable"):b.params.paginationClickable=!1,b.paginationContainer.addClass("swiper-pagination-"+b.params.paginationType)),b.isHorizontal=function(){return"horizontal"===b.params.direction},b.rtl=b.isHorizontal()&&("rtl"===b.container[0].dir.toLowerCase()||"rtl"===b.container.css("direction")),b.rtl&&b.classNames.push("swiper-container-rtl"),b.rtl&&(b.wrongRTL="-webkit-box"===b.wrapper.css("display")),b.params.slidesPerColumn>1&&b.classNames.push("swiper-container-multirow"),b.device.android&&b.classNames.push("swiper-container-android"),b.container.addClass(b.classNames.join(" ")),b.translate=0,b.progress=0,b.velocity=0,b.lockSwipeToNext=function(){b.params.allowSwipeToNext=!1},b.lockSwipeToPrev=function(){b.params.allowSwipeToPrev=!1},b.lockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!1},b.unlockSwipeToNext=function(){b.params.allowSwipeToNext=!0},b.unlockSwipeToPrev=function(){b.params.allowSwipeToPrev=!0},b.unlockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!0},b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab"),b.imagesToLoad=[],b.imagesLoaded=0,b.loadImage=function(e,a,t,i,r){function s(){r&&r()}var n;e.complete&&i?s():a?(n=new window.Image,n.onload=s,n.onerror=s,t&&(n.srcset=t),a&&(n.src=a)):s()},b.preloadImages=function(){function e(){"undefined"!=typeof b&&null!==b&&(void 0!==b.imagesLoaded&&b.imagesLoaded++,b.imagesLoaded===b.imagesToLoad.length&&(b.params.updateOnImagesReady&&b.update(),b.emit("onImagesReady",b)))}b.imagesToLoad=b.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*b.size),b.virtualSize=-a,b.rtl?b.slides.css({marginLeft:"",marginTop:""}):b.slides.css({marginRight:"",marginBottom:""});var n;b.params.slidesPerColumn>1&&(n=Math.floor(b.slides.length/b.params.slidesPerColumn)===b.slides.length/b.params.slidesPerColumn?b.slides.length:Math.ceil(b.slides.length/b.params.slidesPerColumn)*b.params.slidesPerColumn,"auto"!==b.params.slidesPerView&&"row"===b.params.slidesPerColumnFill&&(n=Math.max(n,b.params.slidesPerView*b.params.slidesPerColumn)));var o,l=b.params.slidesPerColumn,p=n/l,d=p-(b.params.slidesPerColumn*p-b.slides.length);for(e=0;e1){var c,m,f;"column"===b.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&&b.params.spaceBetween&&b.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",f)}"none"!==u.css("display")&&("auto"===b.params.slidesPerView?(o=b.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),b.params.roundLengths&&(o=s(o))):(o=(b.size-(b.params.slidesPerView-1)*a)/b.params.slidesPerView,b.params.roundLengths&&(o=s(o)),b.isHorizontal()?b.slides[e].style.width=o+"px":b.slides[e].style.height=o+"px"),b.slides[e].swiperSlideSize=o,b.slidesSizesGrid.push(o),b.params.centeredSlides?(t=t+o/2+i/2+a,0===e&&(t=t-b.size/2-a),Math.abs(t)<.001&&(t=0),r%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t)):(r%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t),t=t+o+a),b.virtualSize+=o+a,i=o,r++)}b.virtualSize=Math.max(b.virtualSize,b.size)+b.params.slidesOffsetAfter;var h;if(b.rtl&&b.wrongRTL&&("slide"===b.params.effect||"coverflow"===b.params.effect)&&b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),(!b.support.flexbox||b.params.setWrapperSize)&&(b.isHorizontal()?b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}):b.wrapper.css({height:b.virtualSize+b.params.spaceBetween+"px"})),b.params.slidesPerColumn>1&&(b.virtualSize=(o+b.params.spaceBetween)*n,b.virtualSize=Math.ceil(b.virtualSize/b.params.slidesPerColumn)-b.params.spaceBetween,b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),b.params.centeredSlides)){for(h=[],e=0;eMath.floor(b.snapGrid[b.snapGrid.length-1])&&b.snapGrid.push(b.virtualSize-b.size)}0===b.snapGrid.length&&(b.snapGrid=[0]),0!==b.params.spaceBetween&&(b.isHorizontal()?b.rtl?b.slides.css({marginLeft:a+"px"}):b.slides.css({marginRight:a+"px"}):b.slides.css({marginBottom:a+"px"})),b.params.watchSlidesProgress&&b.updateSlidesOffset()},b.updateSlidesOffset=function(){for(var e=0;e=0&&s0&&n<=b.size||0>=s&&n>=b.size;o&&b.slides.eq(t).addClass(b.params.slideVisibleClass)}i.progress=b.rtl?-r:r}}},b.updateProgress=function(e){"undefined"==typeof e&&(e=b.translate||0);var a=b.maxTranslate()-b.minTranslate(),t=b.isBeginning,i=b.isEnd;0===a?(b.progress=0,b.isBeginning=b.isEnd=!0):(b.progress=(e-b.minTranslate())/a,b.isBeginning=b.progress<=0,b.isEnd=b.progress>=1),b.isBeginning&&!t&&b.emit("onReachBeginning",b),b.isEnd&&!i&&b.emit("onReachEnd",b),b.params.watchSlidesProgress&&b.updateSlidesProgress(e),b.emit("onProgress",b,b.progress)},b.updateActiveIndex=function(){var e,a,t,i=b.rtl?b.translate:-b.translate;for(a=0;a=b.slidesGrid[a]&&i=b.slidesGrid[a]&&i=b.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/b.params.slidesPerGroup),t>=b.snapGrid.length&&(t=b.snapGrid.length-1),e!==b.activeIndex&&(b.snapIndex=t,b.previousIndex=b.activeIndex,b.activeIndex=e,b.updateClasses())},b.updateClasses=function(){b.slides.removeClass(b.params.slideActiveClass+" "+b.params.slideNextClass+" "+b.params.slidePrevClass);var e=b.slides.eq(b.activeIndex);if(e.addClass(b.params.slideActiveClass),e.next("."+b.params.slideClass).addClass(b.params.slideNextClass),e.prev("."+b.params.slideClass).addClass(b.params.slidePrevClass),b.paginationContainer&&b.paginationContainer.length>0){var t,i=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length;if(b.params.loop?(t=Math.ceil(b.activeIndex-b.loopedSlides)/b.params.slidesPerGroup,t>b.slides.length-1-2*b.loopedSlides&&(t-=b.slides.length-2*b.loopedSlides),t>i-1&&(t-=i),0>t&&"bullets"!==b.params.paginationType&&(t=i+t)):t="undefined"!=typeof b.snapIndex?b.snapIndex:b.activeIndex||0,"bullets"===b.params.paginationType&&b.bullets&&b.bullets.length>0&&(b.bullets.removeClass(b.params.bulletActiveClass),b.paginationContainer.length>1?b.bullets.each(function(){a(this).index()===t&&a(this).addClass(b.params.bulletActiveClass)}):b.bullets.eq(t).addClass(b.params.bulletActiveClass)),"fraction"===b.params.paginationType&&(b.paginationContainer.find("."+b.params.paginationCurrentClass).text(t+1),b.paginationContainer.find("."+b.params.paginationTotalClass).text(i)),"progress"===b.params.paginationType){var r=(t+1)/i,s=r,n=1;b.isHorizontal()||(n=r,s=1),b.paginationContainer.find("."+b.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+s+") scaleY("+n+")").transition(b.params.speed)}"custom"===b.params.paginationType&&b.params.paginationCustomRender&&b.paginationContainer.html(b.params.paginationCustomRender(b,t+1,i))}b.params.loop||(b.params.prevButton&&(b.isBeginning?(a(b.params.prevButton).addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(a(b.params.prevButton))):(a(b.params.prevButton).removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(a(b.params.prevButton)))),b.params.nextButton&&(b.isEnd?(a(b.params.nextButton).addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(a(b.params.nextButton))):(a(b.params.nextButton).removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(a(b.params.nextButton)))))},b.updatePagination=function(){if(b.params.pagination&&b.paginationContainer&&b.paginationContainer.length>0){var e="";if("bullets"===b.params.paginationType){for(var a=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length,t=0;a>t;t++)e+=b.params.paginationBulletRender?b.params.paginationBulletRender(t,b.params.bulletClass):"<"+b.params.paginationElement+' class="'+b.params.bulletClass+'">";b.paginationContainer.html(e),b.bullets=b.paginationContainer.find("."+b.params.bulletClass),b.params.paginationClickable&&b.params.a11y&&b.a11y&&b.a11y.initPagination()}"fraction"===b.params.paginationType&&(e=b.params.paginationFractionRender?b.params.paginationFractionRender(b,b.params.paginationCurrentClass,b.params.paginationTotalClass):' / ',b.paginationContainer.html(e)),"progress"===b.params.paginationType&&(e=b.params.paginationProgressRender?b.params.paginationProgressRender(b,b.params.paginationProgressbarClass):'',b.paginationContainer.html(e))}},b.update=function(e){function a(){i=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate()),b.setWrapperTranslate(i),b.updateActiveIndex(),b.updateClasses()}if(b.updateContainerSize(),b.updateSlidesSize(),b.updateProgress(),b.updatePagination(),b.updateClasses(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),e){var t,i;b.controller&&b.controller.spline&&(b.controller.spline=void 0),b.params.freeMode?(a(),b.params.autoHeight&&b.updateAutoHeight()):(t=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0),t||a())}else b.params.autoHeight&&b.updateAutoHeight()},b.onResize=function(e){b.params.breakpoints&&b.setBreakpoint();var a=b.params.allowSwipeToPrev,t=b.params.allowSwipeToNext;if(b.params.allowSwipeToPrev=b.params.allowSwipeToNext=!0,b.updateContainerSize(),b.updateSlidesSize(),("auto"===b.params.slidesPerView||b.params.freeMode||e)&&b.updatePagination(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),b.controller&&b.controller.spline&&(b.controller.spline=void 0),b.params.freeMode){var i=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate());b.setWrapperTranslate(i),b.updateActiveIndex(),b.updateClasses(),b.params.autoHeight&&b.updateAutoHeight()}else b.updateClasses(),("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0);b.params.allowSwipeToPrev=a,b.params.allowSwipeToNext=t};var T=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?T=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(T=["MSPointerDown","MSPointerMove","MSPointerUp"]),b.touchEvents={start:b.support.touch||!b.params.simulateTouch?"touchstart":T[0],move:b.support.touch||!b.params.simulateTouch?"touchmove":T[1],end:b.support.touch||!b.params.simulateTouch?"touchend":T[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===b.params.touchEventsTarget?b.container:b.wrapper).addClass("swiper-wp8-"+b.params.direction),b.initEvents=function(e){var t=e?"off":"on",i=e?"removeEventListener":"addEventListener",s="container"===b.params.touchEventsTarget?b.container[0]:b.wrapper[0],n=b.support.touch?s:document,o=b.params.nested?!0:!1;b.browser.ie?(s[i](b.touchEvents.start,b.onTouchStart,!1),n[i](b.touchEvents.move,b.onTouchMove,o),n[i](b.touchEvents.end,b.onTouchEnd,!1)):(b.support.touch&&(s[i](b.touchEvents.start,b.onTouchStart,!1),s[i](b.touchEvents.move,b.onTouchMove,o),s[i](b.touchEvents.end,b.onTouchEnd,!1)),!r.simulateTouch||b.device.ios||b.device.android||(s[i]("mousedown",b.onTouchStart,!1),document[i]("mousemove",b.onTouchMove,o),document[i]("mouseup",b.onTouchEnd,!1))),window[i]("resize",b.onResize),b.params.nextButton&&(a(b.params.nextButton)[t]("click",b.onClickNext),b.params.a11y&&b.a11y&&a(b.params.nextButton)[t]("keydown",b.a11y.onEnterKey)),b.params.prevButton&&(a(b.params.prevButton)[t]("click",b.onClickPrev),b.params.a11y&&b.a11y&&a(b.params.prevButton)[t]("keydown",b.a11y.onEnterKey)),b.params.pagination&&b.params.paginationClickable&&(a(b.paginationContainer)[t]("click","."+b.params.bulletClass,b.onClickIndex),b.params.a11y&&b.a11y&&a(b.paginationContainer)[t]("keydown","."+b.params.bulletClass,b.a11y.onEnterKey)),(b.params.preventClicks||b.params.preventClicksPropagation)&&s[i]("click",b.preventClicks,!0)},b.attachEvents=function(e){b.initEvents()},b.detachEvents=function(){b.initEvents(!0)},b.allowClick=!0,b.preventClicks=function(e){b.allowClick||(b.params.preventClicks&&e.preventDefault(),b.params.preventClicksPropagation&&b.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},b.onClickNext=function(e){e.preventDefault(),(!b.isEnd||b.params.loop)&&b.slideNext()},b.onClickPrev=function(e){e.preventDefault(),(!b.isBeginning||b.params.loop)&&b.slidePrev()},b.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*b.params.slidesPerGroup;b.params.loop&&(t+=b.loopedSlides),b.slideTo(t)},b.updateClickedSlide=function(e){var t=o(e,"."+b.params.slideClass),i=!1;if(t)for(var r=0;rb.slides.length-b.loopedSlides+b.params.slidesPerView/2?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n):n>b.slides.length-b.params.slidesPerView?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n)}else b.slideTo(n)}};var x,S,C,z,M,P,E,k,I,L,D="input, select, textarea, button",H=Date.now(),B=[];b.animating=!1,b.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var A,G;if(b.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),A="touchstart"===e.type,A||!("which"in e)||3!==e.which){if(b.params.noSwiping&&o(e,"."+b.params.noSwipingClass))return void(b.allowClick=!0);if(!b.params.swipeHandler||o(e,b.params.swipeHandler)){var t=b.touches.currentX="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,i=b.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(b.device.ios&&b.params.iOSEdgeSwipeDetection&&t<=b.params.iOSEdgeSwipeThreshold)){if(x=!0,S=!1,C=!0,M=void 0,G=void 0,b.touches.startX=t,b.touches.startY=i,z=Date.now(),b.allowClick=!0,b.updateContainerSize(),b.swipeDirection=void 0,b.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()}b.emit("onTouchStart",b,e)}}}},b.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!(A&&"mousemove"===e.type||e.preventedByNestedSwiper)){if(b.params.onlyExternal)return b.allowClick=!1,void(x&&(b.touches.startX=b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.startY=b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,z=Date.now()));if(A&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return S=!0,void(b.allowClick=!1);if(C&&b.emit("onTouchMove",b,e),!(e.targetTouches&&e.targetTouches.length>1)){if(b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof M){var t=180*Math.atan2(Math.abs(b.touches.currentY-b.touches.startY),Math.abs(b.touches.currentX-b.touches.startX))/Math.PI;M=b.isHorizontal()?t>b.params.touchAngle:90-t>b.params.touchAngle}if(M&&b.emit("onTouchMoveOpposite",b,e),"undefined"==typeof G&&b.browser.ieTouch&&(b.touches.currentX!==b.touches.startX||b.touches.currentY!==b.touches.startY)&&(G=!0),x){if(M)return void(x=!1);if(G||!b.browser.ieTouch){b.allowClick=!1,b.emit("onSliderMove",b,e),e.preventDefault(),b.params.touchMoveStopPropagation&&!b.params.nested&&e.stopPropagation(),S||(r.loop&&b.fixLoop(),E=b.getWrapperTranslate(),b.setWrapperTransition(0),b.animating&&b.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),b.params.autoplay&&b.autoplaying&&(b.params.autoplayDisableOnInteraction?b.stopAutoplay():b.pauseAutoplay()),L=!1,b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grabbing",b.container[0].style.cursor="-moz-grabbin",b.container[0].style.cursor="grabbing")),S=!0;var i=b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY;i*=b.params.touchRatio,b.rtl&&(i=-i),b.swipeDirection=i>0?"prev":"next",P=i+E;var s=!0;if(i>0&&P>b.minTranslate()?(s=!1,b.params.resistance&&(P=b.minTranslate()-1+Math.pow(-b.minTranslate()+E+i,b.params.resistanceRatio))):0>i&&PP&&(P=E),!b.params.allowSwipeToPrev&&"prev"===b.swipeDirection&&P>E&&(P=E),b.params.followFinger){if(b.params.threshold>0){if(!(Math.abs(i)>b.params.threshold||k))return void(P=E);if(!k)return k=!0,b.touches.startX=b.touches.currentX,b.touches.startY=b.touches.currentY,P=E,void(b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY)}(b.params.freeMode||b.params.watchSlidesProgress)&&b.updateActiveIndex(),b.params.freeMode&&(0===B.length&&B.push({position:b.touches[b.isHorizontal()?"startX":"startY"],time:z}),B.push({position:b.touches[b.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),b.updateProgress(P),b.setWrapperTranslate(P)}}}}}},b.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),C&&b.emit("onTouchEnd",b,e),C=!1,x){b.params.grabCursor&&S&&x&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab");var t=Date.now(),i=t-z;if(b.allowClick&&(b.updateClickedSlide(e),b.emit("onTap",b,e),300>i&&t-H>300&&(I&&clearTimeout(I),I=setTimeout(function(){b&&(b.params.paginationHide&&b.paginationContainer.length>0&&!a(e.target).hasClass(b.params.bulletClass)&&b.paginationContainer.toggleClass(b.params.paginationHiddenClass), +b.emit("onClick",b,e))},300)),300>i&&300>t-H&&(I&&clearTimeout(I),b.emit("onDoubleTap",b,e))),H=Date.now(),setTimeout(function(){b&&(b.allowClick=!0)},0),!x||!S||!b.swipeDirection||0===b.touches.diff||P===E)return void(x=S=!1);x=S=!1;var r;if(r=b.params.followFinger?b.rtl?b.translate:-b.translate:-P,b.params.freeMode){if(r<-b.minTranslate())return void b.slideTo(b.activeIndex);if(r>-b.maxTranslate())return void(b.slides.length1){var s=B.pop(),n=B.pop(),o=s.position-n.position,l=s.time-n.time;b.velocity=o/l,b.velocity=b.velocity/2,Math.abs(b.velocity)150||(new window.Date).getTime()-s.time>300)&&(b.velocity=0)}else b.velocity=0;B.length=0;var p=1e3*b.params.freeModeMomentumRatio,d=b.velocity*p,u=b.translate+d;b.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(b.velocity)*b.params.freeModeMomentumBounceRatio;if(ub.minTranslate())b.params.freeModeMomentumBounce?(u-b.minTranslate()>f&&(u=b.minTranslate()+f),c=b.minTranslate(),m=!0,L=!0):u=b.minTranslate();else if(b.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(b.snapGrid[h]-u)=b.params.longSwipesMs)&&(b.updateProgress(),b.updateActiveIndex()))}var v,w=0,y=b.slidesSizesGrid[0];for(v=0;v=b.slidesGrid[v]&&r=b.slidesGrid[v]&&(w=v,y=b.slidesGrid[b.slidesGrid.length-1]-b.slidesGrid[b.slidesGrid.length-2]);var T=(r-b.slidesGrid[w])/y;if(i>b.params.longSwipesMs){if(!b.params.longSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&(T>=b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w)),"prev"===b.swipeDirection&&(T>1-b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w))}else{if(!b.params.shortSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&b.slideTo(w+b.params.slidesPerGroup),"prev"===b.swipeDirection&&b.slideTo(w)}}},b._slideTo=function(e,a){return b.slideTo(e,a,!0,!0)},b.slideTo=function(e,a,t,i){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),b.snapIndex=Math.floor(e/b.params.slidesPerGroup),b.snapIndex>=b.snapGrid.length&&(b.snapIndex=b.snapGrid.length-1);var r=-b.snapGrid[b.snapIndex];b.params.autoplay&&b.autoplaying&&(i||!b.params.autoplayDisableOnInteraction?b.pauseAutoplay(a):b.stopAutoplay()),b.updateProgress(r);for(var s=0;s=Math.floor(100*b.slidesGrid[s])&&(e=s);return!b.params.allowSwipeToNext&&rb.translate&&r>b.maxTranslate()&&(b.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=b.params.speed),b.previousIndex=b.activeIndex||0,b.activeIndex=e,b.rtl&&-r===b.translate||!b.rtl&&r===b.translate?(b.params.autoHeight&&b.updateAutoHeight(),b.updateClasses(),"slide"!==b.params.effect&&b.setWrapperTranslate(r),!1):(b.updateClasses(),b.onTransitionStart(t),0===a?(b.setWrapperTranslate(r),b.setWrapperTransition(0),b.onTransitionEnd(t)):(b.setWrapperTranslate(r),b.setWrapperTransition(a),b.animating||(b.animating=!0,b.wrapper.transitionEnd(function(){b&&b.onTransitionEnd(t)}))),!0))},b.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),b.params.autoHeight&&b.updateAutoHeight(),b.lazy&&b.lazy.onTransitionStart(),e&&(b.emit("onTransitionStart",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeStart",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextStart",b):b.emit("onSlidePrevStart",b)))},b.onTransitionEnd=function(e){b.animating=!1,b.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),b.lazy&&b.lazy.onTransitionEnd(),e&&(b.emit("onTransitionEnd",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeEnd",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextEnd",b):b.emit("onSlidePrevEnd",b))),b.params.hashnav&&b.hashnav&&b.hashnav.setHash()},b.slideNext=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)}return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)},b._slideNext=function(e){return b.slideNext(!0,e,!0)},b.slidePrev=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex-1,a,e,t)}return b.slideTo(b.activeIndex-1,a,e,t)},b._slidePrev=function(e){return b.slidePrev(!0,e,!0)},b.slideReset=function(e,a,t){return b.slideTo(b.activeIndex,a,e)},b.setWrapperTransition=function(e,a){b.wrapper.transition(e),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTransition(e),b.params.parallax&&b.parallax&&b.parallax.setTransition(e),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTransition(e),b.params.control&&b.controller&&b.controller.setTransition(e,a),b.emit("onSetTransition",b,e)},b.setWrapperTranslate=function(e,a,t){var i=0,r=0,n=0;b.isHorizontal()?i=b.rtl?-e:e:r=e,b.params.roundLengths&&(i=s(i),r=s(r)),b.params.virtualTranslate||(b.support.transforms3d?b.wrapper.transform("translate3d("+i+"px, "+r+"px, "+n+"px)"):b.wrapper.transform("translate("+i+"px, "+r+"px)")),b.translate=b.isHorizontal()?i:r;var o,l=b.maxTranslate()-b.minTranslate();o=0===l?0:(e-b.minTranslate())/l,o!==b.progress&&b.updateProgress(e),a&&b.updateActiveIndex(),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTranslate(b.translate),b.params.parallax&&b.parallax&&b.parallax.setTranslate(b.translate),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTranslate(b.translate),b.params.control&&b.controller&&b.controller.setTranslate(b.translate,t),b.emit("onSetTranslate",b,b.translate)},b.getTranslate=function(e,a){var t,i,r,s;return"undefined"==typeof a&&(a="x"),b.params.virtualTranslate?b.rtl?-b.translate:b.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(i=r.transform||r.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),s=new window.WebKitCSSMatrix("none"===i?"":i)):(s=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=s.toString().split(",")),"x"===a&&(i=window.WebKitCSSMatrix?s.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(i=window.WebKitCSSMatrix?s.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),b.rtl&&i&&(i=-i),i||0)},b.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=b.isHorizontal()?"x":"y"),b.getTranslate(b.wrapper[0],e)},b.observers=[],b.initObservers=function(){if(b.params.observeParents)for(var e=b.container.parents(),a=0;ae.length&&(b.loopedSlides=e.length);var t,i=[],r=[];for(e.each(function(t,s){var n=a(this);t=e.length-b.loopedSlides&&i.push(s),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)b.wrapper.prepend(a(i[t].cloneNode(!0)).addClass(b.params.slideDuplicateClass))},b.destroyLoop=function(){b.wrapper.children("."+b.params.slideClass+"."+b.params.slideDuplicateClass).remove(),b.slides.removeAttr("data-swiper-slide-index")},b.fixLoop=function(){var e;b.activeIndex=2*b.loopedSlides||b.activeIndex>b.slides.length-2*b.params.slidesPerView)&&(e=-b.slides.length+b.activeIndex+b.loopedSlides,e+=b.loopedSlides,b.slideTo(e,0,!1,!0))},b.appendSlide=function(e){if(b.params.loop&&b.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,b.slides[a]&&b.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);b.params.loop&&b.createLoop(),b.params.observer&&b.support.observer||b.update(!0),b.params.loop?b.slideTo(t+b.loopedSlides,0,!1):b.slideTo(t,0,!1)},b.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(-i,0)),u.length&&(u[0].style.opacity=Math.max(i,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){if(b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.virtualTranslate&&0!==e){var t=!1;b.slides.eq(b.activeIndex).transitionEnd(function(){if(!t&&b&&a(this).hasClass(b.params.slideActiveClass)){t=!0,b.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],i=0;i'),b.wrapper.append(e)),e.css({height:b.width+"px"})):(e=b.container.find(".swiper-cube-shadow"),0===e.length&&(e=a('
'),b.container.append(e))));for(var i=0;i=o&&o>-1&&(t=90*i+90*o,b.rtl&&(t=90*-i-90*o)),r.transform(u),b.params.cube.slideShadows){var c=b.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),m=b.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(b.wrapper.css({"-webkit-transform-origin":"50% 50% -"+b.size/2+"px","-moz-transform-origin":"50% 50% -"+b.size/2+"px","-ms-transform-origin":"50% 50% -"+b.size/2+"px","transform-origin":"50% 50% -"+b.size/2+"px"}),b.params.cube.shadow)if(b.isHorizontal())e.transform("translate3d(0px, "+(b.width/2+b.params.cube.shadowOffset)+"px, "+-b.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+b.params.cube.shadowScale+")");else{var f=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),g=b.params.cube.shadowScale,v=b.params.cube.shadowScale/h,w=b.params.cube.shadowOffset;e.transform("scale3d("+g+", 1, "+v+") translate3d(0px, "+(b.height/2+w)+"px, "+-b.height/2/v+"px) rotateX(-90deg)")}var y=b.isSafari||b.isUiWebView?-b.size/2:0;b.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(b.isHorizontal()?0:t)+"deg) rotateY("+(b.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.cube.shadow&&!b.isHorizontal()&&b.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=b.translate,t=b.isHorizontal()?-e+b.width/2:-e+b.height/2,i=b.isHorizontal()?b.params.coverflow.rotate:-b.params.coverflow.rotate,r=b.params.coverflow.depth,s=0,n=b.slides.length;n>s;s++){var o=b.slides.eq(s),l=b.slidesSizesGrid[s],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*b.params.coverflow.modifier,u=b.isHorizontal()?i*d:0,c=b.isHorizontal()?0:i*d,m=-r*Math.abs(d),f=b.isHorizontal()?0:b.params.coverflow.stretch*d,h=b.isHorizontal()?b.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=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 g="translate3d("+h+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),o[0].style.zIndex=-Math.abs(Math.round(d))+1,b.params.coverflow.slideShadows){var v=b.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=b.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(b.browser.ie){var y=b.wrapper[0].style;y.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},b.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==b.slides.length)){var i=b.slides.eq(e),r=i.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!i.hasClass("swiper-lazy")||i.hasClass("swiper-lazy-loaded")||i.hasClass("swiper-lazy-loading")||(r=r.add(i[0])),0!==r.length&&r.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var r=e.attr("data-background"),s=e.attr("data-src"),n=e.attr("data-srcset");b.loadImage(e[0],s||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")),s&&(e.attr("src",s),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),i.find(".swiper-lazy-preloader, .preloader").remove(),b.params.loop&&t){var a=i.attr("data-swiper-slide-index");if(i.hasClass(b.params.slideDuplicateClass)){var o=b.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+b.params.slideDuplicateClass+")");b.lazy.loadImageInSlide(o.index(),!1)}else{var l=b.wrapper.children("."+b.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');b.lazy.loadImageInSlide(l.index(),!1)}}b.emit("onLazyImageReady",b,i[0],e[0])}),b.emit("onLazyImageLoad",b,i[0],e[0])})}},load:function(){var e;if(b.params.watchSlidesVisibility)b.wrapper.children("."+b.params.slideVisibleClass).each(function(){b.lazy.loadImageInSlide(a(this).index())});else if(b.params.slidesPerView>1)for(e=b.activeIndex;e1||b.params.lazyLoadingInPrevNextAmount&&b.params.lazyLoadingInPrevNextAmount>1){var t=b.params.lazyLoadingInPrevNextAmount,i=b.params.slidesPerView,r=Math.min(b.activeIndex+i+Math.max(t,i),b.slides.length),s=Math.max(b.activeIndex-Math.max(i,t),0);for(e=b.activeIndex+b.params.slidesPerView;r>e;e++)b.slides[e]&&b.lazy.loadImageInSlide(e);for(e=s;e0&&b.lazy.loadImageInSlide(n.index());var o=b.wrapper.children("."+b.params.slidePrevClass);o.length>0&&b.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){b.params.lazyLoading&&(b.params.lazyLoadingOnTransitionStart||!b.params.lazyLoadingOnTransitionStart&&!b.lazy.initialImageLoaded)&&b.lazy.load()},onTransitionEnd:function(){b.params.lazyLoading&&!b.params.lazyLoadingOnTransitionStart&&b.lazy.load()}},b.scrollbar={isTouched:!1,setDragPosition:function(e){var a=b.scrollbar,t=b.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,i=t-a.track.offset()[b.isHorizontal()?"left":"top"]-a.dragSize/2,r=-b.minTranslate()*a.moveDivider,s=-b.maxTranslate()*a.moveDivider;r>i?i=r:i>s&&(i=s),i=-i/a.moveDivider,b.updateProgress(i),b.setWrapperTranslate(i,!0)},dragStart:function(e){var a=b.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),b.params.scrollbarHide&&a.track.css("opacity",1),b.wrapper.transition(100),a.drag.transition(100),b.emit("onScrollbarDragStart",b)},dragMove:function(e){var a=b.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),b.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),b.emit("onScrollbarDragMove",b))},dragEnd:function(e){var a=b.scrollbar;a.isTouched&&(a.isTouched=!1,b.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),b.emit("onScrollbarDragEnd",b),b.params.scrollbarSnapOnRelease&&b.slideReset())},enableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).on(b.touchEvents.start,e.dragStart),a(t).on(b.touchEvents.move,e.dragMove),a(t).on(b.touchEvents.end,e.dragEnd)},disableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).off(b.touchEvents.start,e.dragStart),a(t).off(b.touchEvents.move,e.dragMove),a(t).off(b.touchEvents.end,e.dragEnd)},set:function(){if(b.params.scrollbar){var e=b.scrollbar;e.track=a(b.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=b.isHorizontal()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=b.size/b.virtualSize,e.moveDivider=e.divider*(e.trackSize/b.size),e.dragSize=e.trackSize*e.divider,b.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="",b.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(b.params.scrollbar){var e,a=b.scrollbar,t=(b.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*b.progress,b.rtl&&b.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),b.isHorizontal()?(b.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(b.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),b.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){b.params.scrollbar&&b.scrollbar.drag.transition(e)}},b.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,i;this.x.length;this.interpolate=function(e){return e?(i=r(this.x,e),t=i-1,(e-this.x[t])*(this.y[i]-this.y[t])/(this.x[i]-this.x[t])+this.y[t]):0};var r=function(){var e,a,t;return function(i,r){for(a=-1,e=i.length;e-a>1;)i[t=e+a>>1]<=r?a=t:e=t;return e}}()},getInterpolateFunction:function(e){b.controller.spline||(b.controller.spline=b.params.loop?new b.controller.LinearSpline(b.slidesGrid,e.slidesGrid):new b.controller.LinearSpline(b.snapGrid,e.snapGrid))},setTranslate:function(e,a){function i(a){e=a.rtl&&"horizontal"===a.params.direction?-b.translate:b.translate,"slide"===b.params.controlBy&&(b.controller.getInterpolateFunction(a),s=-b.controller.spline.interpolate(-e)),s&&"container"!==b.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(b.maxTranslate()-b.minTranslate()),s=(e-b.minTranslate())*r+a.minTranslate()),b.params.controlInverse&&(s=a.maxTranslate()-s),a.updateProgress(s),a.setWrapperTranslate(s,!1,b),a.updateActiveIndex()}var r,s,n=b.params.control;if(b.isArray(n))for(var o=0;ot;t++){var r=b.slides.eq(t),s=r.attr("data-hash");if(s===e&&!r.hasClass(b.params.slideDuplicateClass)){var n=r.index();b.slideTo(n,a,b.params.runCallbacksOnInit,!0)}}}},setHash:function(){b.hashnav.initialized&&b.params.hashnav&&(document.location.hash=b.slides.eq(b.activeIndex).attr("data-hash")||"")}},b.disableKeyboardControl=function(){b.params.keyboardControl=!1,a(document).off("keydown",p)},b.enableKeyboardControl=function(){b.params.keyboardControl=!0,a(document).on("keydown",p)},b.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},b.params.mousewheelControl){try{new window.WheelEvent("wheel"),b.mousewheel.event="wheel"}catch(O){}b.mousewheel.event||void 0===document.onmousewheel||(b.mousewheel.event="mousewheel"),b.mousewheel.event||(b.mousewheel.event="DOMMouseScroll")}b.disableMousewheelControl=function(){return b.mousewheel.event?(b.container.off(b.mousewheel.event,d),!0):!1},b.enableMousewheelControl=function(){return b.mousewheel.event?(b.container.on(b.mousewheel.event,d),!0):!1},b.parallax={setTranslate:function(){b.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){u(this,b.progress)}),b.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);u(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=b.params.speed),b.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),i=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(i=0),t.transition(i)})}},b._plugins=[];for(var N in b.plugins){var R=b.plugins[N](b,b.params[N]);R&&b._plugins.push(R)}return b.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=b.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){if(b.params.nextButton){var e=a(b.params.nextButton);b.a11y.makeFocusable(e),b.a11y.addRole(e,"button"),b.a11y.addLabel(e,b.params.nextSlideMessage)}if(b.params.prevButton){var t=a(b.params.prevButton);b.a11y.makeFocusable(t),b.a11y.addRole(t,"button"),b.a11y.addLabel(t,b.params.prevSlideMessage)}a(b.container).append(b.a11y.liveRegion)},initPagination:function(){b.params.pagination&&b.params.paginationClickable&&b.bullets&&b.bullets.length&&b.bullets.each(function(){var e=a(this);b.a11y.makeFocusable(e),b.a11y.addRole(e,"button"),b.a11y.addLabel(e,b.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){b.a11y.liveRegion&&b.a11y.liveRegion.length>0&&b.a11y.liveRegion.remove()}},b.init=function(){b.params.loop&&b.createLoop(),b.updateContainerSize(),b.updateSlidesSize(),b.updatePagination(),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.set(),b.params.scrollbarDraggable&&b.scrollbar.enableDraggable()),"slide"!==b.params.effect&&b.effects[b.params.effect]&&(b.params.loop||b.updateProgress(),b.effects[b.params.effect].setTranslate()),b.params.loop?b.slideTo(b.params.initialSlide+b.loopedSlides,0,b.params.runCallbacksOnInit):(b.slideTo(b.params.initialSlide,0,b.params.runCallbacksOnInit),0===b.params.initialSlide&&(b.parallax&&b.params.parallax&&b.parallax.setTranslate(),b.lazy&&b.params.lazyLoading&&(b.lazy.load(),b.lazy.initialImageLoaded=!0))),b.attachEvents(),b.params.observer&&b.support.observer&&b.initObservers(),b.params.preloadImages&&!b.params.lazyLoading&&b.preloadImages(),b.params.autoplay&&b.startAutoplay(),b.params.keyboardControl&&b.enableKeyboardControl&&b.enableKeyboardControl(),b.params.mousewheelControl&&b.enableMousewheelControl&&b.enableMousewheelControl(),b.params.hashnav&&b.hashnav&&b.hashnav.init(),b.params.a11y&&b.a11y&&b.a11y.init(),b.emit("onInit",b)},b.cleanupStyles=function(){b.container.removeClass(b.classNames.join(" ")).removeAttr("style"),b.wrapper.removeAttr("style"),b.slides&&b.slides.length&&b.slides.removeClass([b.params.slideVisibleClass,b.params.slideActiveClass,b.params.slideNextClass,b.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),b.paginationContainer&&b.paginationContainer.length&&b.paginationContainer.removeClass(b.params.paginationHiddenClass),b.bullets&&b.bullets.length&&b.bullets.removeClass(b.params.bulletActiveClass),b.params.prevButton&&a(b.params.prevButton).removeClass(b.params.buttonDisabledClass),b.params.nextButton&&a(b.params.nextButton).removeClass(b.params.buttonDisabledClass),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.track&&b.scrollbar.track.length&&b.scrollbar.track.removeAttr("style"),b.scrollbar.drag&&b.scrollbar.drag.length&&b.scrollbar.drag.removeAttr("style"))},b.destroy=function(e,a){b.detachEvents(),b.stopAutoplay(),b.params.scrollbar&&b.scrollbar&&b.params.scrollbarDraggable&&b.scrollbar.disableDraggable(),b.params.loop&&b.destroyLoop(),a&&b.cleanupStyles(),b.disconnectObservers(),b.params.keyboardControl&&b.disableKeyboardControl&&b.disableKeyboardControl(),b.params.mousewheelControl&&b.disableMousewheelControl&&b.disableMousewheelControl(),b.params.a11y&&b.a11y&&b.a11y.destroy(),b.emit("onDestroy"),e!==!1&&(b=null)},b.init(),b}};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_]+)/),i=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||r||i,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],r=0;r0&&a[0].nodeType)for(r=0;r0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,i=e.clientTop||t.clientTop||0,r=e.clientLeft||t.clientLeft||0,s=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+s-i,left:a.left+n-r}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;ti-1?new e([]):0>a?(t=i+a,new e(0>t?[]:[this[t]])):new e([this[a]])},append:function(a){var t,i;for(t=0;t=0;i--)this[t].insertBefore(r.childNodes[i],this[t].childNodes[0])}else if(a instanceof e)for(i=0;i1)for(var r=0;r1)for(var r=0;r0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var i=[],r=this[0];if(!r)return new e([]);for(;r.nextElementSibling;){var s=r.nextElementSibling;t?a(s).is(t)&&i.push(s):i.push(s),r=s}return new e(i)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var i=[],r=this[0];if(!r)return new e([]);for(;r.previousElementSibling;){var s=r.previousElementSibling;t?a(s).is(t)&&i.push(s):i.push(s),r=s}return new e(i)},parent:function(e){for(var t=[],i=0;i', + ' * <%= pkg.description %>', + ' * ', + ' * <%= pkg.homepage %>', + ' * ', + ' * Copyright <%= date.year %>, <%= pkg.author %>', + ' * The iDangero.us', + ' * http://www.idangero.us/', + ' * ', + ' * Licensed under <%= pkg.license.join(" & ") %>', + ' * ', + ' * Released on: <%= date.month %> <%= date.day %>, <%= date.year %>', + ' */', + ''].join('\n'), + date: { + year: new Date().getFullYear(), + month: ('January February March April May June July August September October November December').split(' ')[new Date().getMonth()], + day: new Date().getDate() + } + }; + + function addJSIndent (file, t, minusIndent) { + var addIndent = ' '; + var filename = file.path.split('src/js/')[1]; + if (['wrap-start.js', 'wrap-start-umd.js', 'wrap-end.js', 'wrap-end-umd.js', 'amd.js'].indexOf(filename) !== -1) { + addIndent = ''; + } + if (filename === 'swiper-intro.js' || filename === 'swiper-intro-f7.js' || filename === 'swiper-outro.js' || filename === 'dom.js' || filename === 'get-dom-lib.js' || filename === 'get-jquery.js' || filename === 'dom-plugins.js' || filename === 'swiper-proto.js') addIndent = ' '; + if (minusIndent) { + addIndent = addIndent.substring(4); + } + if (addIndent !== '') { + var fileLines = fs.readFileSync(file.path).toString().split('\n'); + var newFileContents = ''; + for (var i = 0; i < fileLines.length; i++) { + newFileContents += addIndent + fileLines[i] + (i === fileLines.length ? '' : '\n'); + } + file.contents = new Buffer(newFileContents); + } + } + gulp.task('scripts', function (cb) { + gulp.src(swiper.jsFiles) + .pipe(tap(function (file, t){ + addJSIndent (file, t); + })) + .pipe(concat(swiper.filename + '.js')) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) + .pipe(gulp.dest(paths.build.scripts)) + + .pipe(jshint()) + .pipe(jshint.reporter(stylish)); + gulp.src(swiper.jQueryFiles) + .pipe(tap(function (file, t){ + addJSIndent (file, t); + })) + .pipe(concat(swiper.filename + '.jquery.js')) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) + .pipe(gulp.dest(paths.build.scripts)); + gulp.src(swiper.jQueryUMDFiles) + .pipe(tap(function (file, t){ + addJSIndent (file, t); + })) + .pipe(concat(swiper.filename + '.jquery.umd.js')) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) + .pipe(gulp.dest(paths.build.scripts)); + gulp.src(swiper.Framework7Files) + .pipe(tap(function (file, t){ + addJSIndent (file, t, true); + })) + .pipe(concat(swiper.filename + '.framework7.js')) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) + .pipe(gulp.dest(paths.build.scripts)) + .pipe(connect.reload()); + cb(); + }); + gulp.task('styles', function (cb) { + + gulp.src(paths.source.styles + 'swiper.less') + .pipe(less({ + paths: [ path.join(__dirname, 'less', 'includes') ] + })) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date })) + .pipe(rename(function(path) { + path.basename = swiper.filename; + })) + .pipe(gulp.dest(paths.build.styles)) + .pipe(connect.reload()); + + gulp.src([ + paths.source.styles + 'core.less', + paths.source.styles + 'navigation-f7.less', + paths.source.styles + 'effects.less', + paths.source.styles + 'scrollbar.less', + paths.source.styles + 'preloader-f7.less', + ]) + .pipe(concat(swiper.filename + '.framework7.less')) + .pipe(header('/* === Swiper === */\n')) + .pipe(gulp.dest(paths.build.styles)); + cb(); + }); + gulp.task('build', ['scripts', 'styles'], function (cb) { + cb(); + }); + + gulp.task('dist', function () { + gulp.src([paths.build.scripts + swiper.filename + '.js']) + .pipe(gulp.dest(paths.dist.scripts)) + .pipe(sourcemaps.init()) + .pipe(uglify()) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date })) + .pipe(rename(function(path) { + path.basename = swiper.filename + '.min'; + })) + .pipe(sourcemaps.write('./maps')) + .pipe(gulp.dest(paths.dist.scripts)); + + gulp.src([paths.build.scripts + swiper.filename + '.jquery.js']) + .pipe(gulp.dest(paths.dist.scripts)) + .pipe(sourcemaps.init()) + .pipe(uglify()) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) + .pipe(rename(function(path) { + path.basename = swiper.filename + '.jquery.min'; + })) + .pipe(sourcemaps.write('./maps')) + .pipe(gulp.dest(paths.dist.scripts)); + + gulp.src([paths.build.scripts + swiper.filename + '.jquery.umd.js']) + .pipe(gulp.dest(paths.dist.scripts)) + .pipe(sourcemaps.init()) + .pipe(uglify()) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } )) + .pipe(rename(function(path) { + path.basename = swiper.filename + '.jquery.umd.min'; + })) + .pipe(sourcemaps.write('./maps')) + .pipe(gulp.dest(paths.dist.scripts)); + + gulp.src(paths.build.styles + '*.css') + .pipe(gulp.dest(paths.dist.styles)) + .pipe(minifyCSS({ + advanced: false, + aggressiveMerging: false, + })) + .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date })) + .pipe(rename(function(path) { + path.basename = swiper.filename + '.min'; + })) + .pipe(gulp.dest(paths.dist.styles)); + }); + + gulp.task('watch', function () { + gulp.watch(paths.source.scripts, [ 'scripts' ]); + gulp.watch(paths.source.styles + '*.less', [ 'styles' ]); + }); + + gulp.task('connect', function () { + return connect.server({ + root: [ paths.root ], + livereload: true, + port:'3000' + }); + }); + + gulp.task('open', function () { + return gulp.src(paths.playground.root + 'index.html').pipe(open({ uri: 'http://localhost:3000/' + paths.playground.root + 'index.html'})); + }); + + gulp.task('server', [ 'watch', 'connect', 'open' ]); + + gulp.task('default', [ 'server' ]); +})(); diff --git a/dashboard-ui/bower_components/Swiper/package.js b/dashboard-ui/bower_components/Swiper/package.js new file mode 100644 index 0000000000..e301257ccd --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/package.js @@ -0,0 +1,24 @@ +var version = '3.3.0'; + +Package.describe({ + name: 'nolimits4web:swiper', + summary: 'iDangero.us Swiper - mobile touch slider with hardware accelerated transitions and native behavior', + version: version, + git: 'https://github.com/nolimits4web/Swiper' +}); + +Package.onUse(function (api) { + api.versionsFrom('1.1.0.2'); + + api.addFiles([ + 'dist/css/swiper.min.css', + 'dist/js/swiper.js' + ], ['client'] + ); + + // Since swiper is attached to window, we do not need to export Swiper + // api.export('Swiper'); +}); + +Package.onTest(function (api) { +}); diff --git a/dashboard-ui/bower_components/Swiper/src/js/a11y.js b/dashboard-ui/bower_components/Swiper/src/js/a11y.js new file mode 100644 index 0000000000..b290da1cdd --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/a11y.js @@ -0,0 +1,90 @@ +// 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) { + var nextButton = $(s.params.nextButton); + s.a11y.makeFocusable(nextButton); + s.a11y.addRole(nextButton, 'button'); + s.a11y.addLabel(nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton) { + var prevButton = $(s.params.prevButton); + s.a11y.makeFocusable(prevButton); + s.a11y.addRole(prevButton, 'button'); + s.a11y.addLabel(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 new file mode 100644 index 0000000000..4d1d2b5d1d --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/amd.js @@ -0,0 +1,13 @@ +/*=========================== +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 new file mode 100644 index 0000000000..b6b5d7acb6 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/controller.js @@ -0,0 +1,116 @@ +/*========================= + 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 new file mode 100644 index 0000000000..2b275ddddf --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/core.js @@ -0,0 +1,2230 @@ +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, + // 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; + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + } +}; +// 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) { + s.container.each(function () { + new Swiper(this, params); + }); + return; +} + +// 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.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); +} + +// 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 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])) { + 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); + activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + activeSlide.prev('.' + s.params.slideClass).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)); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton) { + if (s.isBeginning) { + $(s.params.prevButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton)); + } + else { + $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton)); + } + } + if (s.params.nextButton) { + if (s.isEnd) { + $(s.params.nextButton).addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton)); + } + else { + $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.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); + } + } +}; +/*========================= + 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; + } + 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) { + s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + s.slideTo(s.activeIndex, 0, false, true); + } + } + // 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.params.nextButton)[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton) { + $(s.params.prevButton)[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) $(s.params.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 (detach) { + 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) 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.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 new file mode 100644 index 0000000000..c54de3192c --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js @@ -0,0 +1,57 @@ +/*=========================== +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 new file mode 100644 index 0000000000..995f6fb565 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/dom.js @@ -0,0 +1,664 @@ +/*=========================== +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 new file mode 100644 index 0000000000..e2c530028a --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/effects.js @@ -0,0 +1,276 @@ +/*========================= + 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 new file mode 100644 index 0000000000..836111f305 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/emitter.js @@ -0,0 +1,61 @@ +/*========================= + 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 new file mode 100644 index 0000000000..aff1d835f9 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js @@ -0,0 +1,17 @@ +/*=========================== + 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 new file mode 100644 index 0000000000..07ba61dcf8 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js @@ -0,0 +1,7 @@ +/*=========================== + 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 new file mode 100644 index 0000000000..d4965e4303 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/hashnav.js @@ -0,0 +1,24 @@ +/*========================= + 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 new file mode 100644 index 0000000000..d21b373214 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/init.js @@ -0,0 +1,133 @@ +/*========================= + 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 new file mode 100644 index 0000000000..53dd5f4891 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/keyboard.js @@ -0,0 +1,76 @@ +/*========================= + 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 new file mode 100644 index 0000000000..8fc6c12664 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js @@ -0,0 +1,114 @@ +/*========================= + 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 new file mode 100644 index 0000000000..c9456eb7a2 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js @@ -0,0 +1,129 @@ +/*========================= + 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 (!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; + //Opera & IE + if (e.detail) delta = -e.detail; + //WebKits + else 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 new file mode 100644 index 0000000000..78ad997154 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/parallax.js @@ -0,0 +1,65 @@ +/*========================= + 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 new file mode 100644 index 0000000000..012b58bb85 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/plugins.js @@ -0,0 +1,16 @@ +/*========================= + 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 new file mode 100644 index 0000000000..add88850c6 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js @@ -0,0 +1,178 @@ +/*========================= + 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); + 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 new file mode 100644 index 0000000000..9ec3ad5476 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js @@ -0,0 +1,5 @@ +/*=========================== +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 new file mode 100644 index 0000000000..884f10bb04 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js @@ -0,0 +1,5 @@ +/*=========================== +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 new file mode 100644 index 0000000000..ffafa22823 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js @@ -0,0 +1,4 @@ + + // 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 new file mode 100644 index 0000000000..53746a571f --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js @@ -0,0 +1,63 @@ +/*================================================== + 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 new file mode 100644 index 0000000000..ccafdf4015 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js @@ -0,0 +1,2 @@ + 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 new file mode 100644 index 0000000000..5f3d75ca38 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js @@ -0,0 +1,2 @@ + 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 new file mode 100644 index 0000000000..7dff9f2c8e --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js @@ -0,0 +1,17 @@ +(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 new file mode 100644 index 0000000000..3628709ca3 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js @@ -0,0 +1,3 @@ +(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 new file mode 100644 index 0000000000..88b359c9be --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/core.less @@ -0,0 +1,104 @@ +.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 new file mode 100644 index 0000000000..dcc7c7c9db --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/effects.less @@ -0,0 +1,142 @@ +/* 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 new file mode 100644 index 0000000000..c0e1aa339b --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/mixins.less @@ -0,0 +1,10 @@ +.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 new file mode 100644 index 0000000000..00f185f625 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less @@ -0,0 +1,143 @@ +/* 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 new file mode 100644 index 0000000000..39cea89f46 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/navigation.less @@ -0,0 +1,174 @@ +/* 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 new file mode 100644 index 0000000000..1b422e9e39 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less @@ -0,0 +1,11 @@ +/* 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 new file mode 100644 index 0000000000..b15f8efc59 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/preloader.less @@ -0,0 +1,42 @@ +/* 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 new file mode 100644 index 0000000000..624f1dfd86 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less @@ -0,0 +1,35 @@ +/* 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 new file mode 100644 index 0000000000..d8ec9136e9 --- /dev/null +++ b/dashboard-ui/bower_components/Swiper/src/less/swiper.less @@ -0,0 +1,6 @@ +@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/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index ac4fe8801a..0560b9e652 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -15,12 +15,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.0.42", - "_release": "1.0.42", + "version": "1.0.49", + "_release": "1.0.49", "_resolution": { "type": "version", - "tag": "1.0.42", - "commit": "72b4735c586da9d565a9ff268cec1156a71da144" + "tag": "1.0.49", + "commit": "460488b5fd0723a72995cc23f9f8cb5a860bd370" }, "_source": "git://github.com/MediaBrowser/emby-webcomponents.git", "_target": "~1.0.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/icons.html b/dashboard-ui/bower_components/emby-webcomponents/slideshow/icons.html new file mode 100644 index 0000000000..e3862c5f9d --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/icons.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js new file mode 100644 index 0000000000..6b4ad57349 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js @@ -0,0 +1,409 @@ +define(['paperdialoghelper', 'inputManager', 'connectionManager', 'browser', 'css!./style', 'html!./icons', 'iron-icon-set'], function (paperdialoghelper, inputmanager, connectionManager, browser) { + + return function (options) { + + var self = this; + var swiperInstance; + var dlg; + + function createElements(options) { + + dlg = paperdialoghelper.createDialog({ + exitAnimationDuration: 800, + size: 'fullscreen' + }); + + dlg.classList.add('slideshowDialog'); + + var html = ''; + + if (options.interactive) { + + html += '
'; + html += '
'; + + html += ''; + + html += '
'; + html += ''; + html += ''; + html += ''; + html += '
'; + html += '
'; + + } else { + html += '

'; + } + + dlg.innerHTML = html; + + if (options.interactive) { + dlg.querySelector('.btnSlideshowExit').addEventListener('click', function (e) { + + paperdialoghelper.close(dlg); + }); + dlg.querySelector('.btnSlideshowNext').addEventListener('click', nextImage); + dlg.querySelector('.btnSlideshowPrevious').addEventListener('click', previousImage); + dlg.querySelector('.btnSlideshowPause').addEventListener('click', playPause); + } + + document.body.appendChild(dlg); + + paperdialoghelper.open(dlg).then(function () { + + stopInterval(); + dlg.parentNode.removeChild(dlg); + }); + + inputmanager.on(window, onInputCommand); + + dlg.addEventListener('iron-overlay-closed', onDialogClosed); + + if (options.interactive) { + loadSwiper(dlg); + } + } + + function loadSwiper(dlg) { + + if (currentOptions.slides) { + dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.slides.map(getSwiperSlideHtmlFromSlide).join(''); + } else { + dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.items.map(getSwiperSlideHtmlFromItem).join(''); + } + + require(['swiper'], function (swiper) { + + swiperInstance = new Swiper(dlg.querySelector('.slideshowSwiperContainer'), { + // Optional parameters + direction: 'horizontal', + loop: true, + autoplay: options.interval || 8000, + // Disable preloading of all images + preloadImages: false, + // Enable lazy loading + lazyLoading: true, + autoplayDisableOnInteraction: false, + initialSlide: options.startIndex || 0 + }); + + if (browser.mobile) { + pause(); + } else { + play(); + } + }); + } + + function getSwiperSlideHtmlFromItem(item) { + + return getSwiperSlideHtmlFromSlide({ + imageUrl: getImgUrl(item) + //title: item.Name, + //description: item.Overview + }); + } + + function getSwiperSlideHtmlFromSlide(item) { + + var html = ''; + html += '
'; + html += ''; + //html += ''; + if (item.title || item.subtitle) { + html += '
'; + html += '
'; + if (item.title) { + html += '
'; + html += item.title; + html += '
'; + } + if (item.description) { + html += '
'; + html += item.description; + html += '
'; + } + html += '
'; + html += '
'; + } + html += '
'; + + return html; + } + + function previousImage() { + if (swiperInstance) { + swiperInstance.slidePrev(); + } else { + stopInterval(); + showNextImage(currentIndex - 1); + } + } + + function nextImage() { + if (swiperInstance) { + swiperInstance.slideNext(); + } else { + stopInterval(); + showNextImage(currentIndex + 1); + } + } + + function play() { + + dlg.querySelector('.btnSlideshowPause').icon = "slideshow:pause"; + swiperInstance.startAutoplay(); + } + + function pause() { + + dlg.querySelector('.btnSlideshowPause').icon = "slideshow:play-arrow"; + swiperInstance.stopAutoplay(); + } + + function playPause() { + + var paused = dlg.querySelector('.btnSlideshowPause').icon != "slideshow:pause"; + if (paused) { + play(); + } else { + pause(); + } + } + + function onDialogClosed() { + + var swiper = swiperInstance; + if (swiper) { + swiper.destroy(true, true); + swiperInstance = null; + } + + inputmanager.off(window, onInputCommand); + } + + var currentTimeout; + var currentIntervalMs; + var currentOptions; + var currentIndex; + + function startInterval(options) { + + currentOptions = options; + + stopInterval(); + createElements(options); + + if (!options.interactive) { + currentIntervalMs = options.interval || 8000; + showNextImage(options.startIndex || 0, true); + } + } + + function getImgUrl(item) { + + var apiClient = connectionManager.getApiClient(item.ServerId); + if (item.BackdropImageTags && item.BackdropImageTags.length) { + return getBackdropImageUrl(item, { + maxWidth: screen.availWidth + }, apiClient); + } else { + return getImageUrl(item, { + type: "Primary", + maxWidth: screen.availWidth + }, apiClient); + } + } + + function getBackdropImageUrl(item, options, apiClient) { + + options = options || {}; + options.type = options.type || "Backdrop"; + + options.width = null; + delete options.width; + options.maxWidth = null; + delete options.maxWidth; + options.maxHeight = null; + delete options.maxHeight; + options.height = null; + delete options.height; + + // If not resizing, get the original image + if (!options.maxWidth && !options.width && !options.maxHeight && !options.height) { + options.quality = 100; + options.format = 'jpg'; + } + + if (item.BackdropImageTags && item.BackdropImageTags.length) { + + options.tag = item.BackdropImageTags[0]; + return apiClient.getScaledImageUrl(item.Id, options); + } + + return null; + } + + function getImageUrl(item, options, apiClient) { + + options = options || {}; + options.type = options.type || "Primary"; + + if (typeof (item) === 'string') { + return apiClient.getScaledImageUrl(item, options); + } + + if (item.ImageTags && item.ImageTags[options.type]) { + + options.tag = item.ImageTags[options.type]; + return apiClient.getScaledImageUrl(item.Id, options); + } + + if (options.type == 'Primary') { + if (item.AlbumId && item.AlbumPrimaryImageTag) { + + options.tag = item.AlbumPrimaryImageTag; + return apiClient.getScaledImageUrl(item.AlbumId, options); + } + + //else if (item.AlbumId && item.SeriesPrimaryImageTag) { + + // imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { + // type: "Primary", + // width: downloadWidth, + // tag: item.SeriesPrimaryImageTag, + // minScale: minScale + // }); + + //} + //else if (item.ParentPrimaryImageTag) { + + // imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, { + // type: "Primary", + // width: downloadWidth, + // tag: item.ParentPrimaryImageTag, + // minScale: minScale + // }); + //} + } + + return null; + } + + function showNextImage(index, skipPreload) { + + index = Math.max(0, index); + if (index >= currentOptions.items.length) { + index = 0; + } + currentIndex = index; + + var options = currentOptions; + var items = options.items; + var item = items[index]; + var imgUrl = getImgUrl(item); + + var onSrcLoaded = function () { + var cardImageContainer = dlg.querySelector('.slideshowImage'); + + var newCardImageContainer = document.createElement('div'); + newCardImageContainer.className = cardImageContainer.className; + + if (options.cover) { + newCardImageContainer.classList.add('cover'); + } + + newCardImageContainer.style.backgroundImage = "url('" + imgUrl + "')"; + newCardImageContainer.classList.add('hide'); + cardImageContainer.parentNode.appendChild(newCardImageContainer); + + if (options.showTitle) { + dlg.querySelector('.slideshowImageText').innerHTML = item.Name; + } else { + dlg.querySelector('.slideshowImageText').innerHTML = ''; + } + + newCardImageContainer.classList.remove('hide'); + var onAnimationFinished = function () { + + var parentNode = cardImageContainer.parentNode; + if (parentNode) { + parentNode.removeChild(cardImageContainer); + } + }; + + if (newCardImageContainer.animate) { + + var keyframes = [ + { opacity: '0', offset: 0 }, + { opacity: '1', offset: 1 }]; + var timing = { duration: 1200, iterations: 1 }; + newCardImageContainer.animate(keyframes, timing).onfinish = onAnimationFinished; + } else { + onAnimationFinished(); + } + + stopInterval(); + currentTimeout = setTimeout(function () { + showNextImage(index + 1, true); + + }, currentIntervalMs); + }; + + if (!skipPreload) { + var img = new Image(); + img.onload = onSrcLoaded; + img.src = imgUrl; + } else { + onSrcLoaded(); + } + } + + function stopInterval() { + if (currentTimeout) { + clearTimeout(currentTimeout); + currentTimeout = null; + } + } + + function onInputCommand(e) { + + switch (e.detail.command) { + + case 'left': + previousImage(); + break; + case 'right': + nextImage(); + break; + case 'play': + play(); + break; + case 'pause': + pause(); + break; + case 'playpause': + playPause(); + break; + default: + return + break; + } + + e.preventDefault(); + } + + self.show = function () { + startInterval(options); + }; + + self.hide = function () { + + var dialog = dlg; + if (dialog) { + + paperdialoghelper.close(dialog); + } + }; + } +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css b/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css new file mode 100644 index 0000000000..370f0291e0 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css @@ -0,0 +1,104 @@ +.slideshowImage, .slideshowSwiperContainer { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + z-index: 1001; + background-position: center center; + background-size: contain; + background-repeat: no-repeat; + margin: 0 !important; + color: #fff; +} + + .slideshowImage.cover { + background-size: cover; + } + +.slideshowImageText { + position: fixed; + bottom: .25em; + right: .5em; + color: #fff; + z-index: 1002; + font-weight: 400; +} + +.swiper-slide { + background: #000; +} + + .swiper-slide img { + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + position: absolute; + left: 50%; + top: 50%; + } + +.btnSlideshowExit { + z-index: 1002; + position: absolute; + top: 1%; + left: .5%; + width: 6vh; + height: 6vh; + color: #eee; +} + +.slideshowControlBar { + position: fixed; + left: 0; + bottom: 0; + right: 0; + z-index: 1002; + background: rgba(0,0,0,.5); + text-align: center; + color: #eee; +} + +.mouseIdle .btnSlideshowExit { + display: none; +} + +.mouseIdle .slideshowControlBar { + transform: translateY(100%); + transition: transform 600ms ease-out; +} + +.slideshowButton { + width: 8vh; + height: 8vh; +} + +.slideText { + position: absolute; + left: 0; + right: 0; + bottom: 10vh; + text-align: center; +} + +.slideTextInner { + margin: 0 auto; + max-width: 60%; + background: rgba(0,0,0,.8); + display: inline-block; + padding: .5em 1em; + border-radius: .25em; +} + +.slideTitle { + font-size: 180%; +} + +.slideSubtitle { + color: #ccc; +} diff --git a/dashboard-ui/bower_components/iron-meta/.bower.json b/dashboard-ui/bower_components/iron-meta/.bower.json index e1304d174b..f4bfef4a7c 100644 --- a/dashboard-ui/bower_components/iron-meta/.bower.json +++ b/dashboard-ui/bower_components/iron-meta/.bower.json @@ -26,14 +26,14 @@ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "main": "iron-meta.html", - "homepage": "https://github.com/PolymerElements/iron-meta", + "homepage": "https://github.com/polymerelements/iron-meta", "_release": "1.1.1", "_resolution": { "type": "version", "tag": "v1.1.1", "commit": "e171ee234b482219c9514e6f9551df48ef48bd9f" }, - "_source": "git://github.com/PolymerElements/iron-meta.git", + "_source": "git://github.com/polymerelements/iron-meta.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/iron-meta" + "_originalSource": "polymerelements/iron-meta" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json index d583d34022..aa1f383231 100644 --- a/dashboard-ui/bower_components/iron-selector/.bower.json +++ b/dashboard-ui/bower_components/iron-selector/.bower.json @@ -36,7 +36,7 @@ "tag": "v1.1.0", "commit": "abd9ee7c29f0aae7b583abfe0af9db7f2555eabf" }, - "_source": "git://github.com/PolymerElements/iron-selector.git", + "_source": "git://github.com/polymerelements/iron-selector.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/iron-selector" + "_originalSource": "polymerelements/iron-selector" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-ripple/.bower.json b/dashboard-ui/bower_components/paper-ripple/.bower.json index 2f654d71c6..157225ee71 100644 --- a/dashboard-ui/bower_components/paper-ripple/.bower.json +++ b/dashboard-ui/bower_components/paper-ripple/.bower.json @@ -32,14 +32,14 @@ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" }, "ignore": [], - "homepage": "https://github.com/polymerelements/paper-ripple", + "homepage": "https://github.com/PolymerElements/paper-ripple", "_release": "1.0.5", "_resolution": { "type": "version", "tag": "v1.0.5", "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5" }, - "_source": "git://github.com/polymerelements/paper-ripple.git", + "_source": "git://github.com/PolymerElements/paper-ripple.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/paper-ripple" + "_originalSource": "PolymerElements/paper-ripple" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/.bower.json b/dashboard-ui/bower_components/swipebox/.bower.json deleted file mode 100644 index 49613cab0f..0000000000 --- a/dashboard-ui/bower_components/swipebox/.bower.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "swipebox", - "version": "1.4.1", - "main": "src/js/jquery.swipebox.js", - "ignore": [], - "homepage": "https://github.com/brutaldesign/swipebox", - "_release": "1.4.1", - "_resolution": { - "type": "version", - "tag": "1.4.1", - "commit": "80c68575772aacfbcffe4203a9f0ad57d4db8a62" - }, - "_source": "git://github.com/brutaldesign/swipebox.git", - "_target": "~1.4.1", - "_originalSource": "swipebox", - "_direct": true -} \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/.gitattributes b/dashboard-ui/bower_components/swipebox/.gitattributes deleted file mode 100644 index dfe0770424..0000000000 --- a/dashboard-ui/bower_components/swipebox/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/dashboard-ui/bower_components/swipebox/.gitignore b/dashboard-ui/bower_components/swipebox/.gitignore deleted file mode 100644 index 733be0a119..0000000000 --- a/dashboard-ui/bower_components/swipebox/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Ignore dist -dist/ -stage/ - -# Ignore demo scss -demo/scss/ - -# Ignore grunt stuff -**/.sass-cache -**/.grunt -**/node_modules - -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - -# Mac crap -.DS_Store \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/bower.json b/dashboard-ui/bower_components/swipebox/bower.json deleted file mode 100644 index 8a5c3dea17..0000000000 --- a/dashboard-ui/bower_components/swipebox/bower.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "swipebox", - "version": "1.4.1", - "main": "src/js/jquery.swipebox.js", - "ignore": [] -} diff --git a/dashboard-ui/bower_components/swipebox/demo/bagpakk.min.css b/dashboard-ui/bower_components/swipebox/demo/bagpakk.min.css deleted file mode 100644 index fd6db6fb61..0000000000 --- a/dashboard-ui/bower_components/swipebox/demo/bagpakk.min.css +++ /dev/null @@ -1 +0,0 @@ -/*! Bagpakk v1.0.0b | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/bagpakk */*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.centered,.clear,.clearfix,.pagination ul.page-numbers,.small-width,.wrap,blockquote,hr{zoom:1}.centered:after,.centered:before,.clear:after,.clear:before,.clearfix:after,.clearfix:before,.pagination ul.page-numbers:after,.pagination ul.page-numbers:before,.small-width:after,.small-width:before,.wrap:after,.wrap:before,blockquote:after,blockquote:before,hr:after,hr:before{content:"";display:table}.centered:after,.clear:after,.clearfix:after,.pagination ul.page-numbers:after,.small-width:after,.wrap:after,blockquote:after,hr:after{clear:both}html{height:100%;max-height:100%;overflow-x:hidden!important}body{overflow-x:hidden!important;overflow-y:auto}article,aside,details,div,figcaption,figure,footer,header,hgroup,main,nav,section,summary{-ms-word-wrap:break-word;word-wrap:break-word}a>img{-webkit-backface-visibility:hidden;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-ms-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}a>img:hover{opacity:.8}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify}.left{float:left}.right{float:right}.caption{opacity:.8}.centered,.small-width,blockquote{margin-left:auto!important;margin-right:auto!important;display:block;float:none!important}.no-margin{margin:0!important}.no-padding{padding:0!important}.no-border,.no-border img{border:none!important}.table{display:table}.table .table-cell{display:table-cell;vertical-align:middle}ul.inline-list li{display:inline;margin:0 1rem;list-style-type:none!important}.wrap{margin:0 auto;max-width:1140px;width:92%}.hero{font-size:1.1rem;padding:6rem 0}.container{padding:4.2358rem 0}.small-width{max-width:740px}.font-color-alt{color:#f2f2f2}.font-color-alt a,.font-color-alt h1,.font-color-alt h2,.font-color-alt h3,.font-color-alt h4,.font-color-alt h5,.font-color-alt h6{color:#fff}.box-emboss{background:rgba(0,0,0,.05);-webkit-box-shadow:rgba(255,255,255,.5)0 1px 0,inset rgba(0,0,0,.05)0 1px 0;-moz-box-shadow:rgba(255,255,255,.5)0 1px 0,inset rgba(0,0,0,.05)0 1px 0;box-shadow:rgba(255,255,255,.5)0 1px 0,inset rgba(0,0,0,.05)0 1px 0}.col-1,.col-10,.col-11,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9{width:100%;margin-bottom:3rem}.site-footer{padding:5rem 0;background:#393939;color:#767676}.site-footer h1,.site-footer h2,.site-footer h3,.site-footer h4,.site-footer h5,.site-footer h6{color:#767676}.site-footer a{color:#b6b6b6;text-decoration:none}.site-footer a:hover{color:#4bbd93}.gist{margin:1.618em 0}.gist a{border:none!important}table{border-collapse:collapse;border-spacing:0;font-size:1.618rem;line-height:2;margin:0 0 1.5em;width:100%}caption,td,th{font-weight:400;text-align:left}caption{font-size:1em;margin:.5em 0}th{font-weight:700;text-transform:uppercase}td{border-bottom:2px solid rgba(0,0,0,.05);padding:.5rem .5rem .5rem 0}.gist table{margin-bottom:0}.gist table td{border-bottom:none}html{font-size:62.5%}body{background:#fff;color:#666;font-size:1.8rem;line-height:1.7;font-family:Georgia,serif}a{color:#4bbd93}a:focus{outline:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#333}h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:#4bbd93}i{-webkit-backface-visibility:hidden}h1,h2,h3,h4,h5{font-family:Helvetica,Arial,sans-serif}h1,h2,h3,h4,h5,h6{font-weight:700;text-rendering:optimizeLegibility;line-height:1.618;margin-top:0;margin-bottom:1rem}h1,h2,h3,h4{color:#333}h1,h2{font-size:3rem;line-height:1.1em}h3{font-size:2.8rem}h4{font-size:2.3rem}h5{font-size:2.5rem}h6{font-size:2rem}ol,p,ul{margin:0 0 1.618rem}.dropcap:first-letter{color:#333;font-size:6rem;margin-top:-1.618rem;margin-right:1.3rem;margin-bottom:0;float:left}hr{display:block;border:none;height:4px;background:rgba(0,0,0,.05);margin:4rem auto;width:100%}blockquote{font-size:1.1em;font-style:italic;max-width:740px;color:#333;font-family:Georgia,serif;margin:1em 0 1.618em -2.2em;padding:0 0 0 1em;border-left:rgba(0,0,0,.05).5em solid}blockquote p{margin:.8em 0;font-style:italic}blockquote .small,blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;color:#ccc}cite{font-size:.8em;font-weight:400;display:inline-block;width:100%;font-style:normal}cite:before{content:'\2014 \00A0'}.small,small{font-size:.9em}ol,ul{margin:0;padding:0;margin-bottom:1.5em;margin-left:1em}ul li{list-style-type:square}code,pre{font:.7em "andale mono","lucida console",monospace;line-height:1.618;color:#333}code{margin:0 .5em;background:#FFF;line-height:1em;display:inline;padding:.5em}pre{-ms-word-wrap:normal;word-wrap:normal;background:#FFF;padding:.5em 1em;overflow-x:auto;overflow-y:hidden;margin:1.618em 0 3em;border:1px solid rgba(0,0,0,.1)}pre span{color:green}address{margin-bottom:.875rem}address p{margin-bottom:0}abbr[title],acronym[title]{border-bottom:1px dotted;cursor:help}dt{font-weight:700;text-decoration:underline}dd{margin:0;padding:0 0 .5rem}.big{font-size:3em}.pagination{margin:2rem 0}.pagination ul.page-numbers{font-family:Helvetica,Arial,sans-serif;margin-left:0}.pagination ul.page-numbers li{list-style-type:none;display:inline-block}.pagination ul.page-numbers li .page-numbers{font-size:15px;line-height:27px;position:relative;color:#333!important;font-weight:700;float:left;cursor:pointer;display:inline-block;height:28px;width:28px;margin:10px 5px 10px 0;text-align:center;text-shadow:none;text-decoration:none!important;border:none;border:solid 1px rgba(0,0,0,.08)}.pagination ul.page-numbers li .page-numbers:hover{opacity:.7}.pagination ul.page-numbers li .page-numbers.current{color:#fff!important;background-color:#4bbd93!important;border:solid 1px #4bbd93;opacity:1}.pagination ul.page-numbers li .page-numbers.dots{opacity:1!important;background:0 0;border:none}.pagination ul.page-numbers li .page-numbers.next,.pagination ul.page-numbers li .page-numbers.prev{line-height:25px}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot);src:url(fonts/icomoon.eot?#iefix) format("embedded-opentype"),url(fonts/icomoon.svg#icomoon) format("svg"),url(fonts/icomoon.woff) format("woff"),url(fonts/icomoon.ttf) format("truetype");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-weight:400!important;font-style:normal!important;text-decoration:none!important;border:none!important;display:inline-block;width:auto;height:auto;vertical-align:middle;background-image:none!important;background-position:0 0;background-repeat:repeat;position:relative;margin-bottom:1rem}.icon-align-left,.icon-align-right{margin-bottom:5px}.icon-align-left{float:left;margin-right:10px}.icon-align-right{float:right;margin-left:10px}.icon-align-center{display:block;margin-left:auto;margin-right:auto;text-align:center;margin-bottom:1.618em}.icon-align-none{display:inline-block;margin:.1em .3em}[class*=" icon-"]:before,[class^=icon-]:before{display:inline-block;vertical-align:baseline;speak:none;line-height:1;color:#333}.icon-1x{position:relative;font-size:1em}.icon-1x.icon-align-left{margin-top:11px;margin-right:11px}.icon-1x.icon-align-right{margin-top:11px;margin-left:11px}.icon-1x.icon-type-round{border-radius:1em}.icon-2x{position:relative;font-size:2em}.icon-2x.icon-align-left{margin-top:12px;margin-right:12px}.icon-2x.icon-align-right{margin-top:12px;margin-left:12px}.icon-2x.icon-type-round{border-radius:2em}.icon-3x{position:relative;font-size:3em}.icon-3x.icon-align-left{margin-top:13px;margin-right:13px}.icon-3x.icon-align-right{margin-top:13px;margin-left:13px}.icon-3x.icon-type-round{border-radius:3em}.icon-4x{position:relative;font-size:4em}.icon-4x.icon-align-left{margin-top:14px;margin-right:14px}.icon-4x.icon-align-right{margin-top:14px;margin-left:14px}.icon-4x.icon-type-round{border-radius:4em}.icon-5x{position:relative;font-size:5em}.icon-5x.icon-align-left{margin-top:15px;margin-right:15px}.icon-5x.icon-align-right{margin-top:15px;margin-left:15px}.icon-5x.icon-type-round{border-radius:5em}.icon-6x{position:relative;font-size:6em}.icon-6x.icon-align-left{margin-top:16px;margin-right:16px}.icon-6x.icon-align-right{margin-top:16px;margin-left:16px}.icon-6x.icon-type-round{border-radius:6em}.icon-7x{position:relative;font-size:7em}.icon-7x.icon-align-left{margin-top:17px;margin-right:17px}.icon-7x.icon-align-right{margin-top:17px;margin-left:17px}.icon-7x.icon-type-round{border-radius:7em}.icon-8x{position:relative;font-size:8em}.icon-8x.icon-align-left{margin-top:18px;margin-right:18px}.icon-8x.icon-align-right{margin-top:18px;margin-left:18px}.icon-8x.icon-type-round{border-radius:8em}.icon-9x{position:relative;font-size:9em}.icon-9x.icon-align-left{margin-top:19px;margin-right:19px}.icon-9x.icon-align-right{margin-top:19px;margin-left:19px}.icon-9x.icon-type-round{border-radius:9em}.icon-10x{position:relative;font-size:10em}.icon-10x.icon-align-left{margin-top:110px;margin-right:110px}.icon-10x.icon-align-right{margin-top:110px;margin-left:110px}.icon-10x.icon-type-round{border-radius:10em}.icon-type-round,.icon-type-square{background:#333;padding:1em}.icon-type-round:before,.icon-type-square:before{color:#fff;margin-top:-.5em;margin-left:-1em;width:100%;text-align:center;position:absolute;top:50%;left:50%}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}[class*=" icon-"],[class^=icon-]{font-family:icomoon;speak:none;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-pinterest:before{content:"\e600"}.icon-facebook:before{content:"\e601"}.icon-twitter:before{content:"\e602"}.icon-tumblr:before{content:"\e603"}.icon-soundcloud:before{content:"\e604"}.icon-skype:before{content:"\e605"}.icon-deviantart:before{content:"\e606"}.icon-forrst:before{content:"\e607"}.icon-dribbble:before{content:"\e608"}.icon-flickr:before{content:"\e609"}.icon-vimeo:before{content:"\e60a"}.icon-lastfm:before{content:"\e60b"}.icon-stackoverflow:before{content:"\e60c"}.icon-feed:before{content:"\e60d"}.icon-css3:before{content:"\e60e"}.icon-html5:before{content:"\e60f"}.icon-chrome:before{content:"\e610"}.icon-firefox:before{content:"\e611"}.icon-IE:before{content:"\e612"}.icon-opera:before{content:"\e613"}.icon-safari:before{content:"\e614"}.icon-googleplus:before{content:"\e615"}.icon-github:before{content:"\e616"}.icon-stumbleupon:before{content:"\e617"}.icon-foursquare:before{content:"\e618"}.icon-paypal:before{content:"\e619"}.icon-pencil:before{content:"\e61a"}.icon-pen:before{content:"\e61b"}.icon-droplet:before{content:"\e61c"}.icon-music:before{content:"\e61d"}.icon-play:before{content:"\e61e"}.icon-camera:before{content:"\e61f"}.icon-film:before{content:"\e620"}.icon-folder-open:before{content:"\e621"}.icon-tag:before{content:"\e622"}.icon-tags:before{content:"\e623"}.icon-cart:before{content:"\e624"}.icon-support:before{content:"\e625"}.icon-phone:before{content:"\e626"}.icon-envelope:before{content:"\e627"}.icon-pushpin:before{content:"\e628"}.icon-clock:before{content:"\e629"}.icon-calendar:before{content:"\e62a"}.icon-print:before{content:"\e62b"}.icon-settings:before{content:"\e62c"}.icon-home:before{content:"\e62e"}.icon-image:before{content:"\e62f"}.icon-images:before{content:"\e630"}.icon-camera2:before{content:"\e631"}.icon-bullhorn:before{content:"\e632"}.icon-books:before{content:"\e633"}.icon-library:before{content:"\e634"}.icon-file:before{content:"\e635"}.icon-profile:before{content:"\e636"}.icon-ticket:before{content:"\e637"}.icon-location:before{content:"\e638"}.icon-screen:before{content:"\e639"}.icon-laptop:before{content:"\e63a"}.icon-mobile:before{content:"\e63b"}.icon-mobile2:before{content:"\e63c"}.icon-tablet:before{content:"\e63d"}.icon-spinner:before{content:"\e63e"}.icon-spinner2:before{content:"\e63f"}.icon-spinner3:before{content:"\e640"}.icon-zoomin:before{content:"\e641"}.icon-zoomout:before{content:"\e642"}.icon-expand:before{content:"\e643"}.icon-reply:before{content:"\e644"}.icon-forward:before{content:"\e645"}.icon-bubbles:before{content:"\e646"}.icon-bubble:before{content:"\e647"}.icon-user:before{content:"\e648"}.icon-users:before{content:"\e649"}.icon-quotes-left:before{content:"\e64a"}.icon-search:before{content:"\e64b"}.icon-binoculars:before{content:"\e64c"}.icon-key:before{content:"\e64d"}.icon-lock:before{content:"\e64e"}.icon-unlocked:before{content:"\e64f"}.icon-cogs:before{content:"\e650"}.icon-cog:before{content:"\e651"}.icon-bug:before{content:"\e652"}.icon-stats:before{content:"\e653"}.icon-glass:before{content:"\e654"}.icon-mug:before{content:"\e655"}.icon-rocket:before{content:"\e656"}.icon-meter:before{content:"\e657"}.icon-fire:before{content:"\e658"}.icon-lab:before{content:"\e659"}.icon-remove:before{content:"\e65a"}.icon-truck:before{content:"\e65b"}.icon-powercord:before{content:"\e65c"}.icon-list:before{content:"\e65d"}.icon-numbered-list:before{content:"\e65e"}.icon-menu:before{content:"\e65f"}.icon-tree:before{content:"\e660"}.icon-cloud-download:before{content:"\e661"}.icon-cloud-upload:before{content:"\e662"}.icon-earth:before{content:"\e663"}.icon-link:before{content:"\e664"}.icon-flag:before{content:"\e665"}.icon-attachment:before{content:"\e666"}.icon-eye:before{content:"\e667"}.icon-bookmark:before{content:"\e668"}.icon-heart:before{content:"\e669"}.icon-heart2:before{content:"\e66a"}.icon-smiley:before{content:"\e66b"}.icon-sad:before{content:"\e66c"}.icon-tongue:before{content:"\e66d"}.icon-happy:before{content:"\e66e"}.icon-shocked:before{content:"\e66f"}.icon-confused:before{content:"\e670"}.icon-neutral:before{content:"\e671"}.icon-wondering:before{content:"\e672"}.icon-wink:before{content:"\e673"}.icon-cool:before{content:"\e674"}.icon-grin:before{content:"\e675"}.icon-angry:before{content:"\e676"}.icon-evil:before{content:"\e677"}.icon-info:before{content:"\e678"}.icon-warning:before{content:"\e679"}.icon-checkmark:before{content:"\e67a"}.icon-close:before{content:"\e67b"}.icon-minus:before{content:"\e67c"}.icon-plus:before{content:"\e67d"}.icon-enter:before{content:"\e67e"}.icon-exit:before{content:"\e67f"}.icon-volume-medium:before{content:"\e680"}.icon-loop:before{content:"\e681"}.icon-loop2:before{content:"\e682"}.icon-shuffle:before{content:"\e683"}.icon-loop3:before{content:"\e684"}.icon-crop:before{content:"\e685"}.icon-console:before{content:"\e686"}.icon-share:before{content:"\e687"}.icon-google-drive:before{content:"\e688"}.icon-youtube:before{content:"\e689"}.icon-picassa:before{content:"\e68a"}.icon-steam:before{content:"\e68b"}.icon-wordpress:before{content:"\e68c"}.icon-joomla:before{content:"\e68d"}.icon-yahoo:before{content:"\e68e"}.icon-apple:before{content:"\e68f"}.icon-code:before{content:"\e690"}.icon-embed:before{content:"\e691"}.icon-newtab:before{content:"\e692"}.icon-file-pdf:before{content:"\e693"}.icon-file-word:before{content:"\e694"}.icon-yelp:before{content:"\e695"}.icon-file-zip:before{content:"\e696"}.icon-file-xml:before{content:"\e697"}.icon-file-css:before{content:"\e698"}.icon-file-excel:before{content:"\e699"}.icon-delicious:before{content:"\e69a"}.icon-font:before{content:"\e62d"}.icon-thumbs-up:before{content:"\e69b"}.icon-thumbs-down:before{content:"\e69c"}.icon-camera-retro:before{content:"\e69d"}.icon-star:before{content:"\e69e"}.icon-star-empty:before{content:"\e69f"}.icon-youtube2:before{content:"\e6a0"}.icon-windows:before{content:"\e6a1"}.icon-android:before{content:"\e6a2"}.icon-dropbox:before{content:"\e6a3"}.icon-anchor:before{content:"\e6a4"}.icon-euro:before{content:"\e6a5"}.icon-gbp:before{content:"\e6a6"}.icon-dollar:before{content:"\e6a7"}.icon-yen:before{content:"\e6a8"}.icon-shield:before{content:"\e6a9"}.icon-linkedin:before{content:"\e6aa"}.icon-coffee:before{content:"\e6ab"}.icon-code-fork:before{content:"\e6ac"}.icon-magic:before{content:"\e6ad"}.icon-credit:before{content:"\e6ae"}.icon-legal:before{content:"\e6af"}.icon-medkit:before{content:"\e6b0"}.icon-beer:before{content:"\e6b1"}.icon-sun:before{content:"\e6b2"}.icon-moon:before{content:"\e6b3"}.icon-money:before{content:"\e6b4"}.icon-right-arrow:before{content:"\e04b"}.icon-top-arrow:before{content:"\e04c"}.icon-bottom-arrow:before{content:"\e04d"}.icon-left-arrow:before{content:"\e04a"}.icon-spotify:before{content:"\e045"}.icon-behance:before{content:"\e055"}.icon-digg:before{content:"\e054"}.icon-evernote:before{content:"\e053"}.icon-app-store:before{content:"\e056"}.icon-500px:before{content:"\e059"}.icon-amazon:before{content:"\e058"}.icon-grooveshark:before{content:"\e052"}.icon-myspace:before{content:"\e051"}.icon-zerply:before{content:"\e050"}.icon-amp:before{content:"\e01d"}.icon-quote-top:before{content:"\e002"}.icon-quote-bottom:before{content:"\e003"}.icon-instagram:before{content:"\e04f"}.icon-diamond:before{content:"\e6b6"}img{max-width:100%;height:auto}audio,canvas,embed,iframe,object,video{border:none!important;max-width:100%}.fluid-video{display:block;width:100%;margin-bottom:2rem;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}.fluid-video embed,.fluid-video iframe,.fluid-video object,.fluid-video video{width:100%!important;height:100%!important;position:absolute;top:0;left:0}form{margin-top:2rem}input[name=post_password],input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],select,textarea{max-width:100%!important;font-family:inherit;font-size:inherit;color:#333;line-height:inherit;padding:.5rem .7rem;border:1px solid rgba(0,0,0,.1);border-color:rgba(0,0,0,.3);text-shadow:none}input[name=post_password]:focus,input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,select:focus,textarea:focus{outline:0;border-color:rgba(0,0,0,.5)}option,select{padding:.5rem .7rem;min-width:200px}textarea{height:250px}input[type=submit]{margin-left:0!important}input[type=email],input[type=search],input[type=tel],input[type=text],select,textarea{width:100%}input[type=email],input[type=search],input[type=tel],input[type=text],textarea{background:rgba(255,255,255,.9);color:#000}input[type=checkbox],input[type=radio]{margin-left:.1rem;margin-right:.625rem}p label{display:block;margin-bottom:.5rem;width:100%}.button,input[type=submit]{cursor:pointer;outline:0!important;position:relative;opacity:1!important;line-height:1!important;font-style:normal!important;vertical-align:middle;text-shadow:none!important;font-family:Helvetica,Arial,sans-serif;text-align:center;font-weight:700!important;text-decoration:none!important;display:inline-block;letter-spacing:0;color:#fff!important;border:none!important;background-image:none;background-color:#4bbd93;-webkit-border-radius:4px;border-radius:4px;padding:1.618rem 3.236rem;font-size:1.618rem;width:100%;margin-bottom:1.618rem;box-shadow:0 4px 0 #328969;top:-2px}.button:active,.button:focus,.button:hover,input[type=submit]:active,input[type=submit]:focus,input[type=submit]:hover{background-color:#4bbd93}.button:hover,input[type=submit]:hover{top:0;box-shadow:0 2px 0 #328969}.button:active,.button:focus,input[type=submit]:active,input[type=submit]:focus{top:2px;box-shadow:0 0 0 #328969}.button-big{cursor:pointer;outline:0!important;position:relative;opacity:1!important;line-height:1!important;font-style:normal!important;vertical-align:middle;text-shadow:none!important;font-family:Helvetica,Arial,sans-serif;text-align:center;font-weight:700!important;text-decoration:none!important;display:inline-block;letter-spacing:0;color:#fff!important;border:none!important;background-image:none;background-color:#4bbd93;-webkit-border-radius:4px;border-radius:4px;width:100%;margin-bottom:1.618rem;box-shadow:0 6px 0 #328969;top:-3px}.button-big:active,.button-big:focus,.button-big:hover{background-color:#4bbd93}.button-big:hover{top:-1px;box-shadow:0 4px 0 #328969}.button-big:active,.button-big:focus{top:3px;box-shadow:0 0 0 #328969}.button-alt,.button-alt-big,.button-alt-light,.button-alt-light-big{-webkit-transition:all .1s;-moz-transition:all .1s;-ms-transition:all .1s;-o-transition:all .1s;transition:all .1s;cursor:pointer;outline:0!important;position:relative;opacity:1!important;line-height:1!important;font-style:normal!important;vertical-align:middle;text-shadow:none!important;font-family:Helvetica,Arial,sans-serif;text-align:center;font-weight:700!important;text-decoration:none!important;display:inline-block;letter-spacing:0;border:none!important;padding:1.618rem 3.236rem;font-size:1.618rem;width:100%;margin-bottom:1.618rem;color:#666!important;-webkit-border-radius:0;border-radius:0;box-shadow:0 0 0 transparent;background:none!important;border-color:#666!important;border-style:solid!important;border-width:2px!important}.button-alt-big:active,.button-alt-big:focus,.button-alt-big:hover,.button-alt-light-big:active,.button-alt-light-big:focus,.button-alt-light-big:hover,.button-alt-light:active,.button-alt-light:focus,.button-alt-light:hover,.button-alt:active,.button-alt:focus,.button-alt:hover{box-shadow:0 0 transparent;color:#fff!important;background-color:#4bbd93!important;border-color:#4bbd93!important}.button-alt-light-big{border-width:3px!important}.button-alt-light,.button-alt-light-big{color:#fff!important;border-color:#fff!important}.button-alt-light-big:active,.button-alt-light-big:focus,.button-alt-light-big:hover,.button-alt-light:active,.button-alt-light:focus,.button-alt-light:hover{color:#fff!important}.button-alt-big,.button-alt-light-big,.button-big{padding:2.1034rem 4.2068rem;font-size:2.1034rem}@media screen and (min-width:500px){h1{font-size:4.8rem;line-height:1.2em}h2{font-size:3.8rem;line-height:1.2em}h3{font-size:3.3rem}h4{font-size:2.8rem}blockquote{margin-left:1.6em}.button,.button-alt,.button-alt-big,.button-alt-light,.button-alt-light-big,.button-big,input[type=submit]{width:auto}.button,.button-alt,.button-alt-light,.button-alt-light-big,input[type=submit]{margin:.3rem}.button-alt-big,.button-alt-light-big,.button-big{margin:.4rem}input[type=email],input[type=search],input[type=tel],input[type=text],select{width:60%}}@media screen and (min-width:900px){h1{font-size:5rem;line-height:1.2em}h2{font-size:4rem;line-height:1.2em}h3{font-size:3.5rem}h4{font-size:3rem}.container{padding:6.85353rem 0}hr{margin:4rem 0}ol,ul{margin-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9{float:left;position:relative;margin-left:3.236%;margin-right:3.236%;margin-bottom:0}.col-1{width:2.40067%}.col-2{width:11.27333%}.col-3{width:20.146%}.col-4{width:29.01867%}.col-5{width:37.89133%}.col-6{width:46.764%}.col-7{width:55.63667%}.col-8{width:64.50933%}.col-9{width:73.382%}.col-10{width:82.25467%}.col-11{width:91.12733%}.col-12{width:100%}.alpha,.first{margin-left:0!important}.last,.omega{margin-right:0!important}}@media screen and (min-width:1600px){.container{padding:11.08901rem 0}hr{margin:5rem 0}} \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/demo/fork.png b/dashboard-ui/bower_components/swipebox/demo/fork.png deleted file mode 100644 index 0edf76c3dd..0000000000 Binary files a/dashboard-ui/bower_components/swipebox/demo/fork.png and /dev/null differ diff --git a/dashboard-ui/bower_components/swipebox/demo/normalize.css b/dashboard-ui/bower_components/swipebox/demo/normalize.css deleted file mode 100644 index b14732420e..0000000000 --- a/dashboard-ui/bower_components/swipebox/demo/normalize.css +++ /dev/null @@ -1 +0,0 @@ -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/demo/style.css b/dashboard-ui/bower_components/swipebox/demo/style.css deleted file mode 100644 index 5e52773d5c..0000000000 --- a/dashboard-ui/bower_components/swipebox/demo/style.css +++ /dev/null @@ -1 +0,0 @@ -body{font-family:'Merriweather', serif;border-top:5px solid #4BBD93;overflow-x:hidden !important;background:#FFF;color:#666}body img{opacity:1 !important}h1,h2,h3,h4,h4,h6{font-family:'Raleway', sans-serif}a{text-decoration:none}ol{margin-left:2em;margin-bottom:2em}ul{margin-left:1em;margin-bottom:0}ul ul{margin-left:1em}header h1{margin-top:0;font-size:12rem}.lead{margin-bottom:2em}#fork-this{position:absolute;z-index:1;right:0;top:5px;width:0px;height:0px;border-style:solid;border-width:0 150px 150px 0;border-color:transparent #4BBD93 transparent transparent}#fork-this a{display:block;position:absolute;z-index:10;width:150px;height:150px;top:0;right:-150px;z-index:10;background:url("fork.png") no-repeat 0 0;background-size:150px 150px}#share{margin-bottom:3rem}#share #fb,#share #twitter{display:inline-block}#share #fb{position:relative;top:-8px}.container:nth-child(even){background:whitesmoke}.container:nth-child(odd){background:#fff}#box-container{margin:0;padding:0}.box{list-style-type:none;float:left;margin-bottom:1rem;margin-left:1%;margin-right:1%;width:48%}.box:nth-child(2n+1){clear:both;margin-left:0}.box:nth-child(2n+0){margin-right:0}.box a{display:block;width:100%;height:auto}.box a img{-webkit-back-visibility:hidden;display:block;width:100%;height:auto;vertical-align:bottom}footer{font-size:1.3rem;font-family:"Helvetica neue", Helvetica, Arial, sans-serif;text-align:center;color:#666;margin:2rem 0}footer a{color:#666}@media screen and (max-width: 799px){header h1{font-size:8rem}hr{margin:2rem 0}#fork-this{display:none}#share #fb{top:-8px}.button{margin-left:0;margin-right:0;width:100%}.button{font-size:1.3rem;padding:1.4rem 2rem}}@media screen and (max-width: 410px){header h1{font-size:5rem}.box{width:100%;margin-left:0;margin-right:0}} diff --git a/dashboard-ui/bower_components/swipebox/grunt/.jshintrc b/dashboard-ui/bower_components/swipebox/grunt/.jshintrc deleted file mode 100644 index 2039914926..0000000000 --- a/dashboard-ui/bower_components/swipebox/grunt/.jshintrc +++ /dev/null @@ -1,24 +0,0 @@ -{ - "boss": true, - "curly": true, - "eqeqeq": true, - "eqnull": true, - "es3": true, - "expr": true, - "immed": true, - "noarg": true, - "onevar": true, - "quotmark": "single", - "trailing": true, - "undef": true, - "unused": true, - - "browser": true, - - "globals": { - "_": false, - "Backbone": false, - "jQuery": false, - "wp": false - } -} \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/grunt/gruntfile.js b/dashboard-ui/bower_components/swipebox/grunt/gruntfile.js deleted file mode 100644 index d17f411cc5..0000000000 --- a/dashboard-ui/bower_components/swipebox/grunt/gruntfile.js +++ /dev/null @@ -1,168 +0,0 @@ -module.exports = function(grunt) { - - // don't forget to update the version in the package.json and bower.json file - - // load dependencies - require('load-grunt-tasks')(grunt); - - grunt.initConfig({ - - version: grunt.file.readJSON('package.json').version, - pkg: grunt.file.readJSON('package.json'), - - // notify cross-OS - see https://github.com/dylang/grunt-notify - notify: { - - scss: { - options: { - title: 'SCSS compiled', - message: 'CSS is in the hood' - } - }, - - js: { - options: { - title: 'JS checked and minified', - message: 'JS is all good' - } - }, - - dist: { - options: { - title: 'Project Compiled', - message: 'All good' - } - } - }, - - // compile scss - sass: { - - dist:{ - options:{ - style: 'expanded' - }, - - files:{ - '../src/css/swipebox.css': '../scss/swipebox.scss', - } - }, - - demo:{ - options:{ - style: 'compressed' - }, - - files:{ - '../demo/style.css': '../demo/scss/style.scss', - } - } - - }, - - // https://github.com/nDmitry/grunt-autoprefixer - autoprefixer: { - options: { - browsers: ['last 3 versions', 'bb 10', 'android 3'] - }, - no_dest: { - src: '../src/css/swipebox.css', - } - }, - - // minify css asset files - cssmin: { - minify: { - expand: true, - cwd: '../src/css/', - src: ['*.css', '!*.min.css'], - dest: '../src/css/', - ext: '.min.css' - } - }, - - // chech our JS - jshint: { - options : { - jshintrc : '.jshintrc' - }, - all: [ '../src/js/jquery.swipebox.js' ] - }, - - // minify JS - uglify: { - - options:{ - banner : '/*! Swipebox v<%= version %> | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */\n' - }, - - admin: { - files: { - '../src/js/jquery.swipebox.min.js': [ '../src/js/jquery.swipebox.js'] - } - } - }, - - // watch it live - watch: { - js: { - files: [ '../src/js/*.js' ], - tasks: [ - 'jshint', - 'uglify', - 'notify:js' - ], - }, - scss: { - - files: ['../scss/*.scss', '../demo/scss/*.scss'], - tasks: [ - 'sass', - 'autoprefixer', - 'cssmin', - 'notify:scss' - ], - }, - - css: { - files: ['*.css'] - }, - - livereload: { - files: [ '../src/css/*.css', '../demo/*.css' ], - options: { livereload: true } - } - }, - - - } ); // end init config - - /** - * Default task - */ - grunt.registerTask( 'default', [ - 'sass:dist', - 'autoprefixer', - 'cssmin', - 'jshint', - 'uglify', - 'sass:demo', - 'notify:dist' - ] ); - - /** - * Dev task - * - * The main tasks for development - * - */ - grunt.registerTask( 'dev', [ - 'sass:dist', - 'autoprefixer', - 'cssmin', - 'jshint', - 'uglify', - 'sass:demo', - 'watch' - ] ); -}; \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/grunt/package.json b/dashboard-ui/bower_components/swipebox/grunt/package.json deleted file mode 100644 index a7675de795..0000000000 --- a/dashboard-ui/bower_components/swipebox/grunt/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "grunt-swipebox", - "version": "1.4.1", - "description": "A touchable jQuery lightbox", - "repository": { - "type": "git", - "url": "git://github.com/brutaldesign/swipebox.git" - }, - "license": "MIT", - "devDependencies": { - "grunt": "~0.4.5", - "load-grunt-tasks": "~1.0.0", - "grunt-contrib-sass": "~0.8.1", - "grunt-autoprefixer": "~2.0.0", - "grunt-contrib-cssmin": "~0.10.0", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-uglify": "~0.6.0", - "grunt-contrib-watch": "~0.6.1", - "grunt-notify": "~0.3.1" - } -} diff --git a/dashboard-ui/bower_components/swipebox/index.html b/dashboard-ui/bower_components/swipebox/index.html deleted file mode 100644 index c2294071de..0000000000 --- a/dashboard-ui/bower_components/swipebox/index.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - Swipebox | A touchable jQuery lightbox - - - - - -
-
- -
- -
-
-
-

Swipebox.

-

A touchable jQuery lightbox

-
- -
-
- -
-
-
-
-
- -
-
- -
-
-
- -
-
- -
-
-
-

What is Swipebox ?

-

Swipebox is a jQuery "lightbox" plugin for desktop, mobile and tablet.

- -
-

Main Features

-
    -
  1. Swipe gestures for mobile
  2. -
  3. Keyboard Navigation for desktop
  4. -
  5. CSS transitions with jQuery fallback
  6. -
  7. Retina support for UI icons
  8. -
  9. Easy CSS customization
  10. -
- -
-

Compatibility

-

Chrome, Safari, Firefox, Opera, IE9+, IOS4+, Android, windows phone.

-
-
- -
-
-
-

Basic Usage

-

Javascript

- -

Include jquery and the swipebox script in your head tags or right before your body closing tag.

-
<script src="lib/jquery-2.0.3.js"></script>
-<script src="src/js/jquery.swipebox.js"></script>
- -

CSS

-

Include the swipebox CSS style in your head tags.

-
<link rel="stylesheet" href="src/css/swipebox.css">
-

HTML

-

Use a specific class for your links and use the title attribute as caption.

-
<a href="big/image.jpg" class="swipebox" title="My Caption">
-<img src="small/image.jpg" alt="image">
-</a>
-

Fire the plugin

-

Bind the swipebox behaviour on every link with the "swipebox" class.

-
<script type="text/javascript">
-;( function( $ ) {
-
-	$( '.swipebox' ).swipebox();
-
-} )( jQuery );
-</script>
-
-
-
-
-
-
-

Advanced

- -
-

Gallery

-

You can add a rel attribute to your links to seperate your galleries.

-
-<!-- Gallery 1 -->
-<a rel="gallery-1" href="big/image1.jpg" class="swipebox">
-	<img src="small/image1.jpg" alt="image">
-</a>
-<a rel="gallery-1" href="big/image2.jpg" class="swipebox">
-	<img src="small/image2.jpg" alt="image">
-</a>
-<!-- Gallery 2 -->
-<a rel="gallery-2" href="big/image3.jpg" class="swipebox">
-	<img src="small/image3.jpg" alt="image">
-</a>
-<a rel="gallery-2" href="big/image4.jpg" class="swipebox">
-	<img src="small/image4.jpg" alt="image">
-</a>
- -
-

Video support

-

Simply paste a youtube or vimeo video URL in your href attribute. The script will automatically check if it's a youtube or vimeo URL and open the video in the swipebox.

-

- My Video -

-
<a class="swipebox-video" rel="vimeo" href="http://vimeo.com/29193046">My Videos</a>
- -
-

Load slides dynamically

-

You can set your gallery dynamically by passing an array object to the swipebox.

-

View gallery

- -
-$( '#gallery' ).click( function( e ) {
-	e.preventDefault();
-	$.swipebox( [
-		{ href:'big/image1.jpg', title:'My Caption' }, 
-		{ href:'big/image2.jpg', title:'My Second Caption' }
-	] );
-} );
-
-

Check open state

-
if ( $.swipebox.isOpen ) {
-	// do stuff
-}
- -
-

Options

-
-<script type="text/javascript">
-;( function( $ ) {
-
-	$( '.swipebox' ).swipebox( {
-		useCSS : true, // false will force the use of jQuery for animations
-		useSVG : true, // false to force the use of png for buttons
-		initialIndexOnArray : 0, // which image index to init when a array is passed
-		hideCloseButtonOnMobile : false, // true will hide the close button on mobile devices
-		hideBarsDelay : 3000, // delay before hiding bars on desktop
-		videoMaxWidth : 1140, // videos max width
-		beforeOpen: function() {}, // called before opening
-		afterOpen: null, // called after opening
-		afterClose: function() {}, // called after closing
-		loopAtEnd: false // true will return to the first image after the last image is reached
-	} );
-
-} )( jQuery );
-</script>
-
-
- -
- -
- - - - - - - - - diff --git a/dashboard-ui/bower_components/swipebox/lib/ios-orientationchange-fix.js b/dashboard-ui/bower_components/swipebox/lib/ios-orientationchange-fix.js deleted file mode 100644 index 2cf6241c93..0000000000 --- a/dashboard-ui/bower_components/swipebox/lib/ios-orientationchange-fix.js +++ /dev/null @@ -1,56 +0,0 @@ -/*! A fix for the iOS orientationchange zoom bug. - Script by @scottjehl, rebound by @wilto. - MIT / GPLv2 License. -*/ -(function(w){ - - // This fix addresses an iOS bug, so return early if the UA claims it's something else. - var ua = navigator.userAgent; - if( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test(ua) && ua.indexOf( "AppleWebKit" ) > -1 ) ){ - return; - } - - var doc = w.document; - - if( !doc.querySelector ){ return; } - - var meta = doc.querySelector( "meta[name=viewport]" ), - initialContent = meta && meta.getAttribute( "content" ), - disabledZoom = initialContent + ",maximum-scale=1", - enabledZoom = initialContent + ",maximum-scale=10", - enabled = true, - x, y, z, aig; - - if( !meta ){ return; } - - function restoreZoom(){ - meta.setAttribute( "content", enabledZoom ); - enabled = true; - } - - function disableZoom(){ - meta.setAttribute( "content", disabledZoom ); - enabled = false; - } - - function checkTilt( e ){ - aig = e.accelerationIncludingGravity; - x = Math.abs( aig.x ); - y = Math.abs( aig.y ); - z = Math.abs( aig.z ); - - // If portrait orientation and in one of the danger zones - if( (!w.orientation || w.orientation === 180) && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){ - if( enabled ){ - disableZoom(); - } - } - else if( !enabled ){ - restoreZoom(); - } - } - - w.addEventListener( "orientationchange", restoreZoom, false ); - w.addEventListener( "devicemotion", checkTilt, false ); - -})( this ); \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/lib/jquery-2.1.0.min.js b/dashboard-ui/bower_components/swipebox/lib/jquery-2.1.0.min.js deleted file mode 100644 index 2adda35a5b..0000000000 --- a/dashboard-ui/bower_components/swipebox/lib/jquery-2.1.0.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length; -while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("'; - - } else if ( vimeoUrl ) { - qs = ui.parseUri( url, { - 'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ), - 'byline' : '0', - 'portrait' : '0', - 'color': plugin.settings.vimeoColor - }); - iframe = ''; - - } else { - iframe = ''; - } - - return '
' + iframe + '
'; - }, - - /** - * Load image - */ - loadMedia : function ( src, callback ) { - // Inline content - if ( src.trim().indexOf('#') === 0 ) { - callback.call( - $('
', { - 'class' : 'swipebox-inline-container' - }) - .append( - $(src) - .clone() - .toggleClass( plugin.settings.toggleClassOnLoad ) - ) - ); - } - // Everything else - else { - if ( ! this.isVideo( src ) ) { - var img = $( '' ).on( 'load', function() { - callback.call( img ); - } ); - - img.attr( 'src', src ); - } - } - }, - - /** - * Get next slide - */ - getNext : function () { - var $this = this, - src, - index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) ); - if ( index + 1 < elements.length ) { - - src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' ); - $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); - index++; - $this.setSlide( index ); - $this.preloadMedia( index+1 ); - if ( plugin.settings.nextSlide ) { - plugin.settings.nextSlide(); - } - } else { - - if ( plugin.settings.loopAtEnd === true ) { - src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' ); - $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); - index = 0; - $this.preloadMedia( index ); - $this.setSlide( index ); - $this.preloadMedia( index + 1 ); - if ( plugin.settings.nextSlide ) { - plugin.settings.nextSlide(); - } - } else { - $( '#swipebox-overlay' ).addClass( 'rightSpring' ); - setTimeout( function() { - $( '#swipebox-overlay' ).removeClass( 'rightSpring' ); - }, 500 ); - } - } - }, - - /** - * Get previous slide - */ - getPrev : function () { - var index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) ), - src; - if ( index > 0 ) { - src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe').attr( 'src' ); - $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); - index--; - this.setSlide( index ); - this.preloadMedia( index-1 ); - if ( plugin.settings.prevSlide ) { - plugin.settings.prevSlide(); - } - } else { - $( '#swipebox-overlay' ).addClass( 'leftSpring' ); - setTimeout( function() { - $( '#swipebox-overlay' ).removeClass( 'leftSpring' ); - }, 500 ); - } - }, - - nextSlide : function () { - // Callback for next slide - }, - - prevSlide : function () { - // Callback for prev slide - }, - - /** - * Close - */ - closeSlide : function () { - $( 'html' ).removeClass( 'swipebox-html' ); - $( 'html' ).removeClass( 'swipebox-touch' ); - $( window ).trigger( 'resize' ); - this.destroy(); - }, - - /** - * Destroy the whole thing - */ - destroy : function () { - $( window ).unbind( 'keyup' ); - $( 'body' ).unbind( 'touchstart' ); - $( 'body' ).unbind( 'touchmove' ); - $( 'body' ).unbind( 'touchend' ); - $( '#swipebox-slider' ).unbind(); - $( '#swipebox-overlay' ).remove(); - - if ( ! $.isArray( elem ) ) { - elem.removeData( '_swipebox' ); - } - - if ( this.target ) { - this.target.trigger( 'swipebox-destroy' ); - } - - $.swipebox.isOpen = false; - - if ( plugin.settings.afterClose ) { - plugin.settings.afterClose(); - } - } - }; - - plugin.init(); - }; - - $.fn.swipebox = function( options ) { - - if ( ! $.data( this, '_swipebox' ) ) { - var swipebox = new $.swipebox( this, options ); - this.data( '_swipebox', swipebox ); - } - return this.data( '_swipebox' ); - - }; - -}( window, document, jQuery ) ); \ No newline at end of file diff --git a/dashboard-ui/bower_components/swipebox/src/js/jquery.swipebox.min.js b/dashboard-ui/bower_components/swipebox/src/js/jquery.swipebox.min.js deleted file mode 100644 index e553814f56..0000000000 --- a/dashboard-ui/bower_components/swipebox/src/js/jquery.swipebox.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Swipebox v1.4.1 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */ -!function(a,b,c,d){c.swipebox=function(e,f){var g,h,i={useCSS:!0,useSVG:!0,initialIndexOnArray:0,removeBarsOnMobile:!0,hideCloseButtonOnMobile:!1,hideBarsDelay:3e3,videoMaxWidth:1140,vimeoColor:"cccccc",beforeOpen:null,afterOpen:null,afterClose:null,nextSlide:null,prevSlide:null,loopAtEnd:!1,autoplayVideos:!1,queryStringData:{},toggleClassOnLoad:""},j=this,k=[],l=e.selector,m=c(l),n=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i),o=null!==n||b.createTouch!==d||"ontouchstart"in a||"onmsgesturechange"in a||navigator.msMaxTouchPoints,p=!!b.createElementNS&&!!b.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,q=a.innerWidth?a.innerWidth:c(a).width(),r=a.innerHeight?a.innerHeight:c(a).height(),s=0,t='
';j.settings={},c.swipebox.close=function(){g.closeSlide()},c.swipebox.extend=function(){return g},j.init=function(){j.settings=c.extend({},i,f),c.isArray(e)?(k=e,g.target=c(a),g.init(j.settings.initialIndexOnArray)):c(b).on("click",l,function(a){if("slide current"===a.target.parentNode.className)return!1;c.isArray(e)||(g.destroy(),h=c(l),g.actions()),k=[];var b,d,f;f||(d="data-rel",f=c(this).attr(d)),f||(d="rel",f=c(this).attr(d)),h=f&&""!==f&&"nofollow"!==f?m.filter("["+d+'="'+f+'"]'):c(l),h.each(function(){var a=null,b=null;c(this).attr("title")&&(a=c(this).attr("title")),c(this).attr("href")&&(b=c(this).attr("href")),k.push({href:b,title:a})}),b=h.index(c(this)),a.preventDefault(),a.stopPropagation(),g.target=c(a.target),g.init(b)})},g={init:function(a){j.settings.beforeOpen&&j.settings.beforeOpen(),this.target.trigger("swipebox-start"),c.swipebox.isOpen=!0,this.build(),this.openSlide(a),this.openMedia(a),this.preloadMedia(a+1),this.preloadMedia(a-1),j.settings.afterOpen&&j.settings.afterOpen()},build:function(){var a,b=this;c("body").append(t),p&&j.settings.useSVG===!0&&(a=c("#swipebox-close").css("background-image"),a=a.replace("png","svg"),c("#swipebox-prev, #swipebox-next, #swipebox-close").css({"background-image":a})),n&&j.settings.removeBarsOnMobile&&c("#swipebox-bottom-bar, #swipebox-top-bar").remove(),c.each(k,function(){c("#swipebox-slider").append('
')}),b.setDim(),b.actions(),o&&b.gesture(),b.keyboard(),b.animBars(),b.resize()},setDim:function(){var b,d,e={};"onorientationchange"in a?a.addEventListener("orientationchange",function(){0===a.orientation?(b=q,d=r):(90===a.orientation||-90===a.orientation)&&(b=r,d=q)},!1):(b=a.innerWidth?a.innerWidth:c(a).width(),d=a.innerHeight?a.innerHeight:c(a).height()),e={width:b,height:d},c("#swipebox-overlay").css(e)},resize:function(){var b=this;c(a).resize(function(){b.setDim()}).resize()},supportTransition:function(){var a,c="transition WebkitTransition MozTransition OTransition msTransition KhtmlTransition".split(" ");for(a=0;a=m||i)){var p=.75-Math.abs(d)/r.height();r.css({top:d+"px"}),r.css({opacity:p}),i=!0}e=b,b=o.pageX-n.pageX,g=100*b/q,!j&&!i&&Math.abs(b)>=l&&(c("#swipebox-slider").css({"-webkit-transition":"",transition:""}),j=!0),j&&(b>0?0===a?c("#swipebox-overlay").addClass("leftSpringTouch"):(c("#swipebox-overlay").removeClass("leftSpringTouch").removeClass("rightSpringTouch"),c("#swipebox-slider").css({"-webkit-transform":"translate3d("+(s+g)+"%, 0, 0)",transform:"translate3d("+(s+g)+"%, 0, 0)"})):0>b&&(k.length===a+1?c("#swipebox-overlay").addClass("rightSpringTouch"):(c("#swipebox-overlay").removeClass("leftSpringTouch").removeClass("rightSpringTouch"),c("#swipebox-slider").css({"-webkit-transform":"translate3d("+(s+g)+"%, 0, 0)",transform:"translate3d("+(s+g)+"%, 0, 0)"}))))}),!1}).bind("touchend",function(a){if(a.preventDefault(),a.stopPropagation(),c("#swipebox-slider").css({"-webkit-transition":"-webkit-transform 0.4s ease",transition:"transform 0.4s ease"}),d=o.pageY-n.pageY,b=o.pageX-n.pageX,g=100*b/q,i)if(i=!1,Math.abs(d)>=2*m&&Math.abs(d)>Math.abs(f)){var k=d>0?r.height():-r.height();r.animate({top:k+"px",opacity:0},300,function(){h.closeSlide()})}else r.animate({top:0,opacity:1},300);else j?(j=!1,b>=l&&b>=e?h.getPrev():-l>=b&&e>=b&&h.getNext()):p.hasClass("visible-bars")?(h.clearTimeout(),h.hideBars()):(h.showBars(),h.setTimeout());c("#swipebox-slider").css({"-webkit-transform":"translate3d("+s+"%, 0, 0)",transform:"translate3d("+s+"%, 0, 0)"}),c("#swipebox-overlay").removeClass("leftSpringTouch").removeClass("rightSpringTouch"),c(".touching").off("touchmove").removeClass("touching")})},setTimeout:function(){if(j.settings.hideBarsDelay>0){var b=this;b.clearTimeout(),b.timeout=a.setTimeout(function(){b.hideBars()},j.settings.hideBarsDelay)}},clearTimeout:function(){a.clearTimeout(this.timeout),this.timeout=null},showBars:function(){var a=c("#swipebox-top-bar, #swipebox-bottom-bar");this.doCssTrans()?a.addClass("visible-bars"):(c("#swipebox-top-bar").animate({top:0},500),c("#swipebox-bottom-bar").animate({bottom:0},500),setTimeout(function(){a.addClass("visible-bars")},1e3))},hideBars:function(){var a=c("#swipebox-top-bar, #swipebox-bottom-bar");this.doCssTrans()?a.removeClass("visible-bars"):(c("#swipebox-top-bar").animate({top:"-50px"},500),c("#swipebox-bottom-bar").animate({bottom:"-50px"},500),setTimeout(function(){a.removeClass("visible-bars")},1e3))},animBars:function(){var a=this,b=c("#swipebox-top-bar, #swipebox-bottom-bar");b.addClass("visible-bars"),a.setTimeout(),c("#swipebox-slider").click(function(){b.hasClass("visible-bars")||(a.showBars(),a.setTimeout())}),c("#swipebox-bottom-bar").hover(function(){a.showBars(),b.addClass("visible-bars"),a.clearTimeout()},function(){j.settings.hideBarsDelay>0&&(b.removeClass("visible-bars"),a.setTimeout())})},keyboard:function(){var b=this;c(a).bind("keyup",function(a){a.preventDefault(),a.stopPropagation(),37===a.keyCode?b.getPrev():39===a.keyCode?b.getNext():27===a.keyCode&&b.closeSlide()})},actions:function(){var a=this,b="touchend click";k.length<2?(c("#swipebox-bottom-bar").hide(),d===k[1]&&c("#swipebox-top-bar").hide()):(c("#swipebox-prev").bind(b,function(b){b.preventDefault(),b.stopPropagation(),a.getPrev(),a.setTimeout()}),c("#swipebox-next").bind(b,function(b){b.preventDefault(),b.stopPropagation(),a.getNext(),a.setTimeout()})),c("#swipebox-close").bind(b,function(){a.closeSlide()})},setSlide:function(a,b){b=b||!1;var d=c("#swipebox-slider");s=100*-a,this.doCssTrans()?d.css({"-webkit-transform":"translate3d("+100*-a+"%, 0, 0)",transform:"translate3d("+100*-a+"%, 0, 0)"}):d.animate({left:100*-a+"%"}),c("#swipebox-slider .slide").removeClass("current"),c("#swipebox-slider .slide").eq(a).addClass("current"),this.setTitle(a),b&&d.fadeIn(),c("#swipebox-prev, #swipebox-next").removeClass("disabled"),0===a?c("#swipebox-prev").addClass("disabled"):a===k.length-1&&j.settings.loopAtEnd!==!0&&c("#swipebox-next").addClass("disabled")},openSlide:function(b){c("html").addClass("swipebox-html"),o?(c("html").addClass("swipebox-touch"),j.settings.hideCloseButtonOnMobile&&c("html").addClass("swipebox-no-close-button")):c("html").addClass("swipebox-no-touch"),c(a).trigger("resize"),this.setSlide(b,!0)},preloadMedia:function(a){var b=this,c=null;k[a]!==d&&(c=k[a].href),b.isVideo(c)?b.openMedia(a):setTimeout(function(){b.openMedia(a)},1e3)},openMedia:function(a){var b,e,f=this;return k[a]!==d&&(b=k[a].href),0>a||a>=k.length?!1:(e=c("#swipebox-slider .slide").eq(a),void(f.isVideo(b)?e.html(f.getVideo(b)):(e.addClass("slide-loading"),f.loadMedia(b,function(){e.removeClass("slide-loading"),e.html(this)}))))},setTitle:function(a){var b=null;c("#swipebox-title").empty(),k[a]!==d&&(b=k[a].title),b?(c("#swipebox-top-bar").show(),c("#swipebox-title").append(b)):c("#swipebox-top-bar").hide()},isVideo:function(a){if(a){if(a.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||a.match(/vimeo\.com\/([0-9]*)/)||a.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/))return!0;if(a.toLowerCase().indexOf("swipeboxvideo=1")>=0)return!0}},parseUri:function(a,d){var e=b.createElement("a"),f={};return e.href=decodeURIComponent(a),e.search&&(f=JSON.parse('{"'+e.search.toLowerCase().replace("?","").replace(/&/g,'","').replace(/=/g,'":"')+'"}')),c.isPlainObject(d)&&(f=c.extend(f,d,j.settings.queryStringData)),c.map(f,function(a,b){return a&&a>""?encodeURIComponent(b)+"="+encodeURIComponent(a):void 0}).join("&")},getVideo:function(a){var b="",c=a.match(/((?:www\.)?youtube\.com|(?:www\.)?youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/),d=a.match(/(?:www\.)?youtu\.be\/([a-zA-Z0-9\-_]+)/),e=a.match(/(?:www\.)?vimeo\.com\/([0-9]*)/),f="";return c||d?(d&&(c=d),f=g.parseUri(a,{autoplay:j.settings.autoplayVideos?"1":"0",v:""}),b=''):e?(f=g.parseUri(a,{autoplay:j.settings.autoplayVideos?"1":"0",byline:"0",portrait:"0",color:j.settings.vimeoColor}),b=''):b='','
'+b+"
"},loadMedia:function(a,b){if(0===a.trim().indexOf("#"))b.call(c("
",{"class":"swipebox-inline-container"}).append(c(a).clone().toggleClass(j.settings.toggleClassOnLoad)));else if(!this.isVideo(a)){var d=c("").on("load",function(){b.call(d)});d.attr("src",a)}},getNext:function(){var a,b=this,d=c("#swipebox-slider .slide").index(c("#swipebox-slider .slide.current"));d+10?(a=c("#swipebox-slider .slide").eq(b).contents().find("iframe").attr("src"),c("#swipebox-slider .slide").eq(b).contents().find("iframe").attr("src",a),b--,this.setSlide(b),this.preloadMedia(b-1),j.settings.prevSlide&&j.settings.prevSlide()):(c("#swipebox-overlay").addClass("leftSpring"),setTimeout(function(){c("#swipebox-overlay").removeClass("leftSpring")},500))},nextSlide:function(){},prevSlide:function(){},closeSlide:function(){c("html").removeClass("swipebox-html"),c("html").removeClass("swipebox-touch"),c(a).trigger("resize"),this.destroy()},destroy:function(){c(a).unbind("keyup"),c("body").unbind("touchstart"),c("body").unbind("touchmove"),c("body").unbind("touchend"),c("#swipebox-slider").unbind(),c("#swipebox-overlay").remove(),c.isArray(e)||e.removeData("_swipebox"),this.target&&this.target.trigger("swipebox-destroy"),c.swipebox.isOpen=!1,j.settings.afterClose&&j.settings.afterClose()}},j.init()},c.fn.swipebox=function(a){if(!c.data(this,"_swipebox")){var b=new c.swipebox(this,a);this.data("_swipebox",b)}return this.data("_swipebox")}}(window,document,jQuery); \ No newline at end of file diff --git a/dashboard-ui/scripts/dashboardpage.js b/dashboard-ui/scripts/dashboardpage.js index a249100fcb..40492cc654 100644 --- a/dashboard-ui/scripts/dashboardpage.js +++ b/dashboard-ui/scripts/dashboardpage.js @@ -1270,7 +1270,7 @@ $(document).on('pageshow', "#dashboardPage", DashboardPage.onPageShow).on('pageb (function ($, document, window) { - var welcomeDismissValue = '11'; + var welcomeDismissValue = '12'; var welcomeTourKey = 'welcomeTour'; function dismissWelcome(page, userId) { @@ -1312,27 +1312,35 @@ $(document).on('pageshow', "#dashboardPage", DashboardPage.onPageShow).on('pageb function takeTour(page, userId) { - require(['swipebox'], function () { + require(['slideshow'], function () { - $.swipebox([ - { href: 'css/images/tour/dashboard/dashboard.png', title: Globalize.translate('DashboardTourDashboard') }, - { href: 'css/images/tour/dashboard/help.png', title: Globalize.translate('DashboardTourHelp') }, - { href: 'css/images/tour/dashboard/users.png', title: Globalize.translate('DashboardTourUsers') }, - { href: 'css/images/tour/dashboard/sync.png', title: Globalize.translate('DashboardTourSync') }, - { href: 'css/images/tour/dashboard/cinemamode.png', title: Globalize.translate('DashboardTourCinemaMode') }, - { href: 'css/images/tour/dashboard/chapters.png', title: Globalize.translate('DashboardTourChapters') }, - { href: 'css/images/tour/dashboard/subtitles.png', title: Globalize.translate('DashboardTourSubtitles') }, - { href: 'css/images/tour/dashboard/plugins.png', title: Globalize.translate('DashboardTourPlugins') }, - { href: 'css/images/tour/dashboard/notifications.png', title: Globalize.translate('DashboardTourNotifications') }, - { href: 'css/images/tour/dashboard/scheduledtasks.png', title: Globalize.translate('DashboardTourScheduledTasks') }, - { href: 'css/images/tour/dashboard/mobile.png', title: Globalize.translate('DashboardTourMobile') }, - { href: 'css/images/tour/enjoy.jpg', title: Globalize.translate('MessageEnjoyYourStay') } - ], { - afterClose: function () { - dismissWelcome(page, userId); - $('.welcomeMessage', page).hide(); - }, - hideBarsDelay: 30000 + var slides = [ + { imageUrl: 'css/images/tour/dashboard/dashboard.png', title: Globalize.translate('DashboardTourDashboard') }, + { imageUrl: 'css/images/tour/dashboard/help.png', title: Globalize.translate('DashboardTourHelp') }, + { imageUrl: 'css/images/tour/dashboard/users.png', title: Globalize.translate('DashboardTourUsers') }, + { imageUrl: 'css/images/tour/dashboard/sync.png', title: Globalize.translate('DashboardTourSync') }, + { imageUrl: 'css/images/tour/dashboard/cinemamode.png', title: Globalize.translate('DashboardTourCinemaMode') }, + { imageUrl: 'css/images/tour/dashboard/chapters.png', title: Globalize.translate('DashboardTourChapters') }, + { imageUrl: 'css/images/tour/dashboard/subtitles.png', title: Globalize.translate('DashboardTourSubtitles') }, + { imageUrl: 'css/images/tour/dashboard/plugins.png', title: Globalize.translate('DashboardTourPlugins') }, + { imageUrl: 'css/images/tour/dashboard/notifications.png', title: Globalize.translate('DashboardTourNotifications') }, + { imageUrl: 'css/images/tour/dashboard/scheduledtasks.png', title: Globalize.translate('DashboardTourScheduledTasks') }, + { imageUrl: 'css/images/tour/dashboard/mobile.png', title: Globalize.translate('DashboardTourMobile') }, + { imageUrl: 'css/images/tour/enjoy.jpg', title: Globalize.translate('MessageEnjoyYourStay') } + ]; + + require(['slideshow'], function (slideshow) { + + var newSlideShow = new slideshow({ + slides: slides, + interactive: true, + loop: false + }); + + newSlideShow.show(); + + dismissWelcome(page, userId); + $('.welcomeMessage', page).hide(); }); }); } diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js index 5377fef4d5..3485efffec 100644 --- a/dashboard-ui/scripts/indexpage.js +++ b/dashboard-ui/scripts/indexpage.js @@ -166,30 +166,38 @@ function takeTour(page, userId) { - require(['swipebox'], function () { + require(['slideshow'], function () { - $.swipebox([ - { href: 'css/images/tour/web/tourcontent.jpg', title: Globalize.translate('WebClientTourContent') }, - { href: 'css/images/tour/web/tourmovies.jpg', title: Globalize.translate('WebClientTourMovies') }, - { href: 'css/images/tour/web/tourmouseover.jpg', title: Globalize.translate('WebClientTourMouseOver') }, - { href: 'css/images/tour/web/tourtaphold.jpg', title: Globalize.translate('WebClientTourTapHold') }, - { href: 'css/images/tour/web/tourmysync.png', title: Globalize.translate('WebClientTourMySync') }, - { href: 'css/images/tour/web/toureditor.png', title: Globalize.translate('WebClientTourMetadataManager') }, - { href: 'css/images/tour/web/tourplaylist.png', title: Globalize.translate('WebClientTourPlaylists') }, - { href: 'css/images/tour/web/tourcollections.jpg', title: Globalize.translate('WebClientTourCollections') }, - { href: 'css/images/tour/web/tourusersettings1.png', title: Globalize.translate('WebClientTourUserPreferences1') }, - { href: 'css/images/tour/web/tourusersettings2.png', title: Globalize.translate('WebClientTourUserPreferences2') }, - { href: 'css/images/tour/web/tourusersettings3.png', title: Globalize.translate('WebClientTourUserPreferences3') }, - { href: 'css/images/tour/web/tourusersettings4.png', title: Globalize.translate('WebClientTourUserPreferences4') }, - { href: 'css/images/tour/web/tourmobile1.jpg', title: Globalize.translate('WebClientTourMobile1') }, - { href: 'css/images/tour/web/tourmobile2.png', title: Globalize.translate('WebClientTourMobile2') }, - { href: 'css/images/tour/enjoy.jpg', title: Globalize.translate('MessageEnjoyYourStay') } - ], { - afterClose: function () { - dismissWelcome(page, userId); - $('.welcomeMessage', page).hide(); - }, - hideBarsDelay: 30000 + var slides = [ + { imageUrl: 'css/images/tour/web/tourcontent.jpg', title: Globalize.translate('WebClientTourContent') }, + { imageUrl: 'css/images/tour/web/tourmovies.jpg', title: Globalize.translate('WebClientTourMovies') }, + { imageUrl: 'css/images/tour/web/tourmouseover.jpg', title: Globalize.translate('WebClientTourMouseOver') }, + { imageUrl: 'css/images/tour/web/tourtaphold.jpg', title: Globalize.translate('WebClientTourTapHold') }, + { imageUrl: 'css/images/tour/web/tourmysync.png', title: Globalize.translate('WebClientTourMySync') }, + { imageUrl: 'css/images/tour/web/toureditor.png', title: Globalize.translate('WebClientTourMetadataManager') }, + { imageUrl: 'css/images/tour/web/tourplaylist.png', title: Globalize.translate('WebClientTourPlaylists') }, + { imageUrl: 'css/images/tour/web/tourcollections.jpg', title: Globalize.translate('WebClientTourCollections') }, + { imageUrl: 'css/images/tour/web/tourusersettings1.png', title: Globalize.translate('WebClientTourUserPreferences1') }, + { imageUrl: 'css/images/tour/web/tourusersettings2.png', title: Globalize.translate('WebClientTourUserPreferences2') }, + { imageUrl: 'css/images/tour/web/tourusersettings3.png', title: Globalize.translate('WebClientTourUserPreferences3') }, + { imageUrl: 'css/images/tour/web/tourusersettings4.png', title: Globalize.translate('WebClientTourUserPreferences4') }, + { imageUrl: 'css/images/tour/web/tourmobile1.jpg', title: Globalize.translate('WebClientTourMobile1') }, + { imageUrl: 'css/images/tour/web/tourmobile2.png', title: Globalize.translate('WebClientTourMobile2') }, + { imageUrl: 'css/images/tour/enjoy.jpg', title: Globalize.translate('MessageEnjoyYourStay') } + ]; + + require(['slideshow'], function (slideshow) { + + var newSlideShow = new slideshow({ + slides: slides, + interactive: true, + loop: false + }); + + newSlideShow.show(); + + dismissWelcome(page, userId); + $('.welcomeMessage', page).hide(); }); }); } diff --git a/dashboard-ui/scripts/photos.js b/dashboard-ui/scripts/photos.js index 5bf5c621d0..fced03cdcf 100644 --- a/dashboard-ui/scripts/photos.js +++ b/dashboard-ui/scripts/photos.js @@ -125,26 +125,6 @@ function showSlideshow(page, items, startItemId) { - var screenWidth = $(window).width(); - var screenHeight = $(window).height(); - - var slideshowItems = items.map(function (item) { - - var imgUrl = ApiClient.getScaledImageUrl(item.Id, { - - tag: item.ImageTags.Primary, - type: 'Primary', - maxWidth: screenWidth, - maxHeight: screenHeight - - }); - - return { - title: item.Name, - href: imgUrl - }; - }); - var index = items.map(function (i) { return i.Id; @@ -154,12 +134,18 @@ index = 0; } - require(['swipebox'], function () { + require(['slideshow'], function (slideshow) { - $.swipebox(slideshowItems, { - initialIndexOnArray: index, - hideBarsDelay: 30000 + var newSlideShow = new slideshow({ + showTitle: false, + cover: false, + items: items, + startIndex: index, + interval: 7000, + interactive: true }); + + newSlideShow.show(); }); } diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 7176131f89..b3686efd75 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1974,7 +1974,8 @@ var AppInfo = {}; define("jqmpanel", ["thirdparty/jquerymobile-1.4.5/jqm.panel", 'css!thirdparty/jquerymobile-1.4.5/jqm.panel.css']); - define("swipebox", [bowerPath + '/swipebox/src/js/jquery.swipebox.min', "css!" + bowerPath + "/swipebox/src/css/swipebox.min.css"]); + define("iron-icon-set", ["html!" + bowerPath + "/iron-icon/iron-icon.html", "html!" + bowerPath + "/iron-iconset-svg/iron-iconset-svg.html"]); + define("slideshow", [embyWebComponentsBowerPath + "/slideshow/slideshow"], returnFirstDependency); define('fetch', [bowerPath + '/fetch/fetch']); define('webcomponentsjs', [bowerPath + '/webcomponentsjs/webcomponents-lite.min.js']); @@ -2003,6 +2004,8 @@ var AppInfo = {}; define("offlineusersync", [apiClientBowerPath + "/sync/offlineusersync"]); define("mediasync", [apiClientBowerPath + "/sync/mediasync"]); + define("swiper", [bowerPath + "/Swiper/dist/js/swiper.min", "css!" + bowerPath + "/Swiper/dist/css/swiper.min"], returnFirstDependency); + define("paperdialoghelper", [embyWebComponentsBowerPath + "/paperdialoghelper/paperdialoghelper"], returnFirstDependency); // alias @@ -2015,6 +2018,20 @@ var AppInfo = {}; } }; }); + + // mock this for now. not used in this app + define("inputManager", [], function () { + return { + on: function () { + }, + off: function () { + } + }; + }); + + define("connectionManager", [], function () { + return ConnectionManager; + }); } function init(hostingAppInfo) {