1/** 2 * Swiper 6.1.2 3 * Most modern mobile touch slider and framework with hardware accelerated transitions 4 * http://swiperjs.com 5 * 6 * Copyright 2014-2020 Vladimir Kharlampidi 7 * 8 * Released under the MIT License 9 * 10 * Released on: August 17, 2020 11 */ 12 13(function (global, factory) { 14 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 15 typeof define === 'function' && define.amd ? define(factory) : 16 (global = global || self, global.Swiper = factory()); 17}(this, (function () { 'use strict'; 18 19 function _defineProperties(target, props) { 20 for (var i = 0; i < props.length; i++) { 21 var descriptor = props[i]; 22 descriptor.enumerable = descriptor.enumerable || false; 23 descriptor.configurable = true; 24 if ("value" in descriptor) descriptor.writable = true; 25 Object.defineProperty(target, descriptor.key, descriptor); 26 } 27 } 28 29 function _createClass(Constructor, protoProps, staticProps) { 30 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 31 if (staticProps) _defineProperties(Constructor, staticProps); 32 return Constructor; 33 } 34 35 function _extends() { 36 _extends = Object.assign || function (target) { 37 for (var i = 1; i < arguments.length; i++) { 38 var source = arguments[i]; 39 40 for (var key in source) { 41 if (Object.prototype.hasOwnProperty.call(source, key)) { 42 target[key] = source[key]; 43 } 44 } 45 } 46 47 return target; 48 }; 49 50 return _extends.apply(this, arguments); 51 } 52 53 /** 54 * SSR Window 3.0.0-alpha.4 55 * Better handling for window object in SSR environment 56 * https://github.com/nolimits4web/ssr-window 57 * 58 * Copyright 2020, Vladimir Kharlampidi 59 * 60 * Licensed under MIT 61 * 62 * Released on: May 20, 2020 63 */ 64 65 /* eslint-disable no-param-reassign */ 66 function isObject(obj) { 67 return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object; 68 } 69 70 function extend(target, src) { 71 if (target === void 0) { 72 target = {}; 73 } 74 75 if (src === void 0) { 76 src = {}; 77 } 78 79 Object.keys(src).forEach(function (key) { 80 if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) { 81 extend(target[key], src[key]); 82 } 83 }); 84 } 85 86 var ssrDocument = { 87 body: {}, 88 addEventListener: function addEventListener() {}, 89 removeEventListener: function removeEventListener() {}, 90 activeElement: { 91 blur: function blur() {}, 92 nodeName: '' 93 }, 94 querySelector: function querySelector() { 95 return null; 96 }, 97 querySelectorAll: function querySelectorAll() { 98 return []; 99 }, 100 getElementById: function getElementById() { 101 return null; 102 }, 103 createEvent: function createEvent() { 104 return { 105 initEvent: function initEvent() {} 106 }; 107 }, 108 createElement: function createElement() { 109 return { 110 children: [], 111 childNodes: [], 112 style: {}, 113 setAttribute: function setAttribute() {}, 114 getElementsByTagName: function getElementsByTagName() { 115 return []; 116 } 117 }; 118 }, 119 createElementNS: function createElementNS() { 120 return {}; 121 }, 122 importNode: function importNode() { 123 return null; 124 }, 125 location: { 126 hash: '', 127 host: '', 128 hostname: '', 129 href: '', 130 origin: '', 131 pathname: '', 132 protocol: '', 133 search: '' 134 } 135 }; 136 137 function getDocument() { 138 var doc = typeof document !== 'undefined' ? document : {}; 139 extend(doc, ssrDocument); 140 return doc; 141 } 142 143 var ssrWindow = { 144 document: ssrDocument, 145 navigator: { 146 userAgent: '' 147 }, 148 location: { 149 hash: '', 150 host: '', 151 hostname: '', 152 href: '', 153 origin: '', 154 pathname: '', 155 protocol: '', 156 search: '' 157 }, 158 history: { 159 replaceState: function replaceState() {}, 160 pushState: function pushState() {}, 161 go: function go() {}, 162 back: function back() {} 163 }, 164 CustomEvent: function CustomEvent() { 165 return this; 166 }, 167 addEventListener: function addEventListener() {}, 168 removeEventListener: function removeEventListener() {}, 169 getComputedStyle: function getComputedStyle() { 170 return { 171 getPropertyValue: function getPropertyValue() { 172 return ''; 173 } 174 }; 175 }, 176 Image: function Image() {}, 177 Date: function Date() {}, 178 screen: {}, 179 setTimeout: function setTimeout() {}, 180 clearTimeout: function clearTimeout() {}, 181 matchMedia: function matchMedia() { 182 return {}; 183 }, 184 requestAnimationFrame: function requestAnimationFrame(callback) { 185 if (typeof setTimeout === 'undefined') { 186 callback(); 187 return null; 188 } 189 190 return setTimeout(callback, 0); 191 }, 192 cancelAnimationFrame: function cancelAnimationFrame(id) { 193 if (typeof setTimeout === 'undefined') { 194 return; 195 } 196 197 clearTimeout(id); 198 } 199 }; 200 201 function getWindow() { 202 var win = typeof window !== 'undefined' ? window : {}; 203 extend(win, ssrWindow); 204 return win; 205 } 206 207 /** 208 * Dom7 3.0.0-alpha.7 209 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API 210 * https://framework7.io/docs/dom7.html 211 * 212 * Copyright 2020, Vladimir Kharlampidi 213 * 214 * Licensed under MIT 215 * 216 * Released on: July 14, 2020 217 */ 218 219 function _inheritsLoose(subClass, superClass) { 220 subClass.prototype = Object.create(superClass.prototype); 221 subClass.prototype.constructor = subClass; 222 subClass.__proto__ = superClass; 223 } 224
vendor: 22,025 bytes, lines 225-1102
225 function _getPrototypeOf(o) { 226 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { 227 return o.__proto__ || Object.getPrototypeOf(o); 228 }; 229 return _getPrototypeOf(o); 230 } 231 232 function _setPrototypeOf(o, p) { 233 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { 234 o.__proto__ = p; 235 return o; 236 }; 237 238 return _setPrototypeOf(o, p); 239 } 240 241 function _isNativeReflectConstruct() { 242 if (typeof Reflect === "undefined" || !Reflect.construct) return false; 243 if (Reflect.construct.sham) return false; 244 if (typeof Proxy === "function") return true; 245 246 try { 247 Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); 248 return true; 249 } catch (e) { 250 return false; 251 } 252 } 253 254 function _construct(Parent, args, Class) { 255 if (_isNativeReflectConstruct()) { 256 _construct = Reflect.construct; 257 } else { 258 _construct = function _construct(Parent, args, Class) { 259 var a = [null]; 260 a.push.apply(a, args); 261 var Constructor = Function.bind.apply(Parent, a); 262 var instance = new Constructor(); 263 if (Class) _setPrototypeOf(instance, Class.prototype); 264 return instance; 265 }; 266 } 267 268 return _construct.apply(null, arguments); 269 } 270 271 function _isNativeFunction(fn) { 272 return Function.toString.call(fn).indexOf("[native code]") !== -1; 273 } 274 275 function _wrapNativeSuper(Class) { 276 var _cache = typeof Map === "function" ? new Map() : undefined; 277 278 _wrapNativeSuper = function _wrapNativeSuper(Class) { 279 if (Class === null || !_isNativeFunction(Class)) return Class; 280 281 if (typeof Class !== "function") { 282 throw new TypeError("Super expression must either be null or a function"); 283 } 284 285 if (typeof _cache !== "undefined") { 286 if (_cache.has(Class)) return _cache.get(Class); 287 288 _cache.set(Class, Wrapper); 289 } 290 291 function Wrapper() { 292 return _construct(Class, arguments, _getPrototypeOf(this).constructor); 293 } 294 295 Wrapper.prototype = Object.create(Class.prototype, { 296 constructor: { 297 value: Wrapper, 298 enumerable: false, 299 writable: true, 300 configurable: true 301 } 302 }); 303 return _setPrototypeOf(Wrapper, Class); 304 }; 305 306 return _wrapNativeSuper(Class); 307 } 308 309 function _assertThisInitialized(self) { 310 if (self === void 0) { 311 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 312 } 313 314 return self; 315 } 316 /* eslint-disable no-proto */ 317 318 319 function makeReactive(obj) { 320 var proto = obj.__proto__; 321 Object.defineProperty(obj, '__proto__', { 322 get: function get() { 323 return proto; 324 }, 325 set: function set(value) { 326 proto.__proto__ = value; 327 } 328 }); 329 } 330 331 var Dom7 = /*#__PURE__*/function (_Array) { 332 _inheritsLoose(Dom7, _Array); 333 334 function Dom7(items) { 335 var _this; 336 337 _this = _Array.call.apply(_Array, [this].concat(items)) || this; 338 makeReactive(_assertThisInitialized(_this)); 339 return _this; 340 } 341 342 return Dom7; 343 }( /*#__PURE__*/_wrapNativeSuper(Array)); 344 345 function arrayFlat(arr) { 346 if (arr === void 0) { 347 arr = []; 348 } 349 350 var res = []; 351 arr.forEach(function (el) { 352 if (Array.isArray(el)) { 353 res.push.apply(res, arrayFlat(el)); 354 } else { 355 res.push(el); 356 } 357 }); 358 return res; 359 } 360 361 function arrayFilter(arr, callback) { 362 return Array.prototype.filter.call(arr, callback); 363 } 364 365 function arrayUnique(arr) { 366 var uniqueArray = []; 367 368 for (var i = 0; i < arr.length; i += 1) { 369 if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]); 370 } 371 372 return uniqueArray; 373 } 374 375 function qsa(selector, context) { 376 if (typeof selector !== 'string') { 377 return [selector]; 378 } 379 380 var a = []; 381 var res = context.querySelectorAll(selector); 382 383 for (var i = 0; i < res.length; i += 1) { 384 a.push(res[i]); 385 } 386 387 return a; 388 } 389 390 function $(selector, context) { 391 var window = getWindow(); 392 var document = getDocument(); 393 var arr = []; 394 395 if (!context && selector instanceof Dom7) { 396 return selector; 397 } 398 399 if (!selector) { 400 return new Dom7(arr); 401 } 402 403 if (typeof selector === 'string') { 404 var html = selector.trim(); 405 406 if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { 407 var toCreate = 'div'; 408 if (html.indexOf('<li') === 0) toCreate = 'ul'; 409 if (html.indexOf('<tr') === 0) toCreate = 'tbody'; 410 if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr'; 411 if (html.indexOf('<tbody') === 0) toCreate = 'table'; 412 if (html.indexOf('<option') === 0) toCreate = 'select'; 413 var tempParent = document.createElement(toCreate); 414 tempParent.innerHTML = html; 415 416 for (var i = 0; i < tempParent.childNodes.length; i += 1) { 417 arr.push(tempParent.childNodes[i]); 418 } 419 } else { 420 arr = qsa(selector.trim(), context || document); 421 } // arr = qsa(selector, document); 422 423 } else if (selector.nodeType || selector === window || selector === document) { 424 arr.push(selector); 425 } else if (Array.isArray(selector)) { 426 if (selector instanceof Dom7) return selector; 427 arr = selector; 428 } 429 430 return new Dom7(arrayUnique(arr)); 431 } 432 433 $.fn = Dom7.prototype; 434 435 function addClass() { 436 for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) { 437 classes[_key] = arguments[_key]; 438 } 439 440 var classNames = arrayFlat(classes.map(function (c) { 441 return c.split(' '); 442 })); 443 this.forEach(function (el) { 444 var _el$classList; 445 446 (_el$classList = el.classList).add.apply(_el$classList, classNames); 447 }); 448 return this; 449 } 450 451 function removeClass() { 452 for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 453 classes[_key2] = arguments[_key2]; 454 } 455 456 var classNames = arrayFlat(classes.map(function (c) { 457 return c.split(' '); 458 })); 459 this.forEach(function (el) { 460 var _el$classList2; 461 462 (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames); 463 }); 464 return this; 465 } 466 467 function toggleClass() { 468 for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { 469 classes[_key3] = arguments[_key3]; 470 } 471 472 var classNames = arrayFlat(classes.map(function (c) { 473 return c.split(' '); 474 })); 475 this.forEach(function (el) { 476 classNames.forEach(function (className) { 477 el.classList.toggle(className); 478 }); 479 }); 480 } 481 482 function hasClass() { 483 for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { 484 classes[_key4] = arguments[_key4]; 485 } 486 487 var classNames = arrayFlat(classes.map(function (c) { 488 return c.split(' '); 489 })); 490 return arrayFilter(this, function (el) { 491 return classNames.filter(function (className) { 492 return el.classList.contains(className); 493 }).length > 0; 494 }).length > 0; 495 } 496 497 function attr(attrs, value) { 498 if (arguments.length === 1 && typeof attrs === 'string') { 499 // Get attr 500 if (this[0]) return this[0].getAttribute(attrs); 501 return undefined; 502 } // Set attrs 503 504 505 for (var i = 0; i < this.length; i += 1) { 506 if (arguments.length === 2) { 507 // String 508 this[i].setAttribute(attrs, value); 509 } else { 510 // Object 511 for (var attrName in attrs) { 512 this[i][attrName] = attrs[attrName]; 513 this[i].setAttribute(attrName, attrs[attrName]); 514 } 515 } 516 } 517 518 return this; 519 } 520 521 function removeAttr(attr) { 522 for (var i = 0; i < this.length; i += 1) { 523 this[i].removeAttribute(attr); 524 } 525 526 return this; 527 } 528 529 function transform(transform) { 530 for (var i = 0; i < this.length; i += 1) { 531 this[i].style.transform = transform; 532 } 533 534 return this; 535 } 536 537 function transition(duration) { 538 for (var i = 0; i < this.length; i += 1) { 539 this[i].style.transition = typeof duration !== 'string' ? duration + "ms" : duration; 540 } 541 542 return this; 543 } 544 545 function on() { 546 for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { 547 args[_key5] = arguments[_key5]; 548 } 549 550 var eventType = args[0], 551 targetSelector = args[1], 552 listener = args[2], 553 capture = args[3]; 554 555 if (typeof args[1] === 'function') { 556 eventType = args[0]; 557 listener = args[1]; 558 capture = args[2]; 559 targetSelector = undefined; 560 } 561 562 if (!capture) capture = false; 563 564 function handleLiveEvent(e) { 565 var target = e.target; 566 if (!target) return; 567 var eventData = e.target.dom7EventData || []; 568 569 if (eventData.indexOf(e) < 0) { 570 eventData.unshift(e); 571 } 572 573 if ($(target).is(targetSelector)) listener.apply(target, eventData);else { 574 var _parents = $(target).parents(); // eslint-disable-line 575 576 577 for (var k = 0; k < _parents.length; k += 1) { 578 if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData); 579 } 580 } 581 } 582 583 function handleEvent(e) { 584 var eventData = e && e.target ? e.target.dom7EventData || [] : []; 585 586 if (eventData.indexOf(e) < 0) { 587 eventData.unshift(e); 588 } 589 590 listener.apply(this, eventData); 591 } 592 593 var events = eventType.split(' '); 594 var j; 595 596 for (var i = 0; i < this.length; i += 1) { 597 var el = this[i]; 598 599 if (!targetSelector) { 600 for (j = 0; j < events.length; j += 1) { 601 var event = events[j]; 602 if (!el.dom7Listeners) el.dom7Listeners = {}; 603 if (!el.dom7Listeners[event]) el.dom7Listeners[event] = []; 604 el.dom7Listeners[event].push({ 605 listener: listener, 606 proxyListener: handleEvent 607 }); 608 el.addEventListener(event, handleEvent, capture); 609 } 610 } else { 611 // Live events 612 for (j = 0; j < events.length; j += 1) { 613 var _event = events[j]; 614 if (!el.dom7LiveListeners) el.dom7LiveListeners = {}; 615 if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = []; 616 617 el.dom7LiveListeners[_event].push({ 618 listener: listener, 619 proxyListener: handleLiveEvent 620 }); 621 622 el.addEventListener(_event, handleLiveEvent, capture); 623 } 624 } 625 } 626 627 return this; 628 } 629 630 function off() { 631 for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { 632 args[_key6] = arguments[_key6]; 633 } 634 635 var eventType = args[0], 636 targetSelector = args[1], 637 listener = args[2], 638 capture = args[3]; 639 640 if (typeof args[1] === 'function') { 641 eventType = args[0]; 642 listener = args[1]; 643 capture = args[2]; 644 targetSelector = undefined; 645 } 646 647 if (!capture) capture = false; 648 var events = eventType.split(' '); 649 650 for (var i = 0; i < events.length; i += 1) { 651 var event = events[i]; 652 653 for (var j = 0; j < this.length; j += 1) { 654 var el = this[j]; 655 var handlers = void 0; 656 657 if (!targetSelector && el.dom7Listeners) { 658 handlers = el.dom7Listeners[event]; 659 } else if (targetSelector && el.dom7LiveListeners) { 660 handlers = el.dom7LiveListeners[event]; 661 } 662 663 if (handlers && handlers.length) { 664 for (var k = handlers.length - 1; k >= 0; k -= 1) { 665 var handler = handlers[k]; 666 667 if (listener && handler.listener === listener) { 668 el.removeEventListener(event, handler.proxyListener, capture); 669 handlers.splice(k, 1); 670 } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) { 671 el.removeEventListener(event, handler.proxyListener, capture); 672 handlers.splice(k, 1); 673 } else if (!listener) { 674 el.removeEventListener(event, handler.proxyListener, capture); 675 handlers.splice(k, 1); 676 } 677 } 678 } 679 } 680 } 681 682 return this; 683 } 684 685 function trigger() { 686 var window = getWindow(); 687 688 for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { 689 args[_key9] = arguments[_key9]; 690 } 691 692 var events = args[0].split(' '); 693 var eventData = args[1]; 694 695 for (var i = 0; i < events.length; i += 1) { 696 var event = events[i]; 697 698 for (var j = 0; j < this.length; j += 1) { 699 var el = this[j]; 700 701 if (window.CustomEvent) { 702 var evt = new window.CustomEvent(event, { 703 detail: eventData, 704 bubbles: true, 705 cancelable: true 706 }); 707 el.dom7EventData = args.filter(function (data, dataIndex) { 708 return dataIndex > 0; 709 }); 710 el.dispatchEvent(evt); 711 el.dom7EventData = []; 712 delete el.dom7EventData; 713 } 714 } 715 } 716 717 return this; 718 } 719 720 function transitionEnd(callback) { 721 var dom = this; 722 723 function fireCallBack(e) { 724 if (e.target !== this) return; 725 callback.call(this, e); 726 dom.off('transitionend', fireCallBack); 727 } 728 729 if (callback) { 730 dom.on('transitionend', fireCallBack); 731 } 732 733 return this; 734 } 735 736 function outerWidth(includeMargins) { 737 if (this.length > 0) { 738 if (includeMargins) { 739 var _styles = this.styles(); 740 741 return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left')); 742 } 743 744 return this[0].offsetWidth; 745 } 746 747 return null; 748 } 749 750 function outerHeight(includeMargins) { 751 if (this.length > 0) { 752 if (includeMargins) { 753 var _styles2 = this.styles(); 754 755 return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom')); 756 } 757 758 return this[0].offsetHeight; 759 } 760 761 return null; 762 } 763 764 function offset() { 765 if (this.length > 0) { 766 var window = getWindow(); 767 var document = getDocument(); 768 var el = this[0]; 769 var box = el.getBoundingClientRect(); 770 var body = document.body; 771 var clientTop = el.clientTop || body.clientTop || 0; 772 var clientLeft = el.clientLeft || body.clientLeft || 0; 773 var scrollTop = el === window ? window.scrollY : el.scrollTop; 774 var scrollLeft = el === window ? window.scrollX : el.scrollLeft; 775 return { 776 top: box.top + scrollTop - clientTop, 777 left: box.left + scrollLeft - clientLeft 778 }; 779 } 780 781 return null; 782 } 783 784 function styles() { 785 var window = getWindow(); 786 if (this[0]) return window.getComputedStyle(this[0], null); 787 return {}; 788 } 789 790 function css(props, value) { 791 var window = getWindow(); 792 var i; 793 794 if (arguments.length === 1) { 795 if (typeof props === 'string') { 796 // .css('width') 797 if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); 798 } else { 799 // .css({ width: '100px' }) 800 for (i = 0; i < this.length; i += 1) { 801 for (var _prop in props) { 802 this[i].style[_prop] = props[_prop]; 803 } 804 } 805 806 return this; 807 } 808 } 809 810 if (arguments.length === 2 && typeof props === 'string') { 811 // .css('width', '100px') 812 for (i = 0; i < this.length; i += 1) { 813 this[i].style[props] = value; 814 } 815 816 return this; 817 } 818 819 return this; 820 } 821 822 function each(callback) { 823 if (!callback) return this; 824 this.forEach(function (el, index) { 825 callback.apply(el, [el, index]); 826 }); 827 return this; 828 } 829 830 function filter(callback) { 831 var result = arrayFilter(this, callback); 832 return $(result); 833 } 834 835 function html(html) { 836 if (typeof html === 'undefined') { 837 return this[0] ? this[0].innerHTML : null; 838 } 839 840 for (var i = 0; i < this.length; i += 1) { 841 this[i].innerHTML = html; 842 } 843 844 return this; 845 } 846 847 function text(text) { 848 if (typeof text === 'undefined') { 849 return this[0] ? this[0].textContent.trim() : null; 850 } 851 852 for (var i = 0; i < this.length; i += 1) { 853 this[i].textContent = text; 854 } 855 856 return this; 857 } 858 859 function is(selector) { 860 var window = getWindow(); 861 var document = getDocument(); 862 var el = this[0]; 863 var compareWith; 864 var i; 865 if (!el || typeof selector === 'undefined') return false; 866 867 if (typeof selector === 'string') { 868 if (el.matches) return el.matches(selector); 869 if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); 870 if (el.msMatchesSelector) return el.msMatchesSelector(selector); 871 compareWith = $(selector); 872 873 for (i = 0; i < compareWith.length; i += 1) { 874 if (compareWith[i] === el) return true; 875 } 876 877 return false; 878 } 879 880 if (selector === document) { 881 return el === document; 882 } 883 884 if (selector === window) { 885 return el === window; 886 } 887 888 if (selector.nodeType || selector instanceof Dom7) { 889 compareWith = selector.nodeType ? [selector] : selector; 890 891 for (i = 0; i < compareWith.length; i += 1) { 892 if (compareWith[i] === el) return true; 893 } 894 895 return false; 896 } 897 898 return false; 899 } 900 901 function index() { 902 var child = this[0]; 903 var i; 904 905 if (child) { 906 i = 0; // eslint-disable-next-line 907 908 while ((child = child.previousSibling) !== null) { 909 if (child.nodeType === 1) i += 1; 910 } 911 912 return i; 913 } 914 915 return undefined; 916 } 917 918 function eq(index) { 919 if (typeof index === 'undefined') return this; 920 var length = this.length; 921 922 if (index > length - 1) { 923 return $([]); 924 } 925 926 if (index < 0) { 927 var returnIndex = length + index; 928 if (returnIndex < 0) return $([]); 929 return $([this[returnIndex]]); 930 } 931 932 return $([this[index]]); 933 } 934 935 function append() { 936 var newChild; 937 var document = getDocument(); 938 939 for (var k = 0; k < arguments.length; k += 1) { 940 newChild = k < 0 || arguments.length <= k ? undefined : arguments[k]; 941 942 for (var i = 0; i < this.length; i += 1) { 943 if (typeof newChild === 'string') { 944 var tempDiv = document.createElement('div'); 945 tempDiv.innerHTML = newChild; 946 947 while (tempDiv.firstChild) { 948 this[i].appendChild(tempDiv.firstChild); 949 } 950 } else if (newChild instanceof Dom7) { 951 for (var j = 0; j < newChild.length; j += 1) { 952 this[i].appendChild(newChild[j]); 953 } 954 } else { 955 this[i].appendChild(newChild); 956 } 957 } 958 } 959 960 return this; 961 } 962 963 function prepend(newChild) { 964 var document = getDocument(); 965 var i; 966 var j; 967 968 for (i = 0; i < this.length; i += 1) { 969 if (typeof newChild === 'string') { 970 var tempDiv = document.createElement('div'); 971 tempDiv.innerHTML = newChild; 972 973 for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { 974 this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); 975 } 976 } else if (newChild instanceof Dom7) { 977 for (j = 0; j < newChild.length; j += 1) { 978 this[i].insertBefore(newChild[j], this[i].childNodes[0]); 979 } 980 } else { 981 this[i].insertBefore(newChild, this[i].childNodes[0]); 982 } 983 } 984 985 return this; 986 } 987 988 function next(selector) { 989 if (this.length > 0) { 990 if (selector) { 991 if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { 992 return $([this[0].nextElementSibling]); 993 } 994 995 return $([]); 996 } 997 998 if (this[0].nextElementSibling) return $([this[0].nextElementSibling]); 999 return $([]); 1000 } 1001 1002 return $([]); 1003 } 1004 1005 function nextAll(selector) { 1006 var nextEls = []; 1007 var el = this[0]; 1008 if (!el) return $([]); 1009 1010 while (el.nextElementSibling) { 1011 var _next = el.nextElementSibling; // eslint-disable-line 1012 1013 if (selector) { 1014 if ($(_next).is(selector)) nextEls.push(_next); 1015 } else nextEls.push(_next); 1016 1017 el = _next; 1018 } 1019 1020 return $(nextEls); 1021 } 1022 1023 function prev(selector) { 1024 if (this.length > 0) { 1025 var el = this[0]; 1026 1027 if (selector) { 1028 if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { 1029 return $([el.previousElementSibling]); 1030 } 1031 1032 return $([]); 1033 } 1034 1035 if (el.previousElementSibling) return $([el.previousElementSibling]); 1036 return $([]); 1037 } 1038 1039 return $([]); 1040 } 1041 1042 function prevAll(selector) { 1043 var prevEls = []; 1044 var el = this[0]; 1045 if (!el) return $([]); 1046 1047 while (el.previousElementSibling) { 1048 var _prev = el.previousElementSibling; // eslint-disable-line 1049 1050 if (selector) { 1051 if ($(_prev).is(selector)) prevEls.push(_prev); 1052 } else prevEls.push(_prev); 1053 1054 el = _prev; 1055 } 1056 1057 return $(prevEls); 1058 } 1059 1060 function parent(selector) { 1061 var parents = []; // eslint-disable-line 1062 1063 for (var i = 0; i < this.length; i += 1) { 1064 if (this[i].parentNode !== null) { 1065 if (selector) { 1066 if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); 1067 } else { 1068 parents.push(this[i].parentNode); 1069 } 1070 } 1071 } 1072 1073 return $(parents); 1074 } 1075 1076 function parents(selector) { 1077 var parents = []; // eslint-disable-line 1078 1079 for (var i = 0; i < this.length; i += 1) { 1080 var _parent = this[i].parentNode; // eslint-disable-line 1081 1082 while (_parent) { 1083 if (selector) { 1084 if ($(_parent).is(selector)) parents.push(_parent); 1085 } else { 1086 parents.push(_parent); 1087 } 1088 1089 _parent = _parent.parentNode; 1090 } 1091 } 1092 1093 return $(parents); 1094 } 1095 1096 function closest(selector) { 1097 var closest = this; // eslint-disable-line 1098 1099 if (typeof selector === 'undefined') { 1100 return $([]); 1101 } 1102
1103 if (!closest.is(selector)) { 1104 closest = closest.parents(selector).eq(0); 1105 } 1106 1107 return closest; 1108 } 1109 1110 function find(selector) { 1111 var foundElements = []; 1112 1113 for (var i = 0; i < this.length; i += 1) { 1114 var found = this[i].querySelectorAll(selector); 1115 1116 for (var j = 0; j < found.length; j += 1) { 1117 foundElements.push(found[j]); 1118 } 1119 } 1120 1121 return $(foundElements); 1122 } 1123 1124 function children(selector) { 1125 var children = []; // eslint-disable-line 1126 1127 for (var i = 0; i < this.length; i += 1) { 1128 var childNodes = this[i].children; 1129 1130 for (var j = 0; j < childNodes.length; j += 1) { 1131 if (!selector || $(childNodes[j]).is(selector)) { 1132 children.push(childNodes[j]); 1133 } 1134 } 1135 } 1136 1137 return $(children); 1138 } 1139 1140 function remove() { 1141 for (var i = 0; i < this.length; i += 1) { 1142 if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); 1143 } 1144 1145 return this; 1146 } 1147 1148 var Methods = { 1149 addClass: addClass, 1150 removeClass: removeClass, 1151 hasClass: hasClass, 1152 toggleClass: toggleClass, 1153 attr: attr, 1154 removeAttr: removeAttr, 1155 transform: transform, 1156 transition: transition, 1157 on: on, 1158 off: off, 1159 trigger: trigger, 1160 transitionEnd: transitionEnd, 1161 outerWidth: outerWidth, 1162 outerHeight: outerHeight, 1163 styles: styles, 1164 offset: offset, 1165 css: css, 1166 each: each, 1167 html: html, 1168 text: text, 1169 is: is, 1170 index: index, 1171 eq: eq, 1172 append: append, 1173 prepend: prepend, 1174 next: next, 1175 nextAll: nextAll, 1176 prev: prev, 1177 prevAll: prevAll, 1178 parent: parent, 1179 parents: parents, 1180 closest: closest, 1181 find: find, 1182 children: children, 1183 filter: filter, 1184 remove: remove 1185 }; 1186 Object.keys(Methods).forEach(function (methodName) { 1187 $.fn[methodName] = Methods[methodName]; 1188 }); 1189 1190 function deleteProps(obj) { 1191 var object = obj; 1192 Object.keys(object).forEach(function (key) { 1193 try { 1194 object[key] = null; 1195 } catch (e) {// no getter for object 1196 } 1197 1198 try { 1199 delete object[key]; 1200 } catch (e) {// something got wrong 1201 } 1202 }); 1203 } 1204 1205 function nextTick(callback, delay) { 1206 if (delay === void 0) { 1207 delay = 0; 1208 } 1209 1210 return setTimeout(callback, delay); 1211 } 1212 1213 function now() { 1214 return Date.now(); 1215 } 1216 1217 function getTranslate(el, axis) { 1218 if (axis === void 0) { 1219 axis = 'x'; 1220 } 1221 1222 var window = getWindow(); 1223 var matrix; 1224 var curTransform; 1225 var transformMatrix; 1226 var curStyle = window.getComputedStyle(el, null); 1227 1228 if (window.WebKitCSSMatrix) { 1229 curTransform = curStyle.transform || curStyle.webkitTransform; 1230 1231 if (curTransform.split(',').length > 6) { 1232 curTransform = curTransform.split(', ').map(function (a) { 1233 return a.replace(',', '.'); 1234 }).join(', '); 1235 } // Some old versions of Webkit choke when 'none' is passed; pass 1236 // empty string instead in this case 1237 1238 1239 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 1240 } else { 1241 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 1242 matrix = transformMatrix.toString().split(','); 1243 } 1244 1245 if (axis === 'x') { 1246 // Latest Chrome and webkits Fix 1247 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix 1248 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers 1249 else curTransform = parseFloat(matrix[4]); 1250 } 1251 1252 if (axis === 'y') { 1253 // Latest Chrome and webkits Fix 1254 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix 1255 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers 1256 else curTransform = parseFloat(matrix[5]); 1257 } 1258 1259 return curTransform || 0; 1260 } 1261 1262 function isObject$1(o) { 1263 return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object; 1264 } 1265 1266 function extend$1() { 1267 var to = Object(arguments.length <= 0 ? undefined : arguments[0]); 1268 1269 for (var i = 1; i < arguments.length; i += 1) { 1270 var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i]; 1271 1272 if (nextSource !== undefined && nextSource !== null) { 1273 var keysArray = Object.keys(Object(nextSource)); 1274 1275 for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 1276 var nextKey = keysArray[nextIndex]; 1277 var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 1278 1279 if (desc !== undefined && desc.enumerable) { 1280 if (isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) { 1281 extend$1(to[nextKey], nextSource[nextKey]); 1282 } else if (!isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) { 1283 to[nextKey] = {}; 1284 extend$1(to[nextKey], nextSource[nextKey]); 1285 } else { 1286 to[nextKey] = nextSource[nextKey]; 1287 } 1288 } 1289 } 1290 } 1291 } 1292 1293 return to; 1294 } 1295 1296 function bindModuleMethods(instance, obj) {
1297 Object.keys(obj).forEach(function (key) { 1298 if (isObject$1(obj[key])) { 1299 Object.keys(obj[key]).forEach(function (subKey) { 1300 if (typeof obj[key][subKey] === 'function') { 1301 obj[key][subKey] = obj[key][subKey].bind(instance); 1302 } 1303 }); 1304 } 1305 1306 instance[key] = obj[key]; 1307 }); 1308 } 1309 1310 var support; 1311 1312 function calcSupport() { 1313 var window = getWindow(); 1314 var document = getDocument(); 1315 return { 1316 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch), 1317 pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0, 1318 observer: function checkObserver() { 1319 return 'MutationObserver' in window || 'WebkitMutationObserver' in window; 1320 }(), 1321 passiveListener: function checkPassiveListener() { 1322 var supportsPassive = false; 1323 1324 try { 1325 var opts = Object.defineProperty({}, 'passive', { 1326 // eslint-disable-next-line 1327 get: function get() { 1328 supportsPassive = true; 1329 } 1330 }); 1331 window.addEventListener('testPassiveListener', null, opts); 1332 } catch (e) {// No support 1333 } 1334 1335 return supportsPassive; 1336 }(), 1337 gestures: function checkGestures() { 1338 return 'ongesturestart' in window; 1339 }() 1340 }; 1341 } 1342 1343 function getSupport() { 1344 if (!support) { 1345 support = calcSupport(); 1346 } 1347 1348 return support; 1349 } 1350 1351 var device; 1352 1353 function calcDevice(_temp) { 1354 var _ref = _temp === void 0 ? {} : _temp, 1355 userAgent = _ref.userAgent; 1356
1357 var support = getSupport(); 1358 var window = getWindow(); 1359 var platform = window.navigator.platform; 1360 var ua = userAgent || window.navigator.userAgent; 1361 var device = { 1362 ios: false, 1363 android: false 1364 }; 1365 var screenWidth = window.screen.width; 1366 var screenHeight = window.screen.height; 1367 var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 1368 1369 var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 1370 var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 1371 var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 1372 var windows = platform === 'Win32'; 1373 var macos = platform === 'MacIntel'; // iPadOs 13 fix 1374 1375 var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768']; 1376 1377 if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + "x" + screenHeight) >= 0) { 1378 ipad = ua.match(/(Version)\/([\d.]+)/); 1379 if (!ipad) ipad = [0, 1, '13_0_0']; 1380 macos = false; 1381 } // Android 1382 1383 1384 if (android && !windows) { 1385 device.os = 'android'; 1386 device.android = true; 1387 } 1388 1389 if (ipad || iphone || ipod) { 1390 device.os = 'ios'; 1391 device.ios = true; 1392 } // Export object 1393 1394 1395 return device; 1396 } 1397 1398 function getDevice(overrides) { 1399 if (overrides === void 0) { 1400 overrides = {}; 1401 } 1402 1403 if (!device) { 1404 device = calcDevice(overrides); 1405 } 1406 1407 return device; 1408 } 1409 1410 var browser; 1411 1412 function calcBrowser() { 1413 var window = getWindow(); 1414 1415 function isSafari() { 1416 var ua = window.navigator.userAgent.toLowerCase(); 1417 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 1418 } 1419 1420 return { 1421 isEdge: !!window.navigator.userAgent.match(/Edge/g), 1422 isSafari: isSafari(), 1423 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) 1424 }; 1425 } 1426 1427 function getBrowser() { 1428 if (!browser) { 1429 browser = calcBrowser(); 1430 } 1431 1432 return browser; 1433 } 1434 1435 var Resize = { 1436 name: 'resize', 1437 create: function create() { 1438 var swiper = this; 1439 extend$1(swiper, { 1440 resize: { 1441 resizeHandler: function resizeHandler() { 1442 if (!swiper || swiper.destroyed || !swiper.initialized) return; 1443 swiper.emit('beforeResize'); 1444 swiper.emit('resize'); 1445 }, 1446 orientationChangeHandler: function orientationChangeHandler() { 1447 if (!swiper || swiper.destroyed || !swiper.initialized) return; 1448 swiper.emit('orientationchange'); 1449 } 1450 } 1451 }); 1452 }, 1453 on: { 1454 init: function init(swiper) { 1455 var window = getWindow(); // Emit resize 1456 1457 window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange 1458 1459 window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler); 1460 }, 1461 destroy: function destroy(swiper) { 1462 var window = getWindow(); 1463 window.removeEventListener('resize', swiper.resize.resizeHandler); 1464 window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler); 1465 } 1466 } 1467 }; 1468 1469 var Observer = { 1470 attach: function attach(target, options) { 1471 if (options === void 0) { 1472 options = {}; 1473 } 1474 1475 var window = getWindow(); 1476 var swiper = this; 1477 var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 1478 var observer = new ObserverFunc(function (mutations) { 1479 // The observerUpdate event should only be triggered 1480 // once despite the number of mutations. Additional 1481 // triggers are redundant and are very costly 1482 if (mutations.length === 1) { 1483 swiper.emit('observerUpdate', mutations[0]); 1484 return; 1485 } 1486 1487 var observerUpdate = function observerUpdate() { 1488 swiper.emit('observerUpdate', mutations[0]); 1489 }; 1490 1491 if (window.requestAnimationFrame) { 1492 window.requestAnimationFrame(observerUpdate); 1493 } else { 1494 window.setTimeout(observerUpdate, 0); 1495 } 1496 }); 1497 observer.observe(target, { 1498 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 1499 childList: typeof options.childList === 'undefined' ? true : options.childList, 1500 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 1501 }); 1502 swiper.observer.observers.push(observer); 1503 },
1504 init: function init() { 1505 var swiper = this; 1506 if (!swiper.support.observer || !swiper.params.observer) return; 1507 1508 if (swiper.params.observeParents) { 1509 var containerParents = swiper.$el.parents(); 1510 1511 for (var i = 0; i < containerParents.length; i += 1) { 1512 swiper.observer.attach(containerParents[i]); 1513 } 1514 } // Observe container 1515 1516 1517 swiper.observer.attach(swiper.$el[0], { 1518 childList: swiper.params.observeSlideChildren 1519 }); // Observe wrapper 1520 1521 swiper.observer.attach(swiper.$wrapperEl[0], { 1522 attributes: false 1523 }); 1524 }, 1525 destroy: function destroy() { 1526 var swiper = this; 1527 swiper.observer.observers.forEach(function (observer) { 1528 observer.disconnect(); 1529 }); 1530 swiper.observer.observers = []; 1531 } 1532 }; 1533 var Observer$1 = { 1534 name: 'observer', 1535 params: { 1536 observer: false, 1537 observeParents: false, 1538 observeSlideChildren: false 1539 }, 1540 create: function create() { 1541 var swiper = this; 1542 bindModuleMethods(swiper, { 1543 observer: _extends(_extends({}, Observer), {}, { 1544 observers: [] 1545 }) 1546 }); 1547 }, 1548 on: { 1549 init: function init(swiper) { 1550 swiper.observer.init(); 1551 }, 1552 destroy: function destroy(swiper) { 1553 swiper.observer.destroy(); 1554 } 1555 } 1556 }; 1557 1558 var modular = { 1559 useParams: function useParams(instanceParams) { 1560 var instance = this; 1561 if (!instance.modules) return; 1562 Object.keys(instance.modules).forEach(function (moduleName) { 1563 var module = instance.modules[moduleName]; // Extend params 1564 1565 if (module.params) { 1566 extend$1(instanceParams, module.params); 1567 } 1568 }); 1569 }, 1570 useModules: function useModules(modulesParams) { 1571 if (modulesParams === void 0) { 1572 modulesParams = {}; 1573 } 1574 1575 var instance = this; 1576 if (!instance.modules) return; 1577 Object.keys(instance.modules).forEach(function (moduleName) { 1578 var module = instance.modules[moduleName]; 1579 var moduleParams = modulesParams[moduleName] || {}; // Add event listeners 1580 1581 if (module.on && instance.on) { 1582 Object.keys(module.on).forEach(function (moduleEventName) { 1583 instance.on(moduleEventName, module.on[moduleEventName]); 1584 }); 1585 } // Module create callback 1586 1587 1588 if (module.create) { 1589 module.create.bind(instance)(moduleParams); 1590 } 1591 }); 1592 } 1593 }; 1594 1595 /* eslint-disable no-underscore-dangle */ 1596 var eventsEmitter = { 1597 on: function on(events, handler, priority) { 1598 var self = this; 1599 if (typeof handler !== 'function') return self; 1600 var method = priority ? 'unshift' : 'push'; 1601 events.split(' ').forEach(function (event) { 1602 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 1603 self.eventsListeners[event][method](handler); 1604 }); 1605 return self; 1606 }, 1607 once: function once(events, handler, priority) { 1608 var self = this; 1609 if (typeof handler !== 'function') return self; 1610 1611 function onceHandler() { 1612 self.off(events, onceHandler); 1613 1614 if (onceHandler.__emitterProxy) { 1615 delete onceHandler.__emitterProxy; 1616 } 1617 1618 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 1619 args[_key] = arguments[_key]; 1620 } 1621 1622 handler.apply(self, args); 1623 } 1624 1625 onceHandler.__emitterProxy = handler; 1626 return self.on(events, onceHandler, priority); 1627 }, 1628 onAny: function onAny(handler, priority) { 1629 var self = this; 1630 if (typeof handler !== 'function') return self; 1631 var method = priority ? 'unshift' : 'push'; 1632 1633 if (self.eventsAnyListeners.indexOf(handler) < 0) { 1634 self.eventsAnyListeners[method](handler); 1635 } 1636 1637 return self; 1638 }, 1639 offAny: function offAny(handler) { 1640 var self = this; 1641 if (!self.eventsAnyListeners) return self; 1642 var index = self.eventsAnyListeners.indexOf(handler); 1643 1644 if (index >= 0) { 1645 self.eventsAnyListeners.splice(index, 1); 1646 } 1647 1648 return self; 1649 }, 1650 off: function off(events, handler) { 1651 var self = this; 1652 if (!self.eventsListeners) return self; 1653 events.split(' ').forEach(function (event) { 1654 if (typeof handler === 'undefined') { 1655 self.eventsListeners[event] = []; 1656 } else if (self.eventsListeners[event]) { 1657 self.eventsListeners[event].forEach(function (eventHandler, index) { 1658 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 1659 self.eventsListeners[event].splice(index, 1); 1660 } 1661 }); 1662 } 1663 }); 1664 return self; 1665 }, 1666 emit: function emit() { 1667 var self = this; 1668 if (!self.eventsListeners) return self; 1669 var events; 1670 var data; 1671 var context; 1672 1673 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 1674 args[_key2] = arguments[_key2]; 1675 } 1676 1677 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 1678 events = args[0]; 1679 data = args.slice(1, args.length); 1680 context = self; 1681 } else { 1682 events = args[0].events; 1683 data = args[0].data;
1684 context = args[0].context || self; 1685 } 1686 1687 data.unshift(context); 1688 var eventsArray = Array.isArray(events) ? events : events.split(' '); 1689 eventsArray.forEach(function (event) { 1690 if (self.eventsListeners && self.eventsListeners[event]) { 1691 var handlers = []; 1692 self.eventsListeners[event].forEach(function (eventHandler) { 1693 handlers.push(eventHandler); 1694 }); 1695 handlers.forEach(function (eventHandler) { 1696 eventHandler.apply(context, data); 1697 }); 1698 } 1699 }); 1700 return self; 1701 } 1702 }; 1703 1704 function updateSize() { 1705 var swiper = this; 1706 var width; 1707 var height; 1708 var $el = swiper.$el; 1709 1710 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 1711 width = swiper.params.width; 1712 } else { 1713 width = $el[0].clientWidth; 1714 } 1715 1716 if (typeof swiper.params.height !== 'undefined' && swiper.params.width !== null) { 1717 height = swiper.params.height; 1718 } else { 1719 height = $el[0].clientHeight; 1720 } 1721 1722 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 1723 return; 1724 } // Subtract paddings 1725 1726 1727 width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10); 1728 height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10); 1729 if (Number.isNaN(width)) width = 0; 1730 if (Number.isNaN(height)) height = 0; 1731 extend$1(swiper, { 1732 width: width, 1733 height: height, 1734 size: swiper.isHorizontal() ? width : height 1735 }); 1736 } 1737 1738 function updateSlides() { 1739 var swiper = this; 1740 var window = getWindow(); 1741 var params = swiper.params; 1742 var $wrapperEl = swiper.$wrapperEl, 1743 swiperSize = swiper.size, 1744 rtl = swiper.rtlTranslate, 1745 wrongRTL = swiper.wrongRTL; 1746 var isVirtual = swiper.virtual && params.virtual.enabled; 1747 var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 1748 var slides = $wrapperEl.children("." + swiper.params.slideClass); 1749 var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 1750 var snapGrid = []; 1751 var slidesGrid = []; 1752 var slidesSizesGrid = []; 1753 1754 function slidesForMargin(slideEl, slideIndex) { 1755 if (!params.cssMode) return true; 1756 1757 if (slideIndex === slides.length - 1) { 1758 return false; 1759 } 1760 1761 return true; 1762 } 1763 1764 var offsetBefore = params.slidesOffsetBefore; 1765 1766 if (typeof offsetBefore === 'function') { 1767 offsetBefore = params.slidesOffsetBefore.call(swiper); 1768 } 1769 1770 var offsetAfter = params.slidesOffsetAfter; 1771 1772 if (typeof offsetAfter === 'function') { 1773 offsetAfter = params.slidesOffsetAfter.call(swiper); 1774 } 1775 1776 var previousSnapGridLength = swiper.snapGrid.length; 1777 var previousSlidesGridLength = swiper.snapGrid.length; 1778 var spaceBetween = params.spaceBetween; 1779 var slidePosition = -offsetBefore; 1780 var prevSlideSize = 0; 1781 var index = 0; 1782 1783 if (typeof swiperSize === 'undefined') { 1784 return; 1785 } 1786 1787 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 1788 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 1789 } 1790 1791 swiper.virtualSize = -spaceBetween; // reset margins 1792 1793 if (rtl) slides.css({ 1794 marginLeft: '', 1795 marginTop: '' 1796 });else slides.css({ 1797 marginRight: '', 1798 marginBottom: '' 1799 }); 1800 var slidesNumberEvenToRows; 1801 1802 if (params.slidesPerColumn > 1) { 1803 if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) { 1804 slidesNumberEvenToRows = slidesLength; 1805 } else { 1806 slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn; 1807 } 1808 1809 if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') { 1810 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn); 1811 } 1812 } // Calc slides 1813 1814 1815 var slideSize; 1816 var slidesPerColumn = params.slidesPerColumn;
1817 var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; 1818 var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn); 1819 1820 for (var i = 0; i < slidesLength; i += 1) { 1821 slideSize = 0; 1822 var slide = slides.eq(i); 1823 1824 if (params.slidesPerColumn > 1) { 1825 // Set slides order 1826 var newSlideOrderIndex = void 0; 1827 var column = void 0; 1828 var row = void 0; 1829 1830 if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) { 1831 var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn)); 1832 var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex; 1833 var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup); 1834 row = Math.floor(slideIndexInGroup / columnsInGroup); 1835 column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup; 1836 newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; 1837 slide.css({ 1838 '-webkit-box-ordinal-group': newSlideOrderIndex, 1839 '-moz-box-ordinal-group': newSlideOrderIndex, 1840 '-ms-flex-order': newSlideOrderIndex, 1841 '-webkit-order': newSlideOrderIndex, 1842 order: newSlideOrderIndex 1843 }); 1844 } else if (params.slidesPerColumnFill === 'column') { 1845 column = Math.floor(i / slidesPerColumn); 1846 row = i - column * slidesPerColumn; 1847 1848 if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) { 1849 row += 1; 1850 1851 if (row >= slidesPerColumn) { 1852 row = 0; 1853 column += 1; 1854 } 1855 } 1856 } else { 1857 row = Math.floor(i / slidesPerRow); 1858 column = i - row * slidesPerRow; 1859 } 1860 1861 slide.css("margin-" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + "px"); 1862 } 1863 1864 if (slide.css('display') === 'none') continue; // eslint-disable-line 1865 1866 if (params.slidesPerView === 'auto') { 1867 var slideStyles = window.getComputedStyle(slide[0], null); 1868 var currentTransform = slide[0].style.transform; 1869 var currentWebKitTransform = slide[0].style.webkitTransform; 1870 1871 if (currentTransform) { 1872 slide[0].style.transform = 'none'; 1873 } 1874 1875 if (currentWebKitTransform) { 1876 slide[0].style.webkitTransform = 'none'; 1877 } 1878 1879 if (params.roundLengths) { 1880 slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); 1881 } else { 1882 // eslint-disable-next-line 1883 if (swiper.isHorizontal()) { 1884 var width = parseFloat(slideStyles.getPropertyValue('width') || 0); 1885 var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0); 1886 var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0); 1887 var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0); 1888 var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0); 1889 var boxSizing = slideStyles.getPropertyValue('box-sizing'); 1890 1891 if (boxSizing && boxSizing === 'border-box') { 1892 slideSize = width + marginLeft + marginRight; 1893 } else { 1894 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight; 1895 } 1896 } else { 1897 var height = parseFloat(slideStyles.getPropertyValue('height') || 0); 1898 var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0); 1899 var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0); 1900 var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0); 1901 var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0); 1902 1903 var _boxSizing = slideStyles.getPropertyValue('box-sizing'); 1904 1905 if (_boxSizing && _boxSizing === 'border-box') { 1906 slideSize = height + marginTop + marginBottom; 1907 } else { 1908 slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom; 1909 } 1910 } 1911 } 1912 1913 if (currentTransform) { 1914 slide[0].style.transform = currentTransform; 1915 } 1916 1917 if (currentWebKitTransform) { 1918 slide[0].style.webkitTransform = currentWebKitTransform; 1919 } 1920 1921 if (params.roundLengths) slideSize = Math.floor(slideSize); 1922 } else { 1923 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 1924 if (params.roundLengths) slideSize = Math.floor(slideSize); 1925 1926 if (slides[i]) { 1927 if (swiper.isHorizontal()) { 1928 slides[i].style.width = slideSize + "px"; 1929 } else { 1930 slides[i].style.height = slideSize + "px"; 1931 } 1932 } 1933 } 1934 1935 if (slides[i]) { 1936 slides[i].swiperSlideSize = slideSize; 1937 } 1938 1939 slidesSizesGrid.push(slideSize); 1940 1941 if (params.centeredSlides) { 1942 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 1943 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 1944 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 1945 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 1946 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 1947 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 1948 slidesGrid.push(slidePosition); 1949 } else { 1950 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 1951 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 1952 slidesGrid.push(slidePosition); 1953 slidePosition = slidePosition + slideSize + spaceBetween; 1954 } 1955 1956 swiper.virtualSize += slideSize + spaceBetween; 1957 prevSlideSize = slideSize; 1958 index += 1; 1959 } 1960 1961 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 1962 var newSlidesGrid; 1963 1964 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 1965 $wrapperEl.css({ 1966 width: swiper.virtualSize + params.spaceBetween + "px" 1967 }); 1968 } 1969 1970 if (params.setWrapperSize) { 1971 if (swiper.isHorizontal()) $wrapperEl.css({ 1972 width: swiper.virtualSize + params.spaceBetween + "px" 1973 });else $wrapperEl.css({ 1974 height: swiper.virtualSize + params.spaceBetween + "px" 1975 }); 1976 } 1977 1978 if (params.slidesPerColumn > 1) { 1979 swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumber
1979EvenToRows; 1980 swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween; 1981 if (swiper.isHorizontal()) $wrapperEl.css({ 1982 width: swiper.virtualSize + params.spaceBetween + "px" 1983 });else $wrapperEl.css({ 1984 height: swiper.virtualSize + params.spaceBetween + "px" 1985 }); 1986 1987 if (params.centeredSlides) { 1988 newSlidesGrid = []; 1989 1990 for (var _i = 0; _i < snapGrid.length; _i += 1) { 1991 var slidesGridItem = snapGrid[_i]; 1992 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 1993 if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 1994 } 1995 1996 snapGrid = newSlidesGrid; 1997 } 1998 } // Remove last grid elements depending on width 1999 2000 2001 if (!params.centeredSlides) { 2002 newSlidesGrid = []; 2003 2004 for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) { 2005 var _slidesGridItem = snapGrid[_i2]; 2006 if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem); 2007 2008 if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) { 2009 newSlidesGrid.push(_slidesGridItem); 2010 } 2011 } 2012 2013 snapGrid = newSlidesGrid; 2014 2015 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 2016 snapGrid.push(swiper.virtualSize - swiperSize); 2017 } 2018 } 2019 2020 if (snapGrid.length === 0) snapGrid = [0]; 2021 2022 if (params.spaceBetween !== 0) { 2023 if (swiper.isHorizontal()) { 2024 if (rtl) slides.filter(slidesForMargin).css({ 2025 marginLeft: spaceBetween + "px" 2026 });else slides.filter(slidesForMargin).css({ 2027 marginRight: spaceBetween + "px" 2028 }); 2029 } else slides.filter(slidesForMargin).css({ 2030 marginBottom: spaceBetween + "px" 2031 }); 2032 } 2033 2034 if (params.centeredSlides && params.centeredSlidesBounds) { 2035 var allSlidesSize = 0; 2036 slidesSizesGrid.forEach(function (slideSizeValue) { 2037 allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 2038 }); 2039 allSlidesSize -= params.spaceBetween; 2040 var maxSnap = allSlidesSize - swiperSize; 2041 snapGrid = snapGrid.map(function (snap) { 2042 if (snap < 0) return -offsetBefore; 2043 if (snap > maxSnap) return maxSnap + offsetAfter; 2044 return snap; 2045 }); 2046 } 2047 2048 if (params.centerInsufficientSlides) { 2049 var _allSlidesSize = 0; 2050 slidesSizesGrid.forEach(function (slideSizeValue) { 2051 _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 2052 }); 2053 _allSlidesSize -= params.spaceBetween; 2054 2055 if (_allSlidesSize < swiperSize) { 2056 var allSlidesOffset = (swiperSize - _allSlidesSize) / 2; 2057 snapGrid.forEach(function (snap, snapIndex) { 2058 snapGrid[snapIndex] = snap - allSlidesOffset; 2059 }); 2060 slidesGrid.forEach(function (snap, snapIndex) { 2061 slidesGrid[snapIndex] = snap + allSlidesOffset; 2062 }); 2063 } 2064 } 2065 2066 extend$1(swiper, { 2067 slides: slides, 2068 snapGrid: snapGrid, 2069 slidesGrid: slidesGrid, 2070 slidesSizesGrid: slidesSizesGrid 2071 }); 2072 2073 if (slidesLength !== previousSlidesLength) { 2074 swiper.emit('slidesLengthChange'); 2075 } 2076 2077 if (snapGrid.length !== previousSnapGridLength) { 2078 if (swiper.params.watchOverflow) swiper.checkOverflow(); 2079 swiper.emit('snapGridLengthChange'); 2080 } 2081 2082 if (slidesGrid.length !== previousSlidesGridLength) { 2083 swiper.emit('slidesGridLengthChange'); 2084 } 2085 2086 if (params.watchSlidesProgress || params.watchSlidesVisibility) { 2087 swiper.updateSlidesOffset(); 2088 } 2089 } 2090 2091 function updateAutoHeight(speed) { 2092 var swiper = this; 2093 var activeSlides = []; 2094 var newHeight = 0; 2095 var i; 2096 2097 if (typeof speed === 'number') { 2098 swiper.setTransition(speed); 2099 } else if (speed === true) { 2100 swiper.setTransition(swiper.params.speed); 2101 } // Find slides currently in view 2102 2103 2104 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 2105 if (swiper.params.centeredSlides) { 2106 swiper.visibleSlides.each(function (slide) { 2107 activeSlides.push(slide); 2108 }); 2109 } else { 2110 for (i = 0;
2110 i < Math.ceil(swiper.params.slidesPerView); i += 1) { 2111 var index = swiper.activeIndex + i; 2112 if (index > swiper.slides.length) break; 2113 activeSlides.push(swiper.slides.eq(index)[0]); 2114 } 2115 } 2116 } else { 2117 activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]); 2118 } // Find new height from highest slide in view 2119 2120 2121 for (i = 0; i < activeSlides.length; i += 1) { 2122 if (typeof activeSlides[i] !== 'undefined') { 2123 var height = activeSlides[i].offsetHeight; 2124 newHeight = height > newHeight ? height : newHeight; 2125 } 2126 } // Update Height 2127 2128 2129 if (newHeight) swiper.$wrapperEl.css('height', newHeight + "px"); 2130 } 2131 2132 function updateSlidesOffset() { 2133 var swiper = this; 2134 var slides = swiper.slides; 2135 2136 for (var i = 0; i < slides.length; i += 1) { 2137 slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; 2138 } 2139 } 2140 2141 function updateSlidesProgress(translate) { 2142 if (translate === void 0) { 2143 translate = this && this.translate || 0; 2144 } 2145 2146 var swiper = this; 2147 var params = swiper.params; 2148 var slides = swiper.slides, 2149 rtl = swiper.rtlTranslate; 2150 if (slides.length === 0) return; 2151 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 2152 var offsetCenter = -translate; 2153 if (rtl) offsetCenter = translate; // Visible Slides 2154 2155 slides.removeClass(params.slideVisibleClass); 2156 swiper.visibleSlidesIndexes = []; 2157 swiper.visibleSlides = []; 2158 2159 for (var i = 0; i < slides.length; i += 1) { 2160 var slide = slides[i]; 2161 var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween); 2162 2163 if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) { 2164 var slideBefore = -(offsetCenter - slide.swiperSlideOffset); 2165 var slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 2166 var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 2167 2168 if (isVisible) { 2169 swiper.visibleSlides.push(slide); 2170 swiper.visibleSlidesIndexes.push(i); 2171 slides.eq(i).addClass(params.slideVisibleClass); 2172 } 2173 } 2174 2175 slide.progress = rtl ? -slideProgress : slideProgress; 2176 } 2177 2178 swiper.visibleSlides = $(swiper.visibleSlides); 2179 } 2180 2181 function updateProgress(translate) { 2182 var swiper = this; 2183 2184 if (typeof translate === 'undefined') { 2185 var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line 2186 2187 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 2188 } 2189 2190 var params = swiper.params; 2191 var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 2192 var progress = swiper.progress, 2193 isBeginning = swiper.isBeginning, 2194 isEnd = swiper.isEnd; 2195 var wasBeginning = isBeginning; 2196 var wasEnd = isEnd; 2197 2198 if (translatesDiff === 0) { 2199 progress = 0; 2200 isBeginning = true; 2201 isEnd = true; 2202 } else { 2203 progress = (translate - swiper.minTranslate()) / translatesDiff; 2204 isBeginning = progress <= 0; 2205 isEnd = progress >= 1; 2206 } 2207 2208 extend$1(swiper, { 2209 progress: progress, 2210 isBeginning: isBeginning, 2211 isEnd: isEnd 2212 }); 2213 if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 2214 2215 if (isBeginning && !wasBeginning) { 2216 swiper.emit('reachBeginning toEdge'); 2217 } 2218 2219 if (isEnd && !wasEnd) { 2220 swiper.emit('reachEnd toEdge'); 2221 } 2222 2223 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 2224 swiper.emit('fromEdge'); 2225 } 2226 2227 swiper.emit('progress', progress); 2228 } 2229 2230 function updateSlidesClasses() { 2231 var swiper = this; 2232 var slides = swiper.slides, 2233 params = swiper.params, 2234 $wrapperEl = swiper.$wrapperEl, 2235 activeIndex = swiper.activeIndex, 2236 realIndex = swiper.realIndex; 2237 var isVirtual = swiper.virtual && params.virtual.enabled; 2238 slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass); 2239 var activeSlide; 2240 2241 if (isVirtual) { 2242 activeSlide = swiper.$wrapperEl.find("." + params.slideClass + "[data-swiper-slide-index=\"" + activeIndex + "\"]"); 2243 } else { 2244 activeSlide = slides.eq(activeIndex); 2245 } // Active classes 2246 2247 2248 activeSlide.addClass(params.slideActiveClass); 2249 2250 if (params.loop) { 2251 // Duplicate to all looped slides 2252 if (activeSlide.hasClass(params.slideDuplicateClass)) { 2253 $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass); 2254 } else { 2255 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass); 2256 } 2257 } // Next Slide 2258 2259 2260 var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass); 2261 2262 if (params.loop && nextSlide.length === 0) { 2263 nextSlide = slides.eq(0); 2264 nextSlide.addClass(params.slideNextClass); 2265 } // Prev Slide 2266 2267 2268 var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass); 2269 2270 if (params.loop && prevSlide.length === 0) { 2271 prevSlide = slides.eq(-1); 2272 prevSlide.addClass(params.slidePrevClass); 2273 } 2274 2275 if (params.loop) { 2276 // Duplicate to all looped slides 2277 if (nextSlide.hasClass(params.slideDuplicateClass)) { 2278 $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass); 2279 } else { 2280 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass); 2281 } 2282 2283 if (prevSlide.hasClass(params.slideDuplicateClass)) { 2284 $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass); 2285 } else { 2286 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass); 2287 } 2288 } 2289 2290 swiper.emitSlidesClasses(); 2291 } 2292 2293 function updateActiveIndex(newActiveIndex) { 2294 var swiper = this; 2295 var translate = swiper.rtlTranslate ? swiper.translate : -swi
2295per.translate; 2296 var slidesGrid = swiper.slidesGrid, 2297 snapGrid = swiper.snapGrid, 2298 params = swiper.params, 2299 previousIndex = swiper.activeIndex, 2300 previousRealIndex = swiper.realIndex, 2301 previousSnapIndex = swiper.snapIndex; 2302 var activeIndex = newActiveIndex; 2303 var snapIndex; 2304 2305 if (typeof activeIndex === 'undefined') { 2306 for (var i = 0; i < slidesGrid.length; i += 1) { 2307 if (typeof slidesGrid[i + 1] !== 'undefined') { 2308 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 2309 activeIndex = i; 2310 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 2311 activeIndex = i + 1; 2312 } 2313 } else if (translate >= slidesGrid[i]) { 2314 activeIndex = i; 2315 } 2316 } // Normalize slideIndex 2317 2318 2319 if (params.normalizeSlideIndex) { 2320 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 2321 } 2322 } 2323 2324 if (snapGrid.indexOf(translate) >= 0) { 2325 snapIndex = snapGrid.indexOf(translate); 2326 } else { 2327 var skip = Math.min(params.slidesPerGroupSkip, activeIndex); 2328 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 2329 } 2330 2331 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 2332 2333 if (activeIndex === previousIndex) { 2334 if (snapIndex !== previousSnapIndex) { 2335 swiper.snapIndex = snapIndex; 2336 swiper.emit('snapIndexChange'); 2337 } 2338 2339 return; 2340 } // Get real index 2341 2342 2343 var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); 2344 extend$1(swiper, { 2345 snapIndex: snapIndex, 2346 realIndex: realIndex, 2347 previousIndex: previousIndex, 2348 activeIndex: activeIndex 2349 }); 2350 swiper.emit('activeIndexChange'); 2351 swiper.emit('snapIndexChange'); 2352 2353 if (previousRealIndex !== realIndex) { 2354 swiper.emit('realIndexChange'); 2355 } 2356 2357 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 2358 swiper.emit('slideChange'); 2359 } 2360 } 2361 2362 function updateClickedSlide(e) { 2363 var swiper = this; 2364 var params = swiper.params; 2365 var slide = $(e.target).closest("." + params.slideClass)[0]; 2366 var slideFound = false; 2367 2368 if (slide) { 2369 for (var i = 0; i < swiper.slides.length; i += 1) { 2370 if (swiper.slides[i] === slide) slideFound = true; 2371 } 2372 } 2373 2374 if (slide && slideFound) { 2375 swiper.clickedSlide = slide; 2376 2377 if (swiper.virtual && swiper.params.virtual.enabled) { 2378 swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10); 2379 } else { 2380 swiper.clickedIndex = $(slide).index(); 2381 } 2382 } else { 2383 swiper.clickedSlide = undefined; 2384 swiper.clickedIndex = undefined; 2385 return; 2386 } 2387 2388 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 2389 swiper.slideToClickedSlide(); 2390 } 2391 } 2392 2393 var update = { 2394 updateSize: updateSize, 2395 updateSlides: updateSlides, 2396 updateAutoHeight: updateAutoHeight, 2397 updateSlidesOffset: updateSlidesOffset, 2398 updateSlidesProgress: updateSlidesProgress, 2399 updateProgress: updateProgress, 2400 updateSlidesClasses: updateSlidesClasses, 2401 updateActiveIndex: updateActiveIndex, 2402 updateClickedSlide: updateClickedSlide 2403 }; 2404 2405 function getSwiperTranslate(axis) { 2406 if (axis === void 0) { 2407 axis = this.isHorizontal() ? 'x' : 'y'; 2408 } 2409 2410 var swiper = this; 2411 var params = swiper.params, 2412 rtl = swiper.rtlTranslate, 2413 translate = swiper.translate, 2414 $wrapperEl = swiper.$wrapperEl; 2415 2416 if (params.virtualTranslate) { 2417 return rtl ? -translate : translate; 2418 } 2419 2420 if (params.cssMode) { 2421 return translate; 2422 } 2423 2424 var currentTranslate = getTranslate($wrapperEl[0], axis); 2425 if (rtl) currentTranslate = -currentTranslate; 2426 return currentTranslate || 0; 2427 } 2428 2429 function setTranslate(translate, byController) { 2430 var swiper = this; 2431 var rtl = swiper.rtlTranslate, 2432 params = swiper.params, 2433 $wrapperEl = swiper.$wrapperEl, 2434 wrapperEl = swiper.wrapperEl, 2435 progress = swiper.progress; 2436 var x = 0; 2437 var y = 0; 2438 var z = 0; 2439 2440 if (swiper.isHorizontal()) { 2441 x = rtl ? -translate : translate; 2442 } else { 2443 y = translate; 2444 } 2445 2446 if (params.roundLengths) { 2447 x = Math.floor(x); 2448 y = Math.floor(y); 2449 } 2450 2451 if (params.cssMode) { 2452 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 2453 } else if (!params.virtualTranslate) { 2454 $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)"); 2455 } 2456 2457 swiper.previousTranslate = swiper.translate; 2458 swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress 2459 2460 var newProgress; 2461 var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 2462 2463 if (translatesDiff === 0) { 2464 newProgress = 0; 2465 } else { 2466 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 2467 } 2468 2469 if (newProgress !== progress) { 2470 swiper.updateProgress(translate); 2471 } 2472 2473 swiper.emit('setTranslate', swiper.translate, byController); 2474 } 2475 2476 function minTranslate() { 2477 return -this.snapGrid[0]; 2478 } 2479 2480 function maxTranslate() { 2481 return -this.snapGrid[this.snapGrid.length - 1]; 2482 } 2483 2484 function translateTo(translate, speed, runCallbacks, translateBounds, internal) { 2485 if (translate === void 0) { 2486 translate = 0; 2487 } 2488 2489 if (speed === void 0) { 2490 speed = this.params.speed; 2491 } 2492 2493 if (runCallbacks === void 0) { 2494 runCallbacks = true; 2495 } 2496 2497 if (translateBounds === void 0) { 2498 translateBounds = true; 2499 } 2500 2501 var swiper = this; 2502 var params = swiper.params, 2503 wrapperEl = swiper.wrapperEl; 2504 2505 if (swiper.animating && params.preventInteractionOnTransition) { 2506 return false;
vendor: 4,110 bytes, lines 2507-2644
2507 } 2508 2509 var minTranslate = swiper.minTranslate(); 2510 var maxTranslate = swiper.maxTranslate(); 2511 var newTranslate; 2512 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress 2513 2514 swiper.updateProgress(newTranslate); 2515 2516 if (params.cssMode) { 2517 var isH = swiper.isHorizontal(); 2518 2519 if (speed === 0) { 2520 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 2521 } else { 2522 // eslint-disable-next-line 2523 if (wrapperEl.scrollTo) { 2524 var _wrapperEl$scrollTo; 2525 2526 wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo)); 2527 } else { 2528 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 2529 } 2530 } 2531 2532 return true; 2533 } 2534 2535 if (speed === 0) { 2536 swiper.setTransition(0); 2537 swiper.setTranslate(newTranslate); 2538 2539 if (runCallbacks) { 2540 swiper.emit('beforeTransitionStart', speed, internal); 2541 swiper.emit('transitionEnd'); 2542 } 2543 } else { 2544 swiper.setTransition(speed); 2545 swiper.setTranslate(newTranslate); 2546 2547 if (runCallbacks) { 2548 swiper.emit('beforeTransitionStart', speed, internal); 2549 swiper.emit('transitionStart'); 2550 } 2551 2552 if (!swiper.animating) { 2553 swiper.animating = true; 2554 2555 if (!swiper.onTranslateToWrapperTransitionEnd) { 2556 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 2557 if (!swiper || swiper.destroyed) return; 2558 if (e.target !== this) return; 2559 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 2560 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 2561 swiper.onTranslateToWrapperTransitionEnd = null; 2562 delete swiper.onTranslateToWrapperTransitionEnd; 2563 2564 if (runCallbacks) { 2565 swiper.emit('transitionEnd'); 2566 } 2567 }; 2568 } 2569 2570 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 2571 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 2572 } 2573 } 2574 2575 return true; 2576 } 2577 2578 var translate = { 2579 getTranslate: getSwiperTranslate, 2580 setTranslate: setTranslate, 2581 minTranslate: minTranslate, 2582 maxTranslate: maxTranslate, 2583 translateTo: translateTo 2584 }; 2585 2586 function setTransition(duration, byController) { 2587 var swiper = this; 2588 2589 if (!swiper.params.cssMode) { 2590 swiper.$wrapperEl.transition(duration); 2591 } 2592 2593 swiper.emit('setTransition', duration, byController); 2594 } 2595 2596 function transitionStart(runCallbacks, direction) { 2597 if (runCallbacks === void 0) { 2598 runCallbacks = true; 2599 } 2600 2601 var swiper = this; 2602 var activeIndex = swiper.activeIndex, 2603 params = swiper.params, 2604 previousIndex = swiper.previousIndex; 2605 if (params.cssMode) return; 2606 2607 if (params.autoHeight) { 2608 swiper.updateAutoHeight(); 2609 } 2610 2611 var dir = direction; 2612 2613 if (!dir) { 2614 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 2615 } 2616 2617 swiper.emit('transitionStart'); 2618 2619 if (runCallbacks && activeIndex !== previousIndex) { 2620 if (dir === 'reset') { 2621 swiper.emit('slideResetTransitionStart'); 2622 return; 2623 } 2624 2625 swiper.emit('slideChangeTransitionStart'); 2626 2627 if (dir === 'next') { 2628 swiper.emit('slideNextTransitionStart'); 2629 } else { 2630 swiper.emit('slidePrevTransitionStart'); 2631 } 2632 } 2633 } 2634 2635 function transitionEnd$1(runCallbacks, direction) { 2636 if (runCallbacks === void 0) { 2637 runCallbacks = true; 2638 } 2639 2640 var swiper = this; 2641 var activeIndex = swiper.activeIndex, 2642 previousIndex = swiper.previousIndex, 2643 params = swiper.params; 2644 swiper.animating = false;
2645 if (params.cssMode) return; 2646 swiper.setTransition(0); 2647 var dir = direction; 2648 2649 if (!dir) { 2650 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 2651 } 2652 2653 swiper.emit('transitionEnd'); 2654 2655 if (runCallbacks && activeIndex !== previousIndex) { 2656 if (dir === 'reset') { 2657 swiper.emit('slideResetTransitionEnd'); 2658 return; 2659 } 2660 2661 swiper.emit('slideChangeTransitionEnd'); 2662 2663 if (dir === 'next') { 2664 swiper.emit('slideNextTransitionEnd'); 2665 } else { 2666 swiper.emit('slidePrevTransitionEnd'); 2667 } 2668 } 2669 } 2670 2671 var transition$1 = { 2672 setTransition: setTransition, 2673 transitionStart: transitionStart, 2674 transitionEnd: transitionEnd$1 2675 }; 2676 2677 function slideTo(index, speed, runCallbacks, internal) { 2678 if (index === void 0) { 2679 index = 0; 2680 } 2681 2682 if (speed === void 0) { 2683 speed = this.params.speed; 2684 } 2685 2686 if (runCallbacks === void 0) { 2687 runCallbacks = true; 2688 } 2689 2690 var swiper = this; 2691 var slideIndex = index; 2692 if (slideIndex < 0) slideIndex = 0; 2693 var params = swiper.params, 2694 snapGrid = swiper.snapGrid, 2695 slidesGrid = swiper.slidesGrid, 2696 previousIndex = swiper.previousIndex, 2697 activeIndex = swiper.activeIndex, 2698 rtl = swiper.rtlTranslate, 2699 wrapperEl = swiper.wrapperEl; 2700 2701 if (swiper.animating && params.preventInteractionOnTransition) { 2702 return false; 2703 } 2704 2705 var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 2706 var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 2707 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 2708 2709 if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { 2710 swiper.emit('beforeSlideChangeStart'); 2711 } 2712 2713 var translate = -snapGrid[snapIndex]; // Update progress 2714 2715 swiper.updateProgress(translate); // Normalize slideIndex 2716 2717 if (params.normalizeSlideIndex) { 2718 for (var i = 0; i < slidesGrid.length; i += 1) { 2719 if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) { 2720 slideIndex = i; 2721 } 2722 } 2723 } // Directions locks 2724 2725 2726 if (swiper.initialized && slideIndex !== activeIndex) { 2727 if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { 2728 return false; 2729 } 2730 2731 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 2732 if ((activeIndex || 0) !== slideIndex) return false; 2733 } 2734 } 2735 2736 var direction; 2737 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index 2738 2739 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 2740 swiper.updateActiveIndex(slideIndex); // Update Height 2741 2742 if (params.autoHeight) { 2743 swiper.updateAutoHeight(); 2744 } 2745 2746 swiper.updateSlidesClasses(); 2747 2748 if (params.effect !== 'slide') { 2749 swiper.setTranslate(translate); 2750 } 2751 2752 if (direction !== 'reset') { 2753 swiper.transitionStart(runCallbacks, direction); 2754 swiper.transitionEnd(runCallbacks, direction); 2755 } 2756 2757 return false; 2758 } 2759 2760 if (params.cssMode) { 2761 var isH = swiper.isHorizontal(); 2762 var t = -translate; 2763 2764 if (rtl) { 2765 t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t; 2766 } 2767 2768 if (speed === 0) { 2769 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 2770 } else { 2771 // eslint-disable-next-line 2772 if (wrapperEl.scrollTo) { 2773 var _wrapperEl$scrollTo; 2774 2775 wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo)); 2776 } else { 2777 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 2778 } 2779 } 2780 2781 return true; 2782 } 2783 2784 if (speed === 0) { 2785 swiper.setTransition(0); 2786 swiper.setTranslate(translate); 2787 swiper.updateActiveIndex(slideIndex); 2788 swiper.updateSlidesClasses(); 2789 swiper.emit('beforeTransitionStart', speed, internal); 2790 swiper.transitionStart(runCallbacks, direction); 2791 swiper.transitionEnd(runCallbacks, direction); 2792 } else { 2793 swiper.setTransition(speed); 2794 swiper.setTranslate(translate); 2795 swiper.updateActiveIndex(slideIndex); 2796 swiper.updateSlidesClasses(); 2797 swiper.emit('beforeTransitionStart', speed, internal); 2798 swiper.transitionStart(runCallbacks, direction); 2799 2800 if (!swiper.animating) { 2801 swiper.animating = true; 2802 2803 if (!swiper.onSlideToWrapperTransitionEnd) { 2804 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 2805 if (!swiper || swiper.destroyed) return; 2806 if (e.target !== this) return; 2807 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 2808 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 2809 swiper.onSlideToWrapperTransitionEnd = null; 2810 delete swiper.onSlideToWrapperTransitionEnd; 2811 swiper.transitionEnd(runCallbacks, direction); 2812 }; 2813 } 2814 2815 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 2816 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 2817 } 2818 } 2819 2820 return true; 2821 } 2822 2823 function slideToLoop(index, speed, runCallbacks, internal) { 2824 if (index === void 0) { 2825 index = 0; 2826 } 2827 2828 if (speed === void 0) { 2829 speed = this.params.speed; 2830 } 2831 2832 if (runCallbacks === void 0) { 2833 runCallbacks = true; 2834 } 2835 2836 var swiper = this; 2837 var newIndex = index; 2838 2839 if (swiper.params.loop) { 2840 newIndex += swiper.loopedSlides; 2841 } 2842 2843 return swiper.slideTo(newIndex, speed, runCallbacks, internal); 2844 } 2845 2846 /* eslint no-unused-vars: "off" */ 2847 function slideNext(speed, runCallbacks, internal) { 2848 if (speed === void 0) { 2849 speed = this.params.speed; 2850 } 2851 2852 if (runCallbacks === void 0) { 2853 runCallbacks = true; 2854 } 2855 2856 var swiper = this; 2857 var params = swiper.params, 2858 animating = swiper.animating; 2859 var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup; 2860 2861 if (params.loop) { 2862 if (animating && params.loopPreventsSlide) return false;
2863 swiper.loopFix(); // eslint-disable-next-line 2864 2865 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 2866 } 2867 2868 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 2869 } 2870 2871 /* eslint no-unused-vars: "off" */ 2872 function slidePrev(speed, runCallbacks, internal) { 2873 if (speed === void 0) { 2874 speed = this.params.speed; 2875 } 2876 2877 if (runCallbacks === void 0) { 2878 runCallbacks = true; 2879 } 2880 2881 var swiper = this; 2882 var params = swiper.params, 2883 animating = swiper.animating, 2884 snapGrid = swiper.snapGrid, 2885 slidesGrid = swiper.slidesGrid, 2886 rtlTranslate = swiper.rtlTranslate; 2887 2888 if (params.loop) { 2889 if (animating && params.loopPreventsSlide) return false; 2890 swiper.loopFix(); // eslint-disable-next-line 2891 2892 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 2893 } 2894 2895 var translate = rtlTranslate ? swiper.translate : -swiper.translate; 2896 2897 function normalize(val) { 2898 if (val < 0) return -Math.floor(Math.abs(val)); 2899 return Math.floor(val); 2900 } 2901 2902 var normalizedTranslate = normalize(translate); 2903 var normalizedSnapGrid = snapGrid.map(function (val) { 2904 return normalize(val); 2905 }); 2906 var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)]; 2907 var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 2908 2909 if (typeof prevSnap === 'undefined' && params.cssMode) { 2910 snapGrid.forEach(function (snap) { 2911 if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap; 2912 }); 2913 } 2914 2915 var prevIndex; 2916 2917 if (typeof prevSnap !== 'undefined') { 2918 prevIndex = slidesGrid.indexOf(prevSnap); 2919 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 2920 } 2921 2922 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 2923 } 2924 2925 /* eslint no-unused-vars: "off" */ 2926 function slideReset(speed, runCallbacks, internal) { 2927 if (speed === void 0) { 2928 speed = this.params.speed; 2929 } 2930 2931 if (runCallbacks === void 0) { 2932 runCallbacks = true; 2933 } 2934 2935 var swiper = this; 2936 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 2937 } 2938 2939 /* eslint no-unused-vars: "off" */ 2940 function slideToClosest(speed, runCallbacks, internal, threshold) { 2941 if (speed === void 0) { 2942 speed = this.params.speed; 2943 } 2944 2945 if (runCallbacks === void 0) { 2946 runCallbacks = true; 2947 } 2948 2949 if (threshold === void 0) { 2950 threshold = 0.5; 2951 } 2952 2953 var swiper = this; 2954 var index = swiper.activeIndex; 2955 var skip = Math.min(swiper.params.slidesPerGroupSkip, index); 2956 var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 2957 var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 2958 2959 if (translate >= swiper.snapGrid[snapIndex]) { 2960 // The current translate is on or after the current snap index, so the choice 2961 // is between the current index and the one after it. 2962 var currentSnap = swiper.snapGrid[snapIndex]; 2963 var nextSnap = swiper.snapGrid[snapIndex + 1]; 2964 2965 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 2966 index += swiper.params.slidesPerGroup; 2967 } 2968 } else { 2969 // The current translate is before the current snap index, so the choice 2970 // is between the current index and the one before it. 2971 var prevSnap = swiper.snapGrid[snapIndex - 1]; 2972 var _currentSnap = swiper.snapGrid[snapIndex]; 2973 2974 if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) { 2975 index -= swiper.params.slidesPerGroup; 2976 } 2977 } 2978 2979 index = Math.max(index, 0); 2980 index = Math.min(index, swiper.slidesGrid.length - 1); 2981 return swiper.slideTo(index, speed, runCallbacks, internal); 2982 } 2983 2984 function slideToClickedSlide() { 2985 var swiper = this; 2986 var params = swiper.params, 2987 $wrapperEl = swiper.$wrapperEl; 2988 var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 2989 var slideToIndex = swiper.clickedIndex; 2990 var realIndex; 2991 2992 if (params.loop) { 2993 if (swiper.animating) return; 2994 realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); 2995 2996 if (params.centeredSlides) { 2997 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 2998 swiper.loopFix(); 2999 slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index(); 3000 nextTick(function () { 3001 swiper.slideTo(slideToIndex); 3002 }); 3003 } else { 3004 swiper.slideTo(slideToIndex); 3005 } 3006 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 3007 swiper.loopFix(); 3008 slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index(); 3009 nextTick(function () { 3010 swiper.slideTo(slideToIndex); 3011 }); 3012 } else { 3013 swiper.slideTo(slideToIndex); 3014 } 3015 } else { 3016 swiper.slideTo(slideToIndex); 3017 } 3018 } 3019 3020 var slide = { 3021 slideTo: slideTo, 3022 slideToLoop: slideToLoop, 3023 slideNext: slideNext, 3024 slidePrev: slidePrev, 3025 slideReset: slideReset, 3026 slideToClosest: slideToClosest, 3027 slideToClickedSlide: slideToClickedSlide 3028 }; 3029 3030 function loopCreate() { 3031 var swiper = this; 3032 var document = getDocument(); 3033 var params = swiper.params, 3034 $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides 3035 3036 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove(); 3037 var slides = $wrapperEl.children("." + params.slideClass); 3038 3039 if (params.loopFillGroupWithBlank) { 3040 var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup; 3041 3042 if (blankSlidesNum !== params.slidesPerGroup) { 3043 for (var i = 0; i < blankSlidesNum; i += 1) { 3044 var blankNode = $(document.createElement('div')).addClass(params.slideClass + " " + params.slideBlankClass); 3045 $wrapperEl.append(blankNode); 3046 } 3047 3048 slides = $wrapperEl.children("." + params.slideClass); 3049 } 3050 } 3051 3052 if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length; 3053 swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10)); 3054 swiper.loopedSlides += params.loopAdditionalSlides; 3055 3056 if (swiper.loopedSlides > slides.length) { 3057 swiper.loopedSlides = slides.length; 3058 } 3059 3060 var prependSlides = []; 3061 var appendSlides = []; 3062 slides.each(function (el, index) { 3063 var slide = $(el); 3064 3065 if (index < swiper.loopedSlides) { 3066 appendSlides.push(el); 3067 } 3068 3069 if (index < slides.length && index >= slides.length - swiper.loopedSlides) { 3070 prependSlides.push(el); 3071 } 3072 3073 slide.attr('data-swiper-slide-index', index); 3074 }); 3075 3076 for (var _i = 0; _i < appendSlides.length; _i += 1) { 3077 $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass)); 3078 } 3079 3080 for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) { 3081 $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass)); 3082 } 3083 } 3084 3085 function loopFix() { 3086 var swiper = this; 3087 swiper.emit('beforeLoopFix'); 3088 var activeIndex = swiper.activeIndex, 3089 slides = swiper.slides, 3090 loopedSlides = swiper.loopedSlides, 3091 allowSlidePrev = swiper.allowSlidePrev, 3092 allowSlideNext = swiper.allowSlideNext, 3093 snapGrid = swiper.snapGrid, 3094 rtl = swiper.rtlTranslate; 3095 var newIndex; 3096 swiper.allowSlidePrev = true; 3097 swiper.allowSlideNext = true;
3098 var snapTranslate = -snapGrid[activeIndex]; 3099 var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding 3100 3101 if (activeIndex < loopedSlides) { 3102 newIndex = slides.length - loopedSlides * 3 + activeIndex; 3103 newIndex += loopedSlides; 3104 var slideChanged = swiper.slideTo(newIndex, 0, false, true); 3105 3106 if (slideChanged && diff !== 0) { 3107 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 3108 } 3109 } else if (activeIndex >= slides.length - loopedSlides) { 3110 // Fix For Positive Oversliding 3111 newIndex = -slides.length + activeIndex + loopedSlides; 3112 newIndex += loopedSlides; 3113 3114 var _slideChanged = swiper.slideTo(newIndex, 0, false, true); 3115 3116 if (_slideChanged && diff !== 0) { 3117 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 3118 } 3119 } 3120 3121 swiper.allowSlidePrev = allowSlidePrev; 3122 swiper.allowSlideNext = allowSlideNext; 3123 swiper.emit('loopFix'); 3124 } 3125 3126 function loopDestroy() { 3127 var swiper = this; 3128 var $wrapperEl = swiper.$wrapperEl, 3129 params = swiper.params, 3130 slides = swiper.slides; 3131 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove(); 3132 slides.removeAttr('data-swiper-slide-index'); 3133 } 3134 3135 var loop = { 3136 loopCreate: loopCreate, 3137 loopFix: loopFix, 3138 loopDestroy: loopDestroy 3139 }; 3140 3141 function setGrabCursor(moving) { 3142 var swiper = this; 3143 if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 3144 var el = swiper.el; 3145 el.style.cursor = 'move'; 3146 el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; 3147 el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; 3148 el.style.cursor = moving ? 'grabbing' : 'grab'; 3149 } 3150 3151 function unsetGrabCursor() { 3152 var swiper = this; 3153 3154 if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 3155 return; 3156 } 3157 3158 swiper.el.style.cursor = ''; 3159 } 3160 3161 var grabCursor = { 3162 setGrabCursor: setGrabCursor, 3163 unsetGrabCursor: unsetGrabCursor 3164 }; 3165 3166 function appendSlide(slides) { 3167 var swiper = this; 3168 var $wrapperEl = swiper.$wrapperEl, 3169 params = swiper.params; 3170 3171 if (params.loop) { 3172 swiper.loopDestroy(); 3173 } 3174 3175 if (typeof slides === 'object' && 'length' in slides) { 3176 for (var i = 0; i < slides.length; i += 1) { 3177 if (slides[i]) $wrapperEl.append(slides[i]); 3178 } 3179 } else { 3180 $wrapperEl.append(slides); 3181 } 3182 3183 if (params.loop) { 3184 swiper.loopCreate(); 3185 } 3186 3187 if (!(params.observer && swiper.support.observer)) { 3188 swiper.update(); 3189 } 3190 } 3191 3192 function prependSlide(slides) { 3193 var swiper = this; 3194 var params = swiper.params, 3195 $wrapperEl = swiper.$wrapperEl, 3196 activeIndex = swiper.activeIndex; 3197 3198 if (params.loop) { 3199 swiper.loopDestroy(); 3200 } 3201 3202 var newActiveIndex = activeIndex + 1; 3203 3204 if (typeof slides === 'object' && 'length' in slides) { 3205 for (var i = 0; i < slides.length; i += 1) { 3206 if (slides[i]) $wrapperEl.prepend(slides[i]); 3207 } 3208 3209 newActiveIndex = activeIndex + slides.length; 3210 } else { 3211 $wrapperEl.prepend(slides); 3212 } 3213 3214 if (params.loop) { 3215 swiper.loopCreate(); 3216 } 3217 3218 if (!(params.observer && swiper.support.observer)) { 3219 swiper.update(); 3220 } 3221 3222 swiper.slideTo(newActiveIndex, 0, false); 3223 } 3224 3225 function addSlide(index, slides) { 3226 var swiper = this; 3227 var $wrapperEl = swiper.$wrapperEl, 3228 params = swiper.params, 3229 activeIndex = swiper.activeIndex; 3230 var activeIndexBuffer = activeIndex; 3231 3232 if (params.loop) { 3233 activeIndexBuffer -= swiper.loopedSlides; 3234 swiper.loopDestroy(); 3235 swiper.slides = $wrapperEl.children("." + params.slideClass); 3236 } 3237 3238 var baseLength = swiper.slides.length; 3239 3240 if (index <= 0) { 3241 swiper.prependSlide(slides); 3242 return; 3243 } 3244 3245 if (index >= baseLength) { 3246 swiper.appendSlide(slides); 3247 return; 3248 } 3249 3250 var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 3251 var slidesBuffer = []; 3252 3253 for (var i = baseLength - 1; i >= index; i -= 1) { 3254 var currentSlide = swiper.slides.eq(i); 3255 currentSlide.remove(); 3256 slidesBuffer.unshift(currentSlide); 3257 } 3258 3259 if (typeof slides === 'object' && 'length' in slides) { 3260 for (var _i = 0; _i < slides.length; _i += 1) { 3261 if (slides[_i]) $wrapperEl.append(slides[_i]); 3262 } 3263 3264 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 3265 } else { 3266 $wrapperEl.append(slides); 3267 } 3268 3269 for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) { 3270 $wrapperEl.append(slidesBuffer[_i2]); 3271 } 3272 3273 if (params.loop) { 3274 swiper.loopCreate(); 3275 } 3276 3277 if (!(params.observer && swiper.support.observer)) {
3278 swiper.update(); 3279 } 3280 3281 if (params.loop) { 3282 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 3283 } else { 3284 swiper.slideTo(newActiveIndex, 0, false); 3285 } 3286 } 3287 3288 function removeSlide(slidesIndexes) { 3289 var swiper = this; 3290 var params = swiper.params, 3291 $wrapperEl = swiper.$wrapperEl, 3292 activeIndex = swiper.activeIndex; 3293 var activeIndexBuffer = activeIndex; 3294 3295 if (params.loop) { 3296 activeIndexBuffer -= swiper.loopedSlides; 3297 swiper.loopDestroy(); 3298 swiper.slides = $wrapperEl.children("." + params.slideClass); 3299 } 3300 3301 var newActiveIndex = activeIndexBuffer; 3302 var indexToRemove; 3303 3304 if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { 3305 for (var i = 0; i < slidesIndexes.length; i += 1) { 3306 indexToRemove = slidesIndexes[i]; 3307 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 3308 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 3309 } 3310 3311 newActiveIndex = Math.max(newActiveIndex, 0); 3312 } else { 3313 indexToRemove = slidesIndexes; 3314 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 3315 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 3316 newActiveIndex = Math.max(newActiveIndex, 0); 3317 } 3318 3319 if (params.loop) { 3320 swiper.loopCreate(); 3321 } 3322 3323 if (!(params.observer && swiper.support.observer)) { 3324 swiper.update(); 3325 } 3326 3327 if (params.loop) { 3328 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 3329 } else { 3330 swiper.slideTo(newActiveIndex, 0, false); 3331 } 3332 } 3333 3334 function removeAllSlides() { 3335 var swiper = this; 3336 var slidesIndexes = []; 3337 3338 for (var i = 0; i < swiper.slides.length; i += 1) { 3339 slidesIndexes.push(i); 3340 } 3341 3342 swiper.removeSlide(slidesIndexes); 3343 } 3344 3345 var manipulation = { 3346 appendSlide: appendSlide, 3347 prependSlide: prependSlide, 3348 addSlide: addSlide, 3349 removeSlide: removeSlide, 3350 removeAllSlides: removeAllSlides 3351 }; 3352 3353 function onTouchStart(event) { 3354 var swiper = this; 3355 var document = getDocument(); 3356 var window = getWindow(); 3357 var data = swiper.touchEventsData; 3358 var params = swiper.params, 3359 touches = swiper.touches; 3360 3361 if (swiper.animating && params.preventInteractionOnTransition) { 3362 return; 3363 } 3364 3365 var e = event; 3366 if (e.originalEvent) e = e.originalEvent; 3367 var $targetEl = $(e.target); 3368 3369 if (params.touchEventsTarget === 'wrapper') { 3370 if (!$targetEl.closest(swiper.wrapperEl).length) return; 3371 } 3372 3373 data.isTouchEvent = e.type === 'touchstart'; 3374 if (!data.isTouchEvent && 'which' in e && e.which === 3) return; 3375 if (!data.isTouchEvent && 'button' in e && e.button > 0) return; 3376 if (data.isTouched && data.isMoved) return; 3377 3378 if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) { 3379 swiper.allowClick = true; 3380 return; 3381 } 3382 3383 if (params.swipeHandler) { 3384 if (!$targetEl.closest(params.swipeHandler)[0]) return; 3385 } 3386 3387 touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 3388 touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 3389 var startX = touches.currentX; 3390 var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 3391 3392 var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; 3393 var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; 3394 3395 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.screen.width - edgeSwipeThreshold)) { 3396 return; 3397 } 3398 3399 extend$1(data, { 3400 isTouched: true, 3401 isMoved: false, 3402 allowTouchCallbacks: true, 3403 isScrolling: undefined, 3404 startMoving: undefined 3405 }); 3406 touches.startX = startX; 3407 touches.startY = startY; 3408 data.touchStartTime = now(); 3409 swiper.allowClick = true; 3410 swiper.updateSize(); 3411 swiper.swipeDirection = undefined; 3412 if (params.threshold > 0) data.allowThresholdMove = false;
vendor: 5,294 bytes, lines 3413-3590
3413 3414 if (e.type !== 'touchstart') { 3415 var preventDefault = true; 3416 if ($targetEl.is(data.formElements)) preventDefault = false; 3417 3418 if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) { 3419 document.activeElement.blur(); 3420 } 3421 3422 var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 3423 3424 if (params.touchStartForcePreventDefault || shouldPreventDefault) { 3425 e.preventDefault(); 3426 } 3427 } 3428 3429 swiper.emit('touchStart', e); 3430 } 3431 3432 function onTouchMove(event) { 3433 var document = getDocument(); 3434 var swiper = this; 3435 var data = swiper.touchEventsData; 3436 var params = swiper.params, 3437 touches = swiper.touches, 3438 rtl = swiper.rtlTranslate; 3439 var e = event; 3440 if (e.originalEvent) e = e.originalEvent; 3441 3442 if (!data.isTouched) { 3443 if (data.startMoving && data.isScrolling) { 3444 swiper.emit('touchMoveOpposite', e); 3445 } 3446 3447 return; 3448 } 3449 3450 if (data.isTouchEvent && e.type !== 'touchmove') return; 3451 var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]); 3452 var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX; 3453 var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY; 3454 3455 if (e.preventedByNestedSwiper) { 3456 touches.startX = pageX; 3457 touches.startY = pageY; 3458 return; 3459 } 3460 3461 if (!swiper.allowTouchMove) { 3462 // isMoved = true; 3463 swiper.allowClick = false; 3464 3465 if (data.isTouched) { 3466 extend$1(touches, { 3467 startX: pageX, 3468 startY: pageY, 3469 currentX: pageX, 3470 currentY: pageY 3471 }); 3472 data.touchStartTime = now(); 3473 } 3474 3475 return; 3476 } 3477 3478 if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { 3479 if (swiper.isVertical()) { 3480 // Vertical 3481 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 3482 data.isTouched = false; 3483 data.isMoved = false; 3484 return; 3485 } 3486 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 3487 return; 3488 } 3489 } 3490 3491 if (data.isTouchEvent && document.activeElement) { 3492 if (e.target === document.activeElement && $(e.target).is(data.formElements)) { 3493 data.isMoved = true; 3494 swiper.allowClick = false; 3495 return; 3496 } 3497 } 3498 3499 if (data.allowTouchCallbacks) { 3500 swiper.emit('touchMove', e); 3501 } 3502 3503 if (e.targetTouches && e.targetTouches.length > 1) return; 3504 touches.currentX = pageX; 3505 touches.currentY = pageY; 3506 var diffX = touches.currentX - touches.startX; 3507 var diffY = touches.currentY - touches.startY; 3508 if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return; 3509 3510 if (typeof data.isScrolling === 'undefined') { 3511 var touchAngle; 3512 3513 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 3514 data.isScrolling = false; 3515 } else { 3516 // eslint-disable-next-line 3517 if (diffX * diffX + diffY * diffY >= 25) { 3518 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 3519 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 3520 } 3521 } 3522 } 3523 3524 if (data.isScrolling) { 3525 swiper.emit('touchMoveOpposite', e); 3526 } 3527 3528 if (typeof data.startMoving === 'undefined') { 3529 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 3530 data.startMoving = true; 3531 } 3532 } 3533 3534 if (data.isScrolling) { 3535 data.isTouched = false; 3536 return; 3537 } 3538 3539 if (!data.startMoving) { 3540 return; 3541 } 3542 3543 swiper.allowClick = false; 3544 3545 if (!params.cssMode && e.cancelable) { 3546 e.preventDefault(); 3547 } 3548 3549 if (params.touchMoveStopPropagation && !params.nested) { 3550 e.stopPropagation(); 3551 } 3552 3553 if (!data.isMoved) { 3554 if (params.loop) { 3555 swiper.loopFix(); 3556 } 3557 3558 data.startTranslate = swiper.getTranslate(); 3559 swiper.setTransition(0); 3560 3561 if (swiper.animating) { 3562 swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); 3563 } 3564 3565 data.allowMomentumBounce = false; // Grab Cursor 3566 3567 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 3568 swiper.setGrabCursor(true); 3569 } 3570 3571 swiper.emit('sliderFirstMove', e); 3572 } 3573 3574 swiper.emit('sliderMove', e); 3575 data.isMoved = true; 3576 var diff = swiper.isHorizontal() ? diffX : diffY; 3577 touches.diff = diff; 3578 diff *= params.touchRatio; 3579 if (rtl) diff = -diff; 3580 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 3581 data.currentTranslate = diff + data.startTranslate; 3582 var disableParentSwiper = true; 3583 var resistanceRatio = params.resistanceRatio; 3584 3585 if (params.touchReleaseOnEdges) { 3586 resistanceRatio = 0; 3587 } 3588 3589 if (diff > 0 && data.currentTranslate > swiper.minTranslate()) { 3590 disableParentSwiper = false;
3591 if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio); 3592 } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { 3593 disableParentSwiper = false; 3594 if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio); 3595 } 3596 3597 if (disableParentSwiper) { 3598 e.preventedByNestedSwiper = true; 3599 } // Directions locks 3600 3601 3602 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 3603 data.currentTranslate = data.startTranslate; 3604 } 3605 3606 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 3607 data.currentTranslate = data.startTranslate; 3608 } // Threshold 3609 3610 3611 if (params.threshold > 0) { 3612 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 3613 if (!data.allowThresholdMove) { 3614 data.allowThresholdMove = true; 3615 touches.startX = touches.currentX; 3616 touches.startY = touches.currentY; 3617 data.currentTranslate = data.startTranslate; 3618 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 3619 return; 3620 } 3621 } else { 3622 data.currentTranslate = data.startTranslate; 3623 return; 3624 } 3625 } 3626 3627 if (!params.followFinger || params.cssMode) return; // Update active index in free mode 3628 3629 if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) { 3630 swiper.updateActiveIndex(); 3631 swiper.updateSlidesClasses(); 3632 } 3633 3634 if (params.freeMode) { 3635 // Velocity 3636 if (data.velocities.length === 0) { 3637 data.velocities.push({ 3638 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 3639 time: data.touchStartTime 3640 }); 3641 } 3642 3643 data.velocities.push({ 3644 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 3645 time: now() 3646 }); 3647 } // Update progress 3648 3649 3650 swiper.updateProgress(data.currentTranslate); // Update translate 3651 3652 swiper.setTranslate(data.currentTranslate); 3653 } 3654 3655 function onTouchEnd(event) { 3656 var swiper = this; 3657 var data = swiper.touchEventsData; 3658 var params = swiper.params, 3659 touches = swiper.touches, 3660 rtl = swiper.rtlTranslate, 3661 $wrapperEl = swiper.$wrapperEl, 3662 slidesGrid = swiper.slidesGrid, 3663 snapGrid = swiper.snapGrid; 3664 var e = event; 3665 if (e.originalEvent) e = e.originalEvent; 3666 3667 if (data.allowTouchCallbacks) { 3668 swiper.emit('touchEnd', e); 3669 } 3670 3671 data.allowTouchCallbacks = false; 3672 3673 if (!data.isTouched) { 3674 if (data.isMoved && params.grabCursor) { 3675 swiper.setGrabCursor(false); 3676 } 3677 3678 data.isMoved = false; 3679 data.startMoving = false; 3680 return; 3681 } // Return Grab Cursor 3682 3683 3684 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 3685 swiper.setGrabCursor(false); 3686 } // Time diff 3687 3688 3689 var touchEndTime = now(); 3690 var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click 3691 3692 if (swiper.allowClick) { 3693 swiper.updateClickedSlide(e); 3694 swiper.emit('tap click', e); 3695 3696 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 3697 swiper.emit('doubleTap doubleClick', e); 3698 } 3699 } 3700 3701 data.lastClickTime = now(); 3702 nextTick(function () { 3703 if (!swiper.destroyed) swiper.allowClick = true; 3704 }); 3705 3706 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { 3707 data.isTouched = false; 3708 data.isMoved = false; 3709 data.startMoving = false; 3710 return; 3711 } 3712 3713 data.isTouched = false; 3714 data.isMoved = false; 3715 data.startMoving = false; 3716 var currentPos; 3717 3718 if (params.followFinger) { 3719 currentPos = rtl ? swiper.translate : -swiper.translate; 3720 } else { 3721 currentPos = -data.currentTranslate; 3722 } 3723 3724 if (params.cssMode) { 3725 return; 3726 } 3727 3728 if (params.freeMode) {
3729 if (currentPos < -swiper.minTranslate()) { 3730 swiper.slideTo(swiper.activeIndex); 3731 return; 3732 } 3733 3734 if (currentPos > -swiper.maxTranslate()) { 3735 if (swiper.slides.length < snapGrid.length) { 3736 swiper.slideTo(snapGrid.length - 1); 3737 } else { 3738 swiper.slideTo(swiper.slides.length - 1); 3739 } 3740 3741 return; 3742 } 3743 3744 if (params.freeModeMomentum) { 3745 if (data.velocities.length > 1) { 3746 var lastMoveEvent = data.velocities.pop(); 3747 var velocityEvent = data.velocities.pop(); 3748 var distance = lastMoveEvent.position - velocityEvent.position; 3749 var time = lastMoveEvent.time - velocityEvent.time; 3750 swiper.velocity = distance / time; 3751 swiper.velocity /= 2; 3752 3753 if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) { 3754 swiper.velocity = 0; 3755 } // this implies that the user stopped moving a finger then released. 3756 // There would be no events with distance zero, so the last event is stale. 3757 3758 3759 if (time > 150 || now() - lastMoveEvent.time > 300) { 3760 swiper.velocity = 0; 3761 } 3762 } else { 3763 swiper.velocity = 0; 3764 } 3765 3766 swiper.velocity *= params.freeModeMomentumVelocityRatio; 3767 data.velocities.length = 0; 3768 var momentumDuration = 1000 * params.freeModeMomentumRatio; 3769 var momentumDistance = swiper.velocity * momentumDuration; 3770 var newPosition = swiper.translate + momentumDistance; 3771 if (rtl) newPosition = -newPosition; 3772 var doBounce = false; 3773 var afterBouncePosition; 3774 var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio; 3775 var needsLoopFix; 3776 3777 if (newPosition < swiper.maxTranslate()) { 3778 if (params.freeModeMomentumBounce) { 3779 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 3780 newPosition = swiper.maxTranslate() - bounceAmount; 3781 } 3782 3783 afterBouncePosition = swiper.maxTranslate(); 3784 doBounce = true; 3785 data.allowMomentumBounce = true; 3786 } else { 3787 newPosition = swiper.maxTranslate(); 3788 } 3789 3790 if (params.loop && params.centeredSlides) needsLoopFix = true; 3791 } else if (newPosition > swiper.minTranslate()) { 3792 if (params.freeModeMomentumBounce) { 3793 if (newPosition - swiper.minTranslate() > bounceAmount) { 3794 newPosition = swiper.minTranslate() + bounceAmount; 3795 } 3796 3797 afterBouncePosition = swiper.minTranslate(); 3798 doBounce = true; 3799 data.allowMomentumBounce = true; 3800 } else { 3801 newPosition = swiper.minTranslate(); 3802 } 3803 3804 if (params.loop && params.centeredSlides) needsLoopFix = true; 3805 } else if (params.freeModeSticky) { 3806 var nextSlide; 3807 3808 for (var j = 0; j < snapGrid.length; j += 1) { 3809 if (snapGrid[j] > -newPosition) { 3810 nextSlide = j; 3811 break; 3812 } 3813 } 3814 3815 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 3816 newPosition = snapGrid[nextSlide]; 3817 } else { 3818 newPosition = snapGrid[nextSlide - 1]; 3819 } 3820 3821 newPosition = -newPosition; 3822 } 3823 3824 if (needsLoopFix) { 3825 swiper.once('transitionEnd', function () { 3826 swiper.loopFix(); 3827 }); 3828 } // Fix duration 3829 3830 3831 if (swiper.velocity !== 0) { 3832 if (rtl) { 3833 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 3834 } else { 3835 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 3836 } 3837 3838 if (params.freeModeSticky) { 3839 // If freeModeSticky is active and the user ends a swipe with a slow-velocity 3840 // event, then durations can be 20+ seconds to slide one (or zero!) slides. 3841 // It's easy to see this when simulating touch with mouse events. To fix this, 3842 // limit single-slide swipes to the default slide duration. This also has the 3843 // nice side effect of matching slide speed if the user stopped moving before 3844 // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. 3845 // For faster swipes, also apply limits (albeit higher ones). 3846 var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 3847 var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 3848 3849 if (moveDistance < currentSlideSize) { 3850 momentumDuration = params.speed; 3851 } else if (moveDistance < 2 * currentSlideSize) { 3852 momentumDuration = params.speed * 1.5; 3853 } else { 3854 momentumDuration = params.speed * 2.5; 3855 } 3856 } 3857 } else if (params.freeModeSticky) { 3858 swiper.slideToClosest(); 3859 return; 3860 } 3861 3862 if (params.freeModeMomentumBounce && doBounce) { 3863 swiper.updateProgress(afterBouncePosition); 3864 swiper.setTransition(momentumDuration); 3865 swiper.setTranslate(newPosition); 3866 swiper.transitionStart(true, swiper.swipeDirection); 3867 swiper.animating = true; 3868 $wrapperEl.transitionEnd(function () { 3869 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 3870 swiper.emit('momentumBounce'); 3871 swiper.setTransition(params.speed); 3872 setTimeout(function () { 3873 swiper.setTranslate(afterBouncePosition); 3874 $wrapperEl.transitionEnd(function () { 3875 if (!swiper || swiper.destroyed) return; 3876 swiper.transitionEnd(); 3877 }); 3878 }, 0); 3879 }); 3880 } else if (swiper.velocity) { 3881 swiper.updateProgress(newPosition); 3882 swiper.setTransition(momentumDuration); 3883 swiper.setTranslate(newPosition); 3884 swiper.transitionStart(true, swiper.swipeDirection); 3885 3886 if (!swiper.animating) { 3887 swiper.animating = true; 3888 $wrapperEl.transitionEnd(function () { 3889 if (!swiper || swiper.destroyed) return; 3890 swiper.transitionEnd(); 3891 }); 3892 } 3893 } else { 3894 swiper.updateProgress(newPosition); 3895 } 3896 3897 swiper.updateActiveIndex(); 3898 swiper.updateSlidesClasses(); 3899 } else if (params.freeModeSticky) { 3900 swiper.slideToClosest(); 3901 return; 3902 } 3903 3904 if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) { 3905 swiper.updateProgress(); 3906 swiper.updateActiveIndex(); 3907 swiper.updateSlidesClasses(); 3908 } 3909 3910 return; 3911 } // Find current slide 3912 3913 3914 var stopIndex = 0; 3915 var groupSize = swiper.slidesSizesGrid[0]; 3916 3917 for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 3918 var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 3919 3920 if (typeof slidesGrid[i + _increment] !== 'undefined') { 3921 if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) { 3922 stopIndex = i; 3923 groupSize = slidesGrid[i + _increment] - slidesGrid[i]; 3924 } 3925 } else if (currentPos >= slidesGrid[i]) { 3926 stopIndex = i; 3927 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 3928 } 3929 } // Find current slide size 3930 3931 3932 var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 3933 var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 3934 3935 if (timeDiff > params.longSwipesMs) { 3936 // Long touches 3937 if (!params.longSwipes) { 3938 swiper.slideTo(swiper.activeIndex); 3939 return; 3940 } 3941 3942 if (swiper.swipeDirection === 'next') { 3943 if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); 3944 } 3945 3946 if (swiper.swipeDirection === 'prev') { 3947 if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); 3948 } 3949 } else { 3950 // Short swipes 3951 if (!params.shortSwipes) { 3952 swiper.slideTo(swiper.activeIndex); 3953 return; 3954 } 3955 3956 var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 3957 3958 if (!isNavButtonTarget) { 3959 if (swiper.swipeDirection === 'next') { 3960 swiper.slideTo(stopIndex + increment); 3961 } 3962 3963 if (swiper.swipeDirection === 'prev') { 3964 swiper.slideTo(stopIndex); 3965 } 3966 } else if (e.target === swiper.navigation.nextEl) { 3967 swiper.slideTo(stopIndex + increment); 3968 } else { 3969 swiper.slideTo(stopIndex); 3970 } 3971 } 3972 } 3973 3974 function onResize() { 3975 var swiper = this; 3976 var params = swiper.params, 3977 el = swiper.el; 3978 if (el && el.offsetWidth === 0) return;
3978 // Breakpoints 3979 3980 if (params.breakpoints) { 3981 swiper.setBreakpoint(); 3982 } // Save locks 3983 3984 3985 var allowSlideNext = swiper.allowSlideNext, 3986 allowSlidePrev = swiper.allowSlidePrev, 3987 snapGrid = swiper.snapGrid; // Disable locks on resize 3988 3989 swiper.allowSlideNext = true; 3990 swiper.allowSlidePrev = true; 3991 swiper.updateSize(); 3992 swiper.updateSlides(); 3993 swiper.updateSlidesClasses(); 3994 3995 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) { 3996 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 3997 } else { 3998 swiper.slideTo(swiper.activeIndex, 0, false, true); 3999 } 4000 4001 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 4002 swiper.autoplay.run(); 4003 } // Return locks after resize 4004 4005 4006 swiper.allowSlidePrev = allowSlidePrev; 4007 swiper.allowSlideNext = allowSlideNext; 4008 4009 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 4010 swiper.checkOverflow(); 4011 } 4012 } 4013 4014 function onClick(e) { 4015 var swiper = this; 4016 4017 if (!swiper.allowClick) { 4018 if (swiper.params.preventClicks) e.preventDefault(); 4019 4020 if (swiper.params.preventClicksPropagation && swiper.animating) { 4021 e.stopPropagation(); 4022 e.stopImmediatePropagation(); 4023 } 4024 } 4025 } 4026 4027 function onScroll() { 4028 var swiper = this; 4029 var wrapperEl = swiper.wrapperEl, 4030 rtlTranslate = swiper.rtlTranslate; 4031 swiper.previousTranslate = swiper.translate; 4032 4033 if (swiper.isHorizontal()) { 4034 if (rtlTranslate) { 4035 swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft; 4036 } else { 4037 swiper.translate = -wrapperEl.scrollLeft; 4038 } 4039 } else { 4040 swiper.translate = -wrapperEl.scrollTop; 4041 } // eslint-disable-next-line 4042 4043 4044 if (swiper.translate === -0) swiper.translate = 0; 4045 swiper.updateActiveIndex(); 4046 swiper.updateSlidesClasses(); 4047 var newProgress; 4048 var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 4049 4050 if (translatesDiff === 0) { 4051 newProgress = 0; 4052 } else { 4053 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 4054 } 4055 4056 if (newProgress !== swiper.progress) { 4057 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 4058 } 4059 4060 swiper.emit('setTranslate', swiper.translate, false); 4061 } 4062 4063 var dummyEventAttached = false; 4064 4065 function dummyEventListener() {} 4066 4067 function attachEvents() { 4068 var swiper = this; 4069 var document = getDocument(); 4070 var params = swiper.params, 4071 touchEvents = swiper.touchEvents, 4072 el = swiper.el, 4073 wrapperEl = swiper.wrapperEl, 4074 device = swiper.device, 4075 support = swiper.support; 4076 swiper.onTouchStart = onTouchStart.bind(swiper); 4077 swiper.onTouchMove = onTouchMove.bind(swiper); 4078 swiper.onTouchEnd = onTouchEnd.bind(swiper); 4079 4080 if (params.cssMode) { 4081 swiper.onScroll = onScroll.bind(swiper); 4082 } 4083 4084 swiper.onClick = onClick.bind(swiper); 4085 var capture = !!params.nested; // Touch Events 4086 4087 if (!support.touch && support.pointerEvents) { 4088 el.addEventListener(touchEvents.start, swiper.onTouchStart, false); 4089 document.addEventListener(touchEvents.move, swiper.onTouchMove, capture); 4090 document.addEventListener(touchEvents.end, swiper.onTouchEnd, false); 4091 } else { 4092 if (support.touch) { 4093 var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? { 4094 passive: true, 4095 capture: false 4096 } : false; 4097 el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); 4098 el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? { 4099 passive: false, 4100 capture: capture 4101 } : capture); 4102 el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); 4103 4104 if (touchEvents.cancel) { 4105 el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); 4106 } 4107 4108 if (!dummyEventAttached) { 4109 document.addEventListener('touchstart', dummyEventListener); 4110 dummyEventAttached = true; 4111 } 4112 } 4113 4114 if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) { 4115 el.addEventListener('mousedown', swiper.onTouchStart, false); 4116 document.addEventListener('mousemove', swiper.onTouchMove, capture); 4117 document.addEventListener('mouseup', swiper.onTouchEnd, false); 4118 } 4119 } // Prevent Links Clicks 4120 4121 4122 if (params.preventClicks || params.preventClicksPropagation) { 4123 el.addEventListener('click', swiper.onClick, true); 4124 } 4125 4126 if (params.cssMode) { 4127 wrapperEl.addEventListener('scroll', swiper.onScroll); 4128 } // Resize handler 4129 4130 4131 if (params.updateOnWindowResize) { 4132 swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); 4133 } else { 4134 swiper.on('observerUpdate', onResize, true); 4135 } 4136 } 4137 4138 function detachEvents() { 4139 var swiper = this; 4140 var document = getDocument(); 4141 var params = swiper.params, 4142 touchEvents = swiper.touchEvents, 4143 el = swiper.el, 4144 wrapperEl = swiper.wrapperEl, 4145 device = swiper.device, 4146 support = swiper.support; 4147 var capture = !!params.nested; // Touch Events 4148 4149 if (!support.touch && support.pointerEvents) { 4150 el.removeEventListener(touchEvents.start, swiper.onTouchStart, false); 4151 document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); 4152 document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false); 4153 } else { 4154 if (support.touch) { 4155 var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? { 4156 passive: true, 4157 capture: false 4158 } : false;
4159 el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); 4160 el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); 4161 el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); 4162 4163 if (touchEvents.cancel) { 4164 el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); 4165 } 4166 } 4167 4168 if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) { 4169 el.removeEventListener('mousedown', swiper.onTouchStart, false); 4170 document.removeEventListener('mousemove', swiper.onTouchMove, capture); 4171 document.removeEventListener('mouseup', swiper.onTouchEnd, false); 4172 } 4173 } // Prevent Links Clicks 4174 4175 4176 if (params.preventClicks || params.preventClicksPropagation) { 4177 el.removeEventListener('click', swiper.onClick, true); 4178 } 4179 4180 if (params.cssMode) { 4181 wrapperEl.removeEventListener('scroll', swiper.onScroll); 4182 } // Resize handler 4183 4184 4185 swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize); 4186 } 4187 4188 var events = { 4189 attachEvents: attachEvents, 4190 detachEvents: detachEvents 4191 }; 4192 4193 function setBreakpoint() { 4194 var swiper = this; 4195 var activeIndex = swiper.activeIndex, 4196 initialized = swiper.initialized, 4197 _swiper$loopedSlides = swiper.loopedSlides, 4198 loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides, 4199 params = swiper.params, 4200 $el = swiper.$el; 4201 var breakpoints = params.breakpoints; 4202 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters 4203 4204 var breakpoint = swiper.getBreakpoint(breakpoints); 4205 4206 if (breakpoint && swiper.currentBreakpoint !== breakpoint) { 4207 var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 4208 4209 if (breakpointOnlyParams) { 4210 ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) { 4211 var paramValue = breakpointOnlyParams[param]; 4212 if (typeof paramValue === 'undefined') return; 4213 4214 if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) { 4215 breakpointOnlyParams[param] = 'auto'; 4216 } else if (param === 'slidesPerView') { 4217 breakpointOnlyParams[param] = parseFloat(paramValue); 4218 } else { 4219 breakpointOnlyParams[param] = parseInt(paramValue, 10); 4220 } 4221 }); 4222 } 4223 4224 var breakpointParams = breakpointOnlyParams || swiper.originalParams; 4225 var wasMultiRow = params.slidesPerColumn > 1; 4226 var isMultiRow = breakpointParams.slidesPerColumn > 1; 4227 4228 if (wasMultiRow && !isMultiRow) { 4229 $el.removeClass(params.containerModifierClass + "multirow " + params.containerModifierClass + "multirow-column"); 4230 swiper.emitContainerClasses(); 4231 } else if (!wasMultiRow && isMultiRow) { 4232 $el.addClass(params.containerModifierClass + "multirow"); 4233 4234 if (breakpointParams.slidesPerColumnFill === 'column') { 4235 $el.addClass(params.containerModifierClass + "multirow-column"); 4236 } 4237 4238 swiper.emitContainerClasses(); 4239 } 4240 4241 var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 4242 var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 4243 4244 if (directionChanged && initialized) { 4245 swiper.changeDirection(); 4246 } 4247 4248 extend$1(swiper.params, breakpointParams); 4249 extend$1(swiper, { 4250 allowTouchMove: swiper.params.allowTouchMove, 4251 allowSlideNext: swiper.params.allowSlideNext, 4252 allowSlidePrev: swiper.params.allowSlidePrev 4253 }); 4254 swiper.currentBreakpoint = breakpoint; 4255 4256 if (needsReLoop && initialized) { 4257 swiper.loopDestroy(); 4258 swiper.loopCreate(); 4259 swiper.updateSlides(); 4260 swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false); 4261 } 4262 4263 swiper.emit('breakpoint', breakpointParams); 4264 } 4265 } 4266
4267 function getBreakpoints(breakpoints) { 4268 var window = getWindow(); // Get breakpoint for window width 4269 4270 if (!breakpoints) return undefined; 4271 var breakpoint = false; 4272 var points = Object.keys(breakpoints).map(function (point) { 4273 if (typeof point === 'string' && point.indexOf('@') === 0) { 4274 var minRatio = parseFloat(point.substr(1)); 4275 var value = window.innerHeight * minRatio; 4276 return { 4277 value: value, 4278 point: point 4279 }; 4280 } 4281 4282 return { 4283 value: point, 4284 point: point 4285 }; 4286 }); 4287 points.sort(function (a, b) { 4288 return parseInt(a.value, 10) - parseInt(b.value, 10); 4289 }); 4290 4291 for (var i = 0; i < points.length; i += 1) { 4292 var _points$i = points[i], 4293 point = _points$i.point, 4294 value = _points$i.value; 4295 4296 if (value <= window.innerWidth) { 4297 breakpoint = point; 4298 } 4299 } 4300 4301 return breakpoint || 'max'; 4302 } 4303 4304 var breakpoints = { 4305 setBreakpoint: setBreakpoint, 4306 getBreakpoint: getBreakpoints 4307 }; 4308 4309 function addClasses() { 4310 var swiper = this; 4311 var classNames = swiper.classNames, 4312 params = swiper.params, 4313 rtl = swiper.rtl, 4314 $el = swiper.$el, 4315 device = swiper.device; 4316 var suffixes = []; 4317 suffixes.push('initialized'); 4318 suffixes.push(params.direction); 4319 4320 if (params.freeMode) { 4321 suffixes.push('free-mode'); 4322 } 4323 4324 if (params.autoHeight) { 4325 suffixes.push('autoheight'); 4326 } 4327 4328 if (rtl) { 4329 suffixes.push('rtl'); 4330 } 4331 4332 if (params.slidesPerColumn > 1) { 4333 suffixes.push('multirow'); 4334 4335 if (params.slidesPerColumnFill === 'column') { 4336 suffixes.push('multirow-column'); 4337 } 4338 } 4339 4340 if (device.android) { 4341 suffixes.push('android'); 4342 } 4343 4344 if (device.ios) { 4345 suffixes.push('ios'); 4346 } 4347 4348 if (params.cssMode) { 4349 suffixes.push('css-mode'); 4350 } 4351 4352 suffixes.forEach(function (suffix) { 4353 classNames.push(params.containerModifierClass + suffix); 4354 }); 4355 $el.addClass(classNames.join(' ')); 4356 swiper.emitContainerClasses(); 4357 } 4358 4359 function removeClasses() { 4360 var swiper = this; 4361 var $el = swiper.$el, 4362 classNames = swiper.classNames; 4363 $el.removeClass(classNames.join(' ')); 4364 swiper.emitContainerClasses(); 4365 } 4366 4367 var classes = { 4368 addClasses: addClasses, 4369 removeClasses: removeClasses 4370 }; 4371 4372 function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) { 4373 var window = getWindow(); 4374 var image; 4375 4376 function onReady() { 4377 if (callback) callback(); 4378 } 4379 4380 var isPicture = $(imageEl).parent('picture')[0]; 4381 4382 if (!isPicture && (!imageEl.complete || !checkForComplete)) { 4383 if (src) { 4384 image = new window.Image(); 4385 image.onload = onReady; 4386 image.onerror = onReady; 4387 4388 if (sizes) { 4389 image.sizes = sizes; 4390 } 4391 4392 if (srcset) { 4393 image.srcset = srcset; 4394 } 4395 4396 if (src) { 4397 image.src = src; 4398 } 4399 } else { 4400 onReady(); 4401 } 4402 } else { 4403 // image already loaded... 4404 onReady(); 4405 } 4406 } 4407 4408 function preloadImages() { 4409 var swiper = this; 4410 swiper.imagesToLoad = swiper.$el.find('img'); 4411 4412 function onReady() { 4413 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return; 4414 if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1; 4415 4416 if (swiper.imagesLoaded === swiper.imagesToLoad.length) { 4417 if (swiper.params.updateOnImagesReady) swiper.update(); 4418 swiper.emit('imagesReady'); 4419 } 4420 } 4421 4422 for (var i = 0; i < swiper.imagesToLoad.length; i += 1) { 4423 var imageEl = swiper.imagesToLoad[i]; 4424 swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady); 4425 } 4426 } 4427 4428 var images = { 4429 loadImage: loadImage, 4430 preloadImages: preloadImages 4431 }; 4432 4433 function checkOverflow() { 4434 var swiper = this; 4435 var params = swiper.params; 4436 var wasLocked = swiper.isLocked; 4437 var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length; 4438 4439 if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
vendor: 1,521 bytes, lines 4440-4496
4440 swiper.isLocked = lastSlidePosition <= swiper.size; 4441 } else { 4442 swiper.isLocked = swiper.snapGrid.length === 1; 4443 } 4444 4445 swiper.allowSlideNext = !swiper.isLocked; 4446 swiper.allowSlidePrev = !swiper.isLocked; // events 4447 4448 if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 4449 4450 if (wasLocked && wasLocked !== swiper.isLocked) { 4451 swiper.isEnd = false; 4452 if (swiper.navigation) swiper.navigation.update(); 4453 } 4454 } 4455 4456 var checkOverflow$1 = { 4457 checkOverflow: checkOverflow 4458 }; 4459 4460 var defaults = { 4461 init: true, 4462 direction: 'horizontal', 4463 touchEventsTarget: 'container', 4464 initialSlide: 0, 4465 speed: 300, 4466 cssMode: false, 4467 updateOnWindowResize: true, 4468 // Overrides 4469 width: null, 4470 height: null, 4471 // 4472 preventInteractionOnTransition: false, 4473 // ssr 4474 userAgent: null, 4475 url: null, 4476 // To support iOS's swipe-to-go-back gesture (when being used in-app). 4477 edgeSwipeDetection: false, 4478 edgeSwipeThreshold: 20, 4479 // Free mode 4480 freeMode: false, 4481 freeModeMomentum: true, 4482 freeModeMomentumRatio: 1, 4483 freeModeMomentumBounce: true, 4484 freeModeMomentumBounceRatio: 1, 4485 freeModeMomentumVelocityRatio: 1, 4486 freeModeSticky: false, 4487 freeModeMinimumVelocity: 0.02, 4488 // Autoheight 4489 autoHeight: false, 4490 // Set wrapper width 4491 setWrapperSize: false, 4492 // Virtual Translate 4493 virtualTranslate: false, 4494 // Effects 4495 effect: 'slide', 4496 // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
4497 // Breakpoints 4498 breakpoints: undefined, 4499 // Slides grid 4500 spaceBetween: 0, 4501 slidesPerView: 1, 4502 slidesPerColumn: 1, 4503 slidesPerColumnFill: 'column', 4504 slidesPerGroup: 1, 4505 slidesPerGroupSkip: 0, 4506 centeredSlides: false, 4507 centeredSlidesBounds: false, 4508 slidesOffsetBefore: 0, 4509 // in px 4510 slidesOffsetAfter: 0, 4511 // in px 4512 normalizeSlideIndex: true, 4513 centerInsufficientSlides: false, 4514 // Disable swiper and hide navigation when container not overflow 4515 watchOverflow: false, 4516 // Round length 4517 roundLengths: false, 4518 // Touches 4519 touchRatio: 1, 4520 touchAngle: 45, 4521 simulateTouch: true, 4522 shortSwipes: true, 4523 longSwipes: true, 4524 longSwipesRatio: 0.5, 4525 longSwipesMs: 300, 4526 followFinger: true, 4527 allowTouchMove: true, 4528 threshold: 0, 4529 touchMoveStopPropagation: false, 4530 touchStartPreventDefault: true, 4531 touchStartForcePreventDefault: false, 4532 touchReleaseOnEdges: false, 4533 // Unique Navigation Elements 4534 uniqueNavElements: true, 4535 // Resistance 4536 resistance: true, 4537 resistanceRatio: 0.85, 4538 // Progress 4539 watchSlidesProgress: false, 4540 watchSlidesVisibility: false, 4541 // Cursor 4542 grabCursor: false, 4543 // Clicks 4544 preventClicks: true, 4545 preventClicksPropagation: true, 4546 slideToClickedSlide: false, 4547 // Images 4548 preloadImages: true, 4549 updateOnImagesReady: true, 4550 // loop 4551 loop: false, 4552 loopAdditionalSlides: 0, 4553 loopedSlides: null, 4554 loopFillGroupWithBlank: false, 4555 loopPreventsSlide: true, 4556 // Swiping/no swiping 4557 allowSlidePrev: true, 4558 allowSlideNext: true, 4559 swipeHandler: null, 4560 // '.swipe-handler', 4561 noSwiping: true, 4562 noSwipingClass: 'swiper-no-swiping', 4563 noSwipingSelector: null, 4564 // Passive Listeners 4565 passiveListeners: true, 4566 // NS 4567 containerModifierClass: 'swiper-container-', 4568 // NEW 4569 slideClass: 'swiper-slide', 4570 slideBlankClass: 'swiper-slide-invisible-blank', 4571 slideActiveClass: 'swiper-slide-active', 4572 slideDuplicateActiveClass: 'swiper-slide-duplicate-active', 4573 slideVisibleClass: 'swiper-slide-visible', 4574 slideDuplicateClass: 'swiper-slide-duplicate', 4575 slideNextClass: 'swiper-slide-next', 4576 slideDuplicateNextClass: 'swiper-slide-duplicate-next', 4577 slidePrevClass: 'swiper-slide-prev', 4578 slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', 4579 wrapperClass: 'swiper-wrapper', 4580 // Callbacks 4581 runCallbacksOnInit: true, 4582 // Internals 4583 _emitClasses: false 4584 }; 4585 4586 var prototypes = { 4587 modular: modular, 4588 eventsEmitter: eventsEmitter, 4589 update: update, 4590 translate: translate, 4591 transition: transition$1, 4592 slide: slide, 4593 loop: loop, 4594 grabCursor: grabCursor, 4595 manipulation: manipulation, 4596 events: events, 4597 breakpoints: breakpoints, 4598 checkOverflow: checkOverflow$1, 4599 classes: classes, 4600 images: images 4601 }; 4602 var extendedDefaults = {}; 4603 4604 var Swiper = /*#__PURE__*/function () { 4605 function Swiper() { 4606 var el; 4607 var params; 4608 4609 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 4610 args[_key] = arguments[_key]; 4611 } 4612 4613 if (args.length === 1 && args[0].constructor && args[0].constructor === Object) { 4614 params = args[0]; 4615 } else { 4616 el = args[0]; 4617 params = args[1]; 4618 } 4619 4620 if (!params) params = {}; 4621 params = extend$1({}, params); 4622 if (el && !params.el) params.el = el; // Swiper Instance 4623 4624 var swiper = this;
4625 swiper.support = getSupport(); 4626 swiper.device = getDevice({ 4627 userAgent: params.userAgent 4628 }); 4629 swiper.browser = getBrowser(); 4630 swiper.eventsListeners = {}; 4631 swiper.eventsAnyListeners = []; 4632 Object.keys(prototypes).forEach(function (prototypeGroup) { 4633 Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) { 4634 if (!Swiper.prototype[protoMethod]) { 4635 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 4636 } 4637 }); 4638 }); 4639 4640 if (typeof swiper.modules === 'undefined') { 4641 swiper.modules = {}; 4642 } 4643 4644 Object.keys(swiper.modules).forEach(function (moduleName) { 4645 var module = swiper.modules[moduleName]; 4646 4647 if (module.params) { 4648 var moduleParamName = Object.keys(module.params)[0]; 4649 var moduleParams = module.params[moduleParamName]; 4650 if (typeof moduleParams !== 'object' || moduleParams === null) return; 4651 if (!(moduleParamName in params && 'enabled' in moduleParams)) return; 4652 4653 if (params[moduleParamName] === true) { 4654 params[moduleParamName] = { 4655 enabled: true 4656 }; 4657 } 4658 4659 if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { 4660 params[moduleParamName].enabled = true; 4661 } 4662 4663 if (!params[moduleParamName]) params[moduleParamName] = { 4664 enabled: false 4665 }; 4666 } 4667 }); // Extend defaults with modules params 4668 4669 var swiperParams = extend$1({}, defaults); 4670 swiper.useParams(swiperParams); // Extend defaults with passed params 4671 4672 swiper.params = extend$1({}, swiperParams, extendedDefaults, params); 4673 swiper.originalParams = extend$1({}, swiper.params); 4674 swiper.passedParams = extend$1({}, params); // add event listeners 4675 4676 if (swiper.params && swiper.params.on) {
4677 Object.keys(swiper.params.on).forEach(function (eventName) { 4678 swiper.on(eventName, swiper.params.on[eventName]); 4679 }); 4680 } // Save Dom lib 4681 4682 4683 swiper.$ = $; // Find el 4684 4685 var $el = $(swiper.params.el); 4686 el = $el[0]; 4687 4688 if (!el) { 4689 return undefined; 4690 } 4691 4692 if ($el.length > 1) { 4693 var swipers = []; 4694 $el.each(function (containerEl) { 4695 var newParams = extend$1({}, params, { 4696 el: containerEl 4697 }); 4698 swipers.push(new Swiper(newParams)); 4699 }); 4700 return swipers; 4701 } 4702 4703 el.swiper = swiper; // Find Wrapper 4704 4705 var $wrapperEl; 4706 4707 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 4708 $wrapperEl = $(el.shadowRoot.querySelector("." + swiper.params.wrapperClass)); // Children needs to return slot items 4709 4710 $wrapperEl.children = function (options) { 4711 return $el.children(options); 4712 }; 4713 } else { 4714 $wrapperEl = $el.children("." + swiper.params.wrapperClass); 4715 } // Extend Swiper 4716 4717 4718 extend$1(swiper, { 4719 $el: $el, 4720 el: el, 4721 $wrapperEl: $wrapperEl, 4722 wrapperEl: $wrapperEl[0], 4723 // Classes 4724 classNames: [], 4725 // Slides 4726 slides: $(), 4727 slidesGrid: [], 4728 snapGrid: [], 4729 slidesSizesGrid: [], 4730 // isDirection 4731 isHorizontal: function isHorizontal() { 4732 return swiper.params.direction === 'horizontal'; 4733 }, 4734 isVertical: function isVertical() { 4735 return swiper.params.direction === 'vertical'; 4736 }, 4737 // RTL 4738 rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl', 4739 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), 4740 wrongRTL: $wrapperEl.css('display') === '-webkit-box', 4741 // Indexes 4742 activeIndex: 0, 4743 realIndex: 0, 4744 // 4745 isBeginning: true, 4746 isEnd: false, 4747 // Props 4748 translate: 0, 4749 previousTranslate: 0, 4750 progress: 0, 4751 velocity: 0, 4752 animating: false, 4753 // Locks 4754 allowSlideNext: swiper.params.allowSlideNext, 4755 allowSlidePrev: swiper.params.allowSlidePrev, 4756 // Touch Events 4757 touchEvents: function touchEvents() { 4758 var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; 4759 var desktop = ['mousedown', 'mousemove', 'mouseup']; 4760 4761 if (swiper.support.pointerEvents) { 4762 desktop = ['pointerdown', 'pointermove', 'pointerup']; 4763 } 4764 4765 swiper.touchEventsTouch = { 4766 start: touch[0], 4767 move: touch[1], 4768 end: touch[2], 4769 cancel: touch[3] 4770 }; 4771 swiper.touchEventsDesktop = { 4772 start: desktop[0], 4773 move: desktop[1], 4774 end: desktop[2] 4775 }; 4776 return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; 4777 }(), 4778 touchEventsData: { 4779 isTouched: undefined, 4780 isMoved: undefined, 4781 allowTouchCallbacks: undefined, 4782 touchStartTime: undefined, 4783 isScrolling: undefined, 4784 currentTranslate: undefined, 4785 startTranslate: undefined, 4786 allowThresholdMove: undefined, 4787 // Form elements to match 4788 formElements: 'input, select, option, textarea, button, video, label', 4789 // Last click time 4790 lastClickTime: now(), 4791 clickTimeout: undefined, 4792 // Velocities 4793 velocities: [], 4794 allowMomentumBounce: undefined, 4795 isTouchEvent: undefined, 4796 startMoving: undefined 4797 }, 4798 // Clicks 4799 allowClick: true, 4800 // Touches 4801 allowTouchMove: swiper.params.allowTouchMove, 4802 touches: { 4803 startX: 0, 4804 startY: 0, 4805 currentX: 0, 4806 currentY: 0, 4807 diff: 0 4808 }, 4809 // Images 4810 imagesToLoad: [], 4811 imagesLoaded: 0 4812 }); // Install Modules 4813 4814 swiper.useModules(); 4815 swiper.emit('_swiper'); // Init 4816 4817 if (swiper.params.init) { 4818 swiper.init(); 4819 } // Return app instance 4820 4821 4822 return swiper; 4823 } 4824 4825 var _proto = Swiper.prototype; 4826 4827 _proto.emitContainerClasses = function emitContainerClasses() { 4828 var swiper = this; 4829 if (!swiper.params._emitClasses || !swiper.el) return; 4830 var classes = swiper.el.className.split(' ').filter(function (className) { 4831 return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 4832 }); 4833 swiper.emit('_containerClasses', classes.join(' ')); 4834 }; 4835 4836 _proto.emitSlidesClasses = function emitSlidesClasses() { 4837 var swiper = this; 4838 if (!swiper.params._emitClasses || !swiper.el) return; 4839 swiper.slides.each(function (slideEl) { 4840 var classes = slideEl.className.split(' ').filter(function (className) { 4841 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 4842 }); 4843 swiper.emit('_slideClass', slideEl, classes.join(' ')); 4844 }); 4845 }; 4846 4847 _proto.slidesPerViewDynamic = function slidesPerViewDynamic() { 4848 var swiper = this; 4849 var params = swiper.params, 4850 slides = swiper.slides, 4851 slidesGrid = swiper.slidesGrid, 4852 swiperSize = swiper.size, 4853 activeIndex = swiper.activeIndex; 4854 var spv = 1; 4855 4856 if (params.centeredSlides) { 4857 var slideSize = slides[activeIndex].swiperSlideSize; 4858 var breakLoop; 4859 4860 for (var i = activeIndex + 1; i < slides.length; i += 1) { 4861 if (slides[i] && !breakLoop) { 4862 slideSize += slides[i].swiperSlideSize; 4863 spv += 1; 4864 if (slideSize > swiperSize) breakLoop = true; 4865 } 4866 } 4867 4868 for (var _i = activeIndex - 1; _i >= 0; _i -= 1) { 4869 if (slides[_i] && !breakLoop) { 4870 slideSize += slides[_i].swiperSlideSize; 4871 spv += 1; 4872 if (slideSize > swiperSize) breakLoop = true; 4873 } 4874 } 4875 } else { 4876 for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) { 4877 if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) { 4878 spv += 1; 4879 } 4880 } 4881 } 4882 4883 return spv; 4884 }; 4885
vendor: 4,857 bytes, lines 4886-5058
4886 _proto.update = function update() { 4887 var swiper = this; 4888 if (!swiper || swiper.destroyed) return; 4889 var snapGrid = swiper.snapGrid, 4890 params = swiper.params; // Breakpoints 4891 4892 if (params.breakpoints) { 4893 swiper.setBreakpoint(); 4894 } 4895 4896 swiper.updateSize(); 4897 swiper.updateSlides(); 4898 swiper.updateProgress(); 4899 swiper.updateSlidesClasses(); 4900 4901 function setTranslate() { 4902 var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 4903 var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 4904 swiper.setTranslate(newTranslate); 4905 swiper.updateActiveIndex(); 4906 swiper.updateSlidesClasses(); 4907 } 4908 4909 var translated; 4910 4911 if (swiper.params.freeMode) { 4912 setTranslate(); 4913 4914 if (swiper.params.autoHeight) { 4915 swiper.updateAutoHeight(); 4916 } 4917 } else { 4918 if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { 4919 translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); 4920 } else { 4921 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 4922 } 4923 4924 if (!translated) { 4925 setTranslate(); 4926 } 4927 } 4928 4929 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 4930 swiper.checkOverflow(); 4931 } 4932 4933 swiper.emit('update'); 4934 }; 4935 4936 _proto.changeDirection = function changeDirection(newDirection, needUpdate) { 4937 if (needUpdate === void 0) { 4938 needUpdate = true; 4939 } 4940 4941 var swiper = this; 4942 var currentDirection = swiper.params.direction; 4943 4944 if (!newDirection) { 4945 // eslint-disable-next-line 4946 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 4947 } 4948 4949 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 4950 return swiper; 4951 } 4952 4953 swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection); 4954 swiper.emitContainerClasses(); 4955 swiper.params.direction = newDirection; 4956 swiper.slides.each(function (slideEl) { 4957 if (newDirection === 'vertical') { 4958 slideEl.style.width = ''; 4959 } else { 4960 slideEl.style.height = ''; 4961 } 4962 }); 4963 swiper.emit('changeDirection'); 4964 if (needUpdate) swiper.update(); 4965 return swiper; 4966 }; 4967 4968 _proto.init = function init() { 4969 var swiper = this; 4970 if (swiper.initialized) return; 4971 swiper.emit('beforeInit'); // Set breakpoint 4972 4973 if (swiper.params.breakpoints) { 4974 swiper.setBreakpoint(); 4975 } // Add Classes 4976 4977 4978 swiper.addClasses(); // Create loop 4979 4980 if (swiper.params.loop) { 4981 swiper.loopCreate(); 4982 } // Update size 4983 4984 4985 swiper.updateSize(); // Update slides 4986 4987 swiper.updateSlides(); 4988 4989 if (swiper.params.watchOverflow) { 4990 swiper.checkOverflow(); 4991 } // Set Grab Cursor 4992 4993 4994 if (swiper.params.grabCursor) { 4995 swiper.setGrabCursor(); 4996 } 4997 4998 if (swiper.params.preloadImages) { 4999 swiper.preloadImages(); 5000 } // Slide To Initial Slide 5001 5002 5003 if (swiper.params.loop) { 5004 swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit); 5005 } else { 5006 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit); 5007 } // Attach events 5008 5009 5010 swiper.attachEvents(); // Init Flag 5011 5012 swiper.initialized = true; // Emit 5013 5014 swiper.emit('init'); 5015 }; 5016 5017 _proto.destroy = function destroy(deleteInstance, cleanStyles) { 5018 if (deleteInstance === void 0) { 5019 deleteInstance = true; 5020 } 5021 5022 if (cleanStyles === void 0) { 5023 cleanStyles = true; 5024 } 5025 5026 var swiper = this; 5027 var params = swiper.params, 5028 $el = swiper.$el, 5029 $wrapperEl = swiper.$wrapperEl, 5030 slides = swiper.slides; 5031 5032 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 5033 return null; 5034 } 5035 5036 swiper.emit('beforeDestroy'); // Init Flag 5037 5038 swiper.initialized = false; // Detach events 5039 5040 swiper.detachEvents(); // Destroy loop 5041 5042 if (params.loop) { 5043 swiper.loopDestroy(); 5044 } // Cleanup styles 5045 5046 5047 if (cleanStyles) { 5048 swiper.removeClasses(); 5049 $el.removeAttr('style'); 5050 $wrapperEl.removeAttr('style'); 5051 5052 if (slides && slides.length) { 5053 slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index'); 5054 } 5055 } 5056 5057 swiper.emit('destroy'); // Detach emitter events 5058
5059 Object.keys(swiper.eventsListeners).forEach(function (eventName) { 5060 swiper.off(eventName); 5061 }); 5062 5063 if (deleteInstance !== false) { 5064 swiper.$el[0].swiper = null; 5065 deleteProps(swiper); 5066 } 5067 5068 swiper.destroyed = true; 5069 return null; 5070 }; 5071 5072 Swiper.extendDefaults = function extendDefaults(newDefaults) { 5073 extend$1(extendedDefaults, newDefaults); 5074 }; 5075 5076 Swiper.installModule = function installModule(module) { 5077 if (!Swiper.prototype.modules) Swiper.prototype.modules = {}; 5078 var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + now(); 5079 Swiper.prototype.modules[name] = module; 5080 }; 5081 5082 Swiper.use = function use(module) { 5083 if (Array.isArray(module)) { 5084 module.forEach(function (m) { 5085 return Swiper.installModule(m); 5086 }); 5087 return Swiper; 5088 } 5089 5090 Swiper.installModule(module); 5091 return Swiper; 5092 }; 5093 5094 _createClass(Swiper, null, [{ 5095 key: "extendedDefaults", 5096 get: function get() { 5097 return extendedDefaults; 5098 } 5099 }, { 5100 key: "defaults", 5101 get: function get() { 5102 return defaults; 5103 } 5104 }]); 5105 5106 return Swiper; 5107 }(); 5108 5109 Swiper.use([Resize, Observer$1]); 5110 5111 var Virtual = { 5112 update: function update(force) { 5113 var swiper = this; 5114 var _swiper$params = swiper.params, 5115 slidesPerView = _swiper$params.slidesPerView, 5116 slidesPerGroup = _swiper$params.slidesPerGroup, 5117 centeredSlides = _swiper$params.centeredSlides; 5118 var _swiper$params$virtua = swiper.params.virtual, 5119 addSlidesBefore = _swiper$params$virtua.addSlidesBefore, 5120 addSlidesAfter = _swiper$params$virtua.addSlidesAfter; 5121 var _swiper$virtual = swiper.virtual, 5122 previousFrom = _swiper$virtual.from, 5123 previousTo = _swiper$virtual.to, 5124 slides = _swiper$virtual.slides, 5125 previousSlidesGrid = _swiper$virtual.slidesGrid, 5126 renderSlide = _swiper$virtual.renderSlide, 5127 previousOffset = _swiper$virtual.offset; 5128 swiper.updateActiveIndex(); 5129 var activeIndex = swiper.activeIndex || 0; 5130 var offsetProp; 5131 if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 5132 var slidesAfter; 5133 var slidesBefore; 5134 5135 if (centeredSlides) { 5136 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 5137 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 5138 } else { 5139 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; 5140 slidesBefore = slidesPerGroup + addSlidesBefore; 5141 } 5142 5143 var from = Math.max((activeIndex || 0) - slidesBefore, 0); 5144 var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); 5145 var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 5146 extend$1(swiper.virtual, { 5147 from: from, 5148 to: to, 5149 offset: offset, 5150 slidesGrid: swiper.slidesGrid 5151 }); 5152 5153 function onRendered() { 5154 swiper.updateSlides(); 5155 swiper.updateProgress(); 5156 swiper.updateSlidesClasses(); 5157 5158 if (swiper.lazy && swiper.params.lazy.enabled) { 5159 swiper.lazy.load(); 5160 } 5161 } 5162 5163 if (previousFrom === from && previousTo === to && !force) { 5164 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { 5165 swiper.slides.css(offsetProp, offset + "px"); 5166 } 5167 5168 swiper.updateProgress(); 5169 return; 5170 } 5171 5172 if (swiper.params.virtual.renderExternal) { 5173 swiper.params.virtual.renderExternal.call(swiper, { 5174 offset: offset, 5175 from: from, 5176 to: to, 5177 slides: function getSlides() { 5178 var slidesToRender = []; 5179 5180 for (var i = from; i <= to; i += 1) { 5181 slidesToRender.push(slides[i]); 5182 } 5183 5184 return slidesToRender; 5185 }() 5186 }); 5187 5188 if (swiper.params.virtual.renderExternalUpdate) { 5189 onRendered(); 5190 } 5191 5192 return; 5193 } 5194 5195 var prependIndexes = []; 5196 var appendIndexes = []; 5197 5198 if (force) { 5199 swiper.$wrapperEl.find("." + swiper.params.slideClass).remove(); 5200 } else { 5201 for (var i = previousFrom; i <= previousTo; i += 1) { 5202 if (i < from || i > to) { 5203 swiper.$wrapperEl.find("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + i + "\"]").remove(); 5204 } 5205 } 5206 } 5207 5208 for (var _i = 0; _i < slides.length; _i += 1) { 5209 if (_i >= from && _i <= to) { 5210 if (typeof previousTo === 'undefined' || force) { 5211 appendIndexes.push(_i); 5212 } else { 5213 if (_i > previousTo) appendIndexes.push(_i);
5214 if (_i < previousFrom) prependIndexes.push(_i); 5215 } 5216 } 5217 } 5218 5219 appendIndexes.forEach(function (index) { 5220 swiper.$wrapperEl.append(renderSlide(slides[index], index)); 5221 }); 5222 prependIndexes.sort(function (a, b) { 5223 return b - a; 5224 }).forEach(function (index) { 5225 swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); 5226 }); 5227 swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + "px"); 5228 onRendered(); 5229 }, 5230 renderSlide: function renderSlide(slide, index) { 5231 var swiper = this; 5232 var params = swiper.params.virtual; 5233 5234 if (params.cache && swiper.virtual.cache[index]) { 5235 return swiper.virtual.cache[index]; 5236 } 5237 5238 var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"" + swiper.params.slideClass + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>"); 5239 if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index); 5240 if (params.cache) swiper.virtual.cache[index] = $slideEl; 5241 return $slideEl; 5242 }, 5243 appendSlide: function appendSlide(slides) { 5244 var swiper = this; 5245 5246 if (typeof slides === 'object' && 'length' in slides) { 5247 for (var i = 0; i < slides.length; i += 1) { 5248 if (slides[i]) swiper.virtual.slides.push(slides[i]); 5249 } 5250 } else { 5251 swiper.virtual.slides.push(slides); 5252 } 5253 5254 swiper.virtual.update(true); 5255 }, 5256 prependSlide: function prependSlide(slides) { 5257 var swiper = this; 5258 var activeIndex = swiper.activeIndex; 5259 var newActiveIndex = activeIndex + 1; 5260 var numberOfNewSlides = 1; 5261 5262 if (Array.isArray(slides)) { 5263 for (var i = 0; i < slides.length; i += 1) { 5264 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 5265 } 5266 5267 newActiveIndex = activeIndex + slides.length; 5268 numberOfNewSlides = slides.length; 5269 } else { 5270 swiper.virtual.slides.unshift(slides); 5271 } 5272 5273 if (swiper.params.virtual.cache) { 5274 var cache = swiper.virtual.cache; 5275 var newCache = {}; 5276 Object.keys(cache).forEach(function (cachedIndex) { 5277 var $cachedEl = cache[cachedIndex]; 5278 var cachedElIndex = $cachedEl.attr('data-swiper-slide-index'); 5279 5280 if (cachedElIndex) { 5281 $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1); 5282 } 5283 5284 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl; 5285 }); 5286 swiper.virtual.cache = newCache; 5287 } 5288 5289 swiper.virtual.update(true); 5290 swiper.slideTo(newActiveIndex, 0); 5291 }, 5292 removeSlide: function removeSlide(slidesIndexes) { 5293 var swiper = this; 5294 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 5295 var activeIndex = swiper.activeIndex; 5296 5297 if (Array.isArray(slidesIndexes)) { 5298 for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) { 5299 swiper.virtual.slides.splice(slidesIndexes[i], 1); 5300 5301 if (swiper.params.virtual.cache) { 5302 delete swiper.virtual.cache[slidesIndexes[i]]; 5303 } 5304 5305 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 5306 activeIndex = Math.max(activeIndex, 0); 5307 } 5308 } else { 5309 swiper.virtual.slides.splice(slidesIndexes, 1); 5310 5311 if (swiper.params.virtual.cache) { 5312 delete swiper.virtual.cache[slidesIndexes]; 5313 } 5314 5315 if (slidesIndexes < activeIndex) activeIndex -= 1; 5316 activeIndex = Math.max(activeIndex, 0); 5317 } 5318 5319 swiper.virtual.update(true); 5320 swiper.slideTo(activeIndex, 0); 5321 }, 5322 removeAllSlides: function removeAllSlides() { 5323 var swiper = this; 5324 swiper.virtual.slides = []; 5325 5326 if (swiper.params.virtual.cache) { 5327 swiper.virtual.cache = {}; 5328 } 5329 5330 swiper.virtual.update(true); 5331 swiper.slideTo(0, 0); 5332 } 5333 }; 5334 var Virtual$1 = { 5335 name: 'virtual', 5336 params: { 5337 virtual: { 5338 enabled: false, 5339 slides: [], 5340 cache: true, 5341 renderSlide: null, 5342 renderExternal: null, 5343 renderExternalUpdate: true, 5344 addSlidesBefore: 0, 5345 addSlidesAfter: 0 5346 } 5347 }, 5348 create: function create() { 5349 var swiper = this; 5350 bindModuleMethods(swiper, { 5351 virtual: _extends(_extends({}, Virtual), {}, { 5352 slides: swiper.params.virtual.slides, 5353 cache: {} 5354 }) 5355 }); 5356 }, 5357 on: { 5358 beforeInit: function beforeInit(swiper) { 5359 if (!swiper.params.virtual.enabled) return; 5360 swiper.classNames.push(swiper.params.containerModifierClass + "virtual"); 5361 var overwriteParams = { 5362 watchSlidesProgress: true 5363 }; 5364 extend$1(swiper.params, overwriteParams); 5365 extend$1(swiper.originalParams, overwriteParams); 5366 5367 if (!swiper.params.initialSlide) {
5368 swiper.virtual.update(); 5369 } 5370 }, 5371 setTranslate: function setTranslate(swiper) { 5372 if (!swiper.params.virtual.enabled) return; 5373 swiper.virtual.update(); 5374 } 5375 } 5376 }; 5377 5378 var Keyboard = { 5379 handle: function handle(event) { 5380 var swiper = this; 5381 var window = getWindow(); 5382 var document = getDocument(); 5383 var rtl = swiper.rtlTranslate; 5384 var e = event; 5385 if (e.originalEvent) e = e.originalEvent; // jquery fix 5386 5387 var kc = e.keyCode || e.charCode; 5388 var pageUpDown = swiper.params.keyboard.pageUpDown; 5389 var isPageUp = pageUpDown && kc === 33; 5390 var isPageDown = pageUpDown && kc === 34; 5391 var isArrowLeft = kc === 37; 5392 var isArrowRight = kc === 39; 5393 var isArrowUp = kc === 38; 5394 var isArrowDown = kc === 40; // Directions locks 5395 5396 if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { 5397 return false; 5398 } 5399 5400 if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { 5401 return false; 5402 } 5403 5404 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 5405 return undefined; 5406 } 5407 5408 if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { 5409 return undefined; 5410 } 5411 5412 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 5413 var inView = false; // Check that swiper should be inside of visible area of window 5414 5415 if (swiper.$el.parents("." + swiper.params.slideClass).length > 0 && swiper.$el.parents("." + swiper.params.slideActiveClass).length === 0) { 5416 return undefined; 5417 } 5418 5419 var windowWidth = window.innerWidth; 5420 var windowHeight = window.innerHeight; 5421 var swiperOffset = swiper.$el.offset(); 5422 if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; 5423 var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]]; 5424 5425 for (var i = 0; i < swiperCoord.length; i += 1) { 5426 var point = swiperCoord[i]; 5427 5428 if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { 5429 inView = true; 5430 } 5431 } 5432 5433 if (!inView) return undefined; 5434 } 5435 5436 if (swiper.isHorizontal()) { 5437 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 5438 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 5439 } 5440 5441 if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); 5442 if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); 5443 } else { 5444 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 5445 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 5446 } 5447 5448 if (isPageDown || isArrowDown) swiper.slideNext(); 5449 if (isPageUp || isArrowUp) swiper.slidePrev(); 5450 } 5451 5452 swiper.emit('keyPress', kc); 5453 return undefined; 5454 }, 5455 enable: function enable() { 5456 var swiper = this; 5457 var document = getDocument(); 5458 if (swiper.keyboard.enabled) return; 5459 $(document).on('keydown', swiper.keyboard.handle); 5460 swiper.keyboard.enabled = true; 5461 }, 5462 disable: function disable() { 5463 var swiper = this; 5464 var document = getDocument(); 5465 if (!swiper.keyboard.enabled) return; 5466 $(document).off('keydown', swiper.keyboard.handle); 5467 swiper.keyboard.enabled = false; 5468 } 5469 }; 5470 var Keyboard$1 = { 5471 name: 'keyboard', 5472 params: { 5473 keyboard: { 5474 enabled: false, 5475 onlyInViewport: true, 5476 pageUpDown: true 5477 } 5478 }, 5479 create: function create() { 5480 var swiper = this; 5481 bindModuleMethods(swiper, { 5482 keyboard: _extends({ 5483 enabled: false 5484 }, Keyboard) 5485 }); 5486 }, 5487 on: { 5488 init: function init(swiper) { 5489 if (swiper.params.keyboard.enabled) { 5490 swiper.keyboard.enable(); 5491 } 5492 }, 5493 destroy: function destroy(swiper) { 5494 if (swiper.keyboard.enabled) { 5495 swiper.keyboard.disable(); 5496 } 5497 } 5498 } 5499 }; 5500 5501 function isEventSupported() { 5502 var document = getDocument(); 5503 var eventName = 'onwheel'; 5504 var isSupported = (eventName in document); 5505 5506 if (!isSupported) { 5507 var element = document.createElement('div'); 5508 element.setAttribute(eventName, 'return;'); 5509 isSupported = typeof element[eventName] === 'function'; 5510 } 5511 5512 if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard. 5513 // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature 5514 document.implementation.hasFeature('', '') !== true) { 5515 // This is the only way to test support for the `wheel` event in IE9+. 5516 isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); 5517 } 5518 5519 return isSupported; 5520 } 5521 5522 var Mousewheel = { 5523 lastScrollTime: now(), 5524 lastEventBeforeSnap: undefined, 5525 recentWheelEvents: [], 5526 event: function event() { 5527 var window = getWindow(); 5528 if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll'; 5529 return isEventSupported() ? 'wheel' : 'mousewheel'; 5530 }, 5531 normalize: function normalize(e) { 5532 // Reasonable defaults 5533 var PIXEL_STEP = 10; 5534 var LINE_HEIGHT = 40; 5535 var PAGE_HEIGHT = 800; 5536 var sX = 0; 5537 var sY = 0; // spinX, spinY 5538 5539 var pX = 0; 5540 var pY = 0; // pixelX, pixelY 5541 // Legacy 5542 5543 if ('detail' in e) { 5544 sY = e.detail; 5545 } 5546 5547 if ('wheelDelta' in e) { 5548 sY = -e.wheelDelta / 120; 5549 } 5550 5551 if ('wheelDeltaY' in e) { 5552 sY = -e.wheelDeltaY / 120; 5553 } 5554 5555 if ('wheelDeltaX' in e) { 5556 sX = -e.wheelDeltaX / 120; 5557 } // side scrolling on FF with DOMMouseScroll 5558 5559 5560 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 5561 sX = sY; 5562 sY = 0; 5563 } 5564 5565 pX = sX * PIXEL_STEP; 5566 pY = sY * PIXEL_STEP; 5567 5568 if ('deltaY' in e) { 5569 pY = e.deltaY; 5570 } 5571 5572 if ('deltaX' in e) { 5573 pX = e.deltaX; 5574 } 5575 5576 if (e.shiftKey && !pX) { 5577 // if user scrolls with shift he wants horizontal scroll 5578 pX = pY; 5579 pY = 0; 5580 } 5581 5582 if ((pX || pY) && e.deltaMode) { 5583 if (e.deltaMode === 1) { 5584 // delta in LINE units 5585 pX *= LINE_HEIGHT; 5586 pY *= LINE_HEIGHT; 5587 } else { 5588 // delta in PAGE units 5589 pX *= PAGE_HEIGHT; 5590 pY *= PAGE_HEIGHT; 5591 } 5592 } // Fall-back if spin cannot be determined 5593 5594 5595 if (pX && !sX) { 5596 sX = pX < 1 ? -1 : 1; 5597 } 5598 5599 if (pY && !sY) { 5600 sY = pY < 1 ? -1 : 1; 5601 } 5602 5603 return { 5604 spinX: sX, 5605 spinY: sY, 5606 pixelX: pX, 5607 pixelY: pY 5608 }; 5609 }, 5610 handleMouseEnter: function handleMouseEnter() { 5611 var swiper = this; 5612 swiper.mouseEntered = true; 5613 }, 5614 handleMouseLeave: function handleMouseLeave() { 5615 var swiper = this; 5616 swiper.mouseEntered = false;
5617 }, 5618 handle: function handle(event) { 5619 var e = event; 5620 var swiper = this; 5621 var params = swiper.params.mousewheel; 5622 5623 if (swiper.params.cssMode) { 5624 e.preventDefault(); 5625 } 5626 5627 var target = swiper.$el; 5628 5629 if (swiper.params.mousewheel.eventsTarget !== 'container') { 5630 target = $(swiper.params.mousewheel.eventsTarget); 5631 } 5632 5633 if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true; 5634 if (e.originalEvent) e = e.originalEvent; // jquery fix 5635 5636 var delta = 0; 5637 var rtlFactor = swiper.rtlTranslate ? -1 : 1; 5638 var data = Mousewheel.normalize(e); 5639 5640 if (params.forceToAxis) { 5641 if (swiper.isHorizontal()) { 5642 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 5643 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 5644 } else { 5645 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 5646 } 5647 5648 if (delta === 0) return true; 5649 if (params.invert) delta = -delta; 5650 5651 if (!swiper.params.freeMode) { 5652 // Register the new event in a variable which stores the relevant data 5653 var newEvent = { 5654 time: now(), 5655 delta: Math.abs(delta), 5656 direction: Math.sign(delta), 5657 raw: event 5658 }; // Keep the most recent events 5659 5660 var recentWheelEvents = swiper.mousewheel.recentWheelEvents; 5661 5662 if (recentWheelEvents.length >= 2) { 5663 recentWheelEvents.shift(); // only store the last N events 5664 } 5665 5666 var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 5667 recentWheelEvents.push(newEvent); // If there is at least one previous recorded event: 5668 // If direction has changed or 5669 // if the scroll is quicker than the previous one: 5670 // Animate the slider. 5671 // Else (this is the first time the wheel is moved): 5672 // Animate the slider. 5673 5674 if (prevEvent) { 5675 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 5676 swiper.mousewheel.animateSlider(newEvent); 5677 } 5678 } else { 5679 swiper.mousewheel.animateSlider(newEvent); 5680 } // If it's time to release the scroll: 5681 // Return now so you don't hit the preventDefault. 5682 5683 5684 if (swiper.mousewheel.releaseScroll(newEvent)) { 5685 return true; 5686 } 5687 } else { 5688 // Freemode or scrollContainer: 5689 // If we recently snapped after a momentum scroll, then ignore wheel events 5690 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 5691 // or if it's a new scroll (larger delta or inverse sign as last event before 5692 // an end-of-momentum snap). 5693 var _newEvent = { 5694 time: now(), 5695 delta: Math.abs(delta), 5696 direction: Math.sign(delta) 5697 }; 5698 var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap; 5699 var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction; 5700 5701 if (!ignoreWheelEvents) { 5702 swiper.mousewheel.lastEventBeforeSnap = undefined; 5703 5704 if (swiper.params.loop) { 5705 swiper.loopFix(); 5706 } 5707 5708 var position = swiper.getTranslate() + delta * params.sensitivity; 5709 var wasBeginning = swiper.isBeginning; 5710 var wasEnd = swiper.isEnd; 5711 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 5712 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 5713 swiper.setTransition(0); 5714 swiper.setTranslate(position); 5715 swiper.updateProgress(); 5716 swiper.updateActiveIndex(); 5717 swiper.updateSlidesClasses(); 5718 5719 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 5720 swiper.updateSlidesClasses(); 5721 } 5722 5723 if (swiper.params.freeModeSticky) { 5724 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 5725 // the end of a momentum scroll by storing recent (N=15?) wheel events.
5726 // 1. do all N events have decreasing or same (absolute value) delta? 5727 // 2. did all N events arrive in the last M (M=500?) msecs? 5728 // 3. does the earliest event have an (absolute value) delta that's 5729 // at least P (P=1?) larger than the most recent event's delta? 5730 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 5731 // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration. 5732 // Snap immediately and ignore remaining wheel events in this scroll. 5733 // See comment above for "remaining wheel events in this scroll" determination. 5734 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 5735 clearTimeout(swiper.mousewheel.timeout); 5736 swiper.mousewheel.timeout = undefined; 5737 var _recentWheelEvents = swiper.mousewheel.recentWheelEvents; 5738 5739 if (_recentWheelEvents.length >= 15) { 5740 _recentWheelEvents.shift(); // only store the last N events 5741 5742 } 5743 5744 var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined; 5745 5746 var firstEvent = _recentWheelEvents[0]; 5747 5748 _recentWheelEvents.push(_newEvent); 5749 5750 if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) { 5751 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 5752 _recentWheelEvents.splice(0); 5753 } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) { 5754 // We're at the end of the deceleration of a momentum scroll, so there's no need 5755 // to wait for more events. Snap ASAP on the next tick. 5756 // Also, because there's some remaining momentum we'll bias the snap in the 5757 // direction of the ongoing scroll because it's better UX for the scroll to snap 5758 // in the same direction as the scroll instead of reversing to snap. Therefore, 5759 // if it's already scrolled more than 20% in the current direction, keep going. 5760 var snapToThreshold = delta > 0 ? 0.8 : 0.2; 5761 swiper.mousewheel.lastEventBeforeSnap = _newEvent; 5762 5763 _recentWheelEvents.splice(0); 5764 5765 swiper.mousewheel.timeout = nextTick(function () { 5766 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 5767 }, 0); // no delay; move on next tick 5768 } 5769 5770 if (!swiper.mousewheel.timeout) { 5771 // if we get here, then we haven't detected the end of a momentum scroll, so 5772 // we'll consider a scroll "complete" when there haven't been any wheel events 5773 // for 500ms. 5774 swiper.mousewheel.timeout = nextTick(function () { 5775 var snapToThreshold = 0.5; 5776 swiper.mousewheel.lastEventBeforeSnap = _newEvent; 5777 5778 _recentWheelEvents.splice(0); 5779 5780 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 5781 }, 500); 5782 } 5783 } // Emit event 5784 5785 5786 if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay 5787 5788 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions 5789 5790 if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; 5791 } 5792 } 5793 5794 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 5795 return false; 5796 }, 5797 animateSlider: function animateSlider(newEvent) { 5798 var swiper = this; 5799 var window = getWindow(); 5800 5801 if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) { 5802 // Prevent if delta of wheel scroll delta is below configured threshold 5803 return false; 5804 } 5805 5806 if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) { 5807 // Prevent if time between scrolls is below configured threshold 5808 return false;
5809 } // If the movement is NOT big enough and 5810 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 5811 // Don't go any further (avoid insignificant scroll movement). 5812 5813 5814 if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) { 5815 // Return false as a default 5816 return true; 5817 } // If user is scrolling towards the end: 5818 // If the slider hasn't hit the latest slide or 5819 // if the slider is a loop and 5820 // if the slider isn't moving right now: 5821 // Go to next slide and 5822 // emit a scroll event. 5823 // Else (the user is scrolling towards the beginning) and 5824 // if the slider hasn't hit the first slide or 5825 // if the slider is a loop and 5826 // if the slider isn't moving right now: 5827 // Go to prev slide and 5828 // emit a scroll event. 5829 5830 5831 if (newEvent.direction < 0) { 5832 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 5833 swiper.slideNext(); 5834 swiper.emit('scroll', newEvent.raw); 5835 } 5836 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 5837 swiper.slidePrev(); 5838 swiper.emit('scroll', newEvent.raw); 5839 } // If you got here is because an animation has been triggered so store the current time 5840 5841 5842 swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default 5843 5844 return false; 5845 }, 5846 releaseScroll: function releaseScroll(newEvent) { 5847 var swiper = this; 5848 var params = swiper.params.mousewheel; 5849 5850 if (newEvent.direction < 0) { 5851 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 5852 // Return true to animate scroll on edges 5853 return true; 5854 } 5855 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 5856 // Return true to animate scroll on edges 5857 return true; 5858 } 5859 5860 return false; 5861 }, 5862 enable: function enable() { 5863 var swiper = this; 5864 var event = Mousewheel.event(); 5865 5866 if (swiper.params.cssMode) { 5867 swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle); 5868 return true; 5869 } 5870 5871 if (!event) return false; 5872 if (swiper.mousewheel.enabled) return false; 5873 var target = swiper.$el; 5874 5875 if (swiper.params.mousewheel.eventsTarget !== 'container') { 5876 target = $(swiper.params.mousewheel.eventsTarget); 5877 } 5878 5879 target.on('mouseenter', swiper.mousewheel.handleMouseEnter); 5880 target.on('mouseleave', swiper.mousewheel.handleMouseLeave); 5881 target.on(event, swiper.mousewheel.handle); 5882 swiper.mousewheel.enabled = true; 5883 return true; 5884 }, 5885 disable: function disable() { 5886 var swiper = this; 5887 var event = Mousewheel.event(); 5888 5889 if (swiper.params.cssMode) { 5890 swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle); 5891 return true; 5892 } 5893 5894 if (!event) return false; 5895 if (!swiper.mousewheel.enabled) return false; 5896 var target = swiper.$el; 5897 5898 if (swiper.params.mousewheel.eventsTarget !== 'container') { 5899 target = $(swiper.params.mousewheel.eventsTarget); 5900 } 5901 5902 target.off(event, swiper.mousewheel.handle); 5903 swiper.mousewheel.enabled = false; 5904 return true; 5905 } 5906 }; 5907 var Mousewheel$1 = { 5908 name: 'mousewheel', 5909 params: { 5910 mousewheel: { 5911 enabled: false, 5912 releaseOnEdges: false, 5913 invert: false,
5914 forceToAxis: false, 5915 sensitivity: 1, 5916 eventsTarget: 'container', 5917 thresholdDelta: null, 5918 thresholdTime: null 5919 } 5920 }, 5921 create: function create() { 5922 var swiper = this; 5923 bindModuleMethods(swiper, { 5924 mousewheel: { 5925 enabled: false, 5926 lastScrollTime: now(), 5927 lastEventBeforeSnap: undefined, 5928 recentWheelEvents: [], 5929 enable: Mousewheel.enable, 5930 disable: Mousewheel.disable, 5931 handle: Mousewheel.handle, 5932 handleMouseEnter: Mousewheel.handleMouseEnter, 5933 handleMouseLeave: Mousewheel.handleMouseLeave, 5934 animateSlider: Mousewheel.animateSlider, 5935 releaseScroll: Mousewheel.releaseScroll 5936 } 5937 }); 5938 }, 5939 on: { 5940 init: function init(swiper) { 5941 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 5942 swiper.mousewheel.disable(); 5943 } 5944 5945 if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable(); 5946 }, 5947 destroy: function destroy(swiper) { 5948 if (swiper.params.cssMode) { 5949 swiper.mousewheel.enable(); 5950 } 5951 5952 if (swiper.mousewheel.enabled) swiper.mousewheel.disable(); 5953 } 5954 } 5955 }; 5956 5957 var Navigation = { 5958 update: function update() { 5959 // Update Navigation Buttons 5960 var swiper = this; 5961 var params = swiper.params.navigation; 5962 if (swiper.params.loop) return; 5963 var _swiper$navigation = swiper.navigation, 5964 $nextEl = _swiper$navigation.$nextEl, 5965 $prevEl = _swiper$navigation.$prevEl; 5966 5967 if ($prevEl && $prevEl.length > 0) { 5968 if (swiper.isBeginning) { 5969 $prevEl.addClass(params.disabledClass); 5970 } else { 5971 $prevEl.removeClass(params.disabledClass); 5972 } 5973 5974 $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 5975 } 5976 5977 if ($nextEl && $nextEl.length > 0) { 5978 if (swiper.isEnd) { 5979 $nextEl.addClass(params.disabledClass); 5980 } else { 5981 $nextEl.removeClass(params.disabledClass); 5982 } 5983 5984 $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 5985 } 5986 }, 5987 onPrevClick: function onPrevClick(e) { 5988 var swiper = this; 5989 e.preventDefault(); 5990 if (swiper.isBeginning && !swiper.params.loop) return; 5991 swiper.slidePrev(); 5992 }, 5993 onNextClick: function onNextClick(e) { 5994 var swiper = this; 5995 e.preventDefault(); 5996 if (swiper.isEnd && !swiper.params.loop) return; 5997 swiper.slideNext(); 5998 }, 5999 init: function init() { 6000 var swiper = this; 6001 var params = swiper.params.navigation; 6002 if (!(params.nextEl || params.prevEl)) return; 6003 var $nextEl; 6004 var $prevEl; 6005 6006 if (params.nextEl) { 6007 $nextEl = $(params.nextEl); 6008 6009 if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) { 6010 $nextEl = swiper.$el.find(params.nextEl); 6011 } 6012 } 6013 6014 if (params.prevEl) { 6015 $prevEl = $(params.prevEl); 6016 6017 if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) { 6018 $prevEl = swiper.$el.find(params.prevEl); 6019 } 6020 } 6021 6022 if ($nextEl && $nextEl.length > 0) { 6023 $nextEl.on('click', swiper.navigation.onNextClick); 6024 } 6025 6026 if ($prevEl && $prevEl.length > 0) { 6027 $prevEl.on('click', swiper.navigation.onPrevClick); 6028 } 6029 6030 extend$1(swiper.navigation, { 6031 $nextEl: $nextEl, 6032 nextEl: $nextEl && $nextEl[0], 6033 $prevEl: $prevEl, 6034 prevEl: $prevEl && $prevEl[0] 6035 }); 6036 }, 6037 destroy: function destroy() { 6038 var swiper = this; 6039 var _swiper$navigation2 = swiper.navigation, 6040 $nextEl = _swiper$navigation2.$nextEl, 6041 $prevEl = _swiper$navigation2.$prevEl; 6042 6043 if ($nextEl && $nextEl.length) { 6044 $nextEl.off('click', swiper.navigation.onNextClick); 6045 $nextEl.removeClass(swiper.params.navigation.disabledClass); 6046 } 6047 6048 if ($prevEl && $prevEl.length) { 6049 $prevEl.off('click', swiper.navigation.onPrevClick); 6050 $prevEl.removeClass(swiper.params.navigation.disabledClass); 6051 } 6052 } 6053 }; 6054 var Navigation$1 = { 6055 name: 'navigation', 6056 params: { 6057 navigation: { 6058 nextEl: null, 6059 prevEl: null, 6060 hideOnClick: false, 6061 disabledClass: 'swiper-button-disabled', 6062 hiddenClass: 'swiper-button-hidden', 6063 lockClass: 'swiper-button-lock' 6064 } 6065 }, 6066 create: function create() { 6067 var swiper = this; 6068 bindModuleMethods(swiper, { 6069 navigation: _extends({}, Navigation) 6070 }); 6071 }, 6072 on: { 6073 init: function init(swiper) { 6074 swiper.navigation.init(); 6075 swiper.navigation.update(); 6076 }, 6077 toEdge: function toEdge(swiper) { 6078 swiper.navigation.update(); 6079 },
6080 fromEdge: function fromEdge(swiper) { 6081 swiper.navigation.update(); 6082 }, 6083 destroy: function destroy(swiper) { 6084 swiper.navigation.destroy(); 6085 }, 6086 click: function click(swiper, e) { 6087 var _swiper$navigation3 = swiper.navigation, 6088 $nextEl = _swiper$navigation3.$nextEl, 6089 $prevEl = _swiper$navigation3.$prevEl; 6090 6091 if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) { 6092 var isHidden; 6093 6094 if ($nextEl) { 6095 isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass); 6096 } else if ($prevEl) { 6097 isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass); 6098 } 6099 6100 if (isHidden === true) { 6101 swiper.emit('navigationShow'); 6102 } else { 6103 swiper.emit('navigationHide'); 6104 } 6105 6106 if ($nextEl) { 6107 $nextEl.toggleClass(swiper.params.navigation.hiddenClass); 6108 } 6109 6110 if ($prevEl) { 6111 $prevEl.toggleClass(swiper.params.navigation.hiddenClass); 6112 } 6113 } 6114 } 6115 } 6116 }; 6117 6118 var Pagination = { 6119 update: function update() { 6120 // Render || Update Pagination bullets/items 6121 var swiper = this; 6122 var rtl = swiper.rtl; 6123 var params = swiper.params.pagination; 6124 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 6125 var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 6126 var $el = swiper.pagination.$el; // Current/Total 6127 6128 var current; 6129 var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 6130 6131 if (swiper.params.loop) { 6132 current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); 6133 6134 if (current > slidesLength - 1 - swiper.loopedSlides * 2) { 6135 current -= slidesLength - swiper.loopedSlides * 2; 6136 } 6137 6138 if (current > total - 1) current -= total; 6139 if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current; 6140 } else if (typeof swiper.snapIndex !== 'undefined') { 6141 current = swiper.snapIndex; 6142 } else { 6143 current = swiper.activeIndex || 0; 6144 } // Types 6145 6146 6147 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 6148 var bullets = swiper.pagination.bullets; 6149 var firstIndex; 6150 var lastIndex; 6151 var midIndex; 6152 6153 if (params.dynamicBullets) { 6154 swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); 6155 $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px"); 6156 6157 if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { 6158 swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex; 6159 6160 if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) { 6161 swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1; 6162 } else if (swiper.pagination.dynamicBulletIndex < 0) { 6163 swiper.pagination.dynamicBulletIndex = 0; 6164 } 6165 } 6166 6167 firstIndex = current - swiper.pagination.dynamicBulletIndex; 6168 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 6169 midIndex = (lastIndex + firstIndex) / 2; 6170 } 6171 6172 bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main"); 6173 6174 if ($el.length > 1) { 6175 bullets.each(function (bullet) { 6176 var $bullet = $(bullet); 6177 var bulletIndex = $bullet.index(); 6178 6179 if (bulletIndex === current) { 6180 $bullet.addClass(params.bulletActiveClass); 6181 } 6182 6183 if (params.dynamicBullets) { 6184 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 6185 $bullet.addClass(params.bulletActiveClass + "-main"); 6186 } 6187 6188 if (bulletIndex === firstIndex) { 6189 $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); 6190 } 6191 6192 if (bulletIndex === lastIndex) { 6193 $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); 6194 } 6195 } 6196 }); 6197 } else { 6198 var $bullet = bullets.eq(current); 6199 var bulletIndex = $bullet.index(); 6200 $bullet.addClass(params.bulletActiveClass); 6201 6202 if (params.dynamicBullets) { 6203 var $firstDisplayedBullet = bullets.eq(firstIndex); 6204 var $lastDisplayedBullet = bullets.eq(lastIndex); 6205 6206 for (var i = firstIndex; i <= lastIndex; i += 1) { 6207 bullets.eq(i).addClass(params.bulletActiveClass + "-main"); 6208 } 6209 6210 if (swiper.params.loop) { 6211 if (bulletIndex >= bullets.length - params.dynamicMainBullets) { 6212 for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) { 6213 bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + "-main"); 6214 } 6215 6216 bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + "-prev"); 6217 } else { 6218 $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); 6219 $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); 6220 } 6221 } else { 6222 $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); 6223 $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); 6224 } 6225 } 6226 } 6227 6228 if (params.dynamicBullets) { 6229 var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 6230 var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize; 6231 var offsetProp = rtl ? 'right' : 'left'; 6232 bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + "px"); 6233 } 6234 } 6235 6236 if (params.type === 'fraction') { 6237 $el.find("." + params.currentClass).text(params.formatFractionCurrent(current + 1)); 6238 $el.find("." + params.totalClass).text(params.formatFractionTotal(total)); 6239 } 6240 6241 if (params.type === 'progressbar') { 6242 var progressbarDirection; 6243 6244 if (params.progressbarOpposite) { 6245 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 6246 } else { 6247 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 6248 } 6249 6250 var scale = (current + 1) / total; 6251 var scaleX = 1; 6252 var scaleY = 1; 6253 6254 if (progressbarDirection === 'horizontal') { 6255 scaleX = scale; 6256 } else { 6257 scaleY = scale; 6258 } 6259 6260 $el.find("." + params.progressbarFillClass).transform("translate3d(0,
62600,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed); 6261 } 6262 6263 if (params.type === 'custom' && params.renderCustom) { 6264 $el.html(params.renderCustom(swiper, current + 1, total)); 6265 swiper.emit('paginationRender', $el[0]); 6266 } else { 6267 swiper.emit('paginationUpdate', $el[0]); 6268 } 6269 6270 $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 6271 }, 6272 render: function render() { 6273 // Render Container 6274 var swiper = this; 6275 var params = swiper.params.pagination; 6276 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 6277 var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 6278 var $el = swiper.pagination.$el; 6279 var paginationHTML = ''; 6280 6281 if (params.type === 'bullets') { 6282 var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 6283 6284 for (var i = 0; i < numberOfBullets; i += 1) { 6285 if (params.renderBullet) { 6286 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 6287 } else { 6288 paginationHTML += "<" + params.bulletElement + " class=\"" + params.bulletClass + "\"></" + params.bulletElement + ">"; 6289 } 6290 } 6291 6292 $el.html(paginationHTML); 6293 swiper.pagination.bullets = $el.find("." + params.bulletClass); 6294 } 6295 6296 if (params.type === 'fraction') { 6297 if (params.renderFraction) { 6298 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 6299 } else { 6300 paginationHTML = "<span class=\"" + params.currentClass + "\"></span>" + ' / ' + ("<span class=\"" + params.totalClass + "\"></span>"); 6301 } 6302 6303 $el.html(paginationHTML); 6304 } 6305 6306 if (params.type === 'progressbar') { 6307 if (params.renderProgressbar) { 6308 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 6309 } else { 6310 paginationHTML = "<span class=\"" + params.progressbarFillClass + "\"></span>"; 6311 } 6312 6313 $el.html(paginationHTML); 6314 } 6315 6316 if (params.type !== 'custom') { 6317 swiper.emit('paginationRender', swiper.pagination.$el[0]); 6318 } 6319 }, 6320 init: function init() { 6321 var swiper = this; 6322 var params = swiper.params.pagination; 6323 if (!params.el) return; 6324 var $el = $(params.el); 6325 if ($el.length === 0) return; 6326 6327 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) { 6328 $el = swiper.$el.find(params.el); 6329 } 6330 6331 if (params.type === 'bullets' && params.clickable) { 6332 $el.addClass(params.clickableClass); 6333 } 6334 6335 $el.addClass(params.modifierClass + params.type); 6336 6337 if (params.type === 'bullets' && params.dynamicBullets) { 6338 $el.addClass("" + params.modifierClass + params.type + "-dynamic"); 6339 swiper.pagination.dynamicBulletIndex = 0; 6340 6341 if (params.dynamicMainBullets < 1) { 6342 params.dynamicMainBullets = 1; 6343 } 6344 } 6345 6346 if (params.type === 'progressbar' && params.progressbarOpposite) { 6347 $el.addClass(params.progressbarOppositeClass); 6348 } 6349 6350 if (params.clickable) { 6351 $el.on('click', "." + params.bulletClass, function onClick(e) { 6352 e.preventDefault(); 6353 var index = $(this).index() * swiper.params.slidesPerGroup; 6354 if (swiper.params.loop) index += swiper.loopedSlides; 6355 swiper.slideTo(index); 6356 }); 6357 } 6358 6359 extend$1(swiper.pagination, { 6360 $el: $el, 6361 el: $el[0] 6362 }); 6363 }, 6364 destroy: function destroy() { 6365 var swiper = this; 6366 var params = swiper.params.pagination; 6367 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 6368 var $el = swiper.pagination.$el; 6369 $el.removeClass(params.hiddenClass); 6370 $el.removeClass(params.modifierClass + params.type); 6371 if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass); 6372 6373 if (params.clickable) { 6374 $el.off('click', "." + params.bulletClass); 6375 } 6376 } 6377 }; 6378 var Pagination$1 = { 6379 name: 'pagination', 6380 params: { 6381 pagination: { 6382 el: null, 6383 bulletElement: 'span', 6384 clickable: false, 6385 hideOnClick: false, 6386 renderBullet: null, 6387 renderProgressbar: null, 6388 renderFraction: null, 6389 renderCustom: null, 6390 progressbarOpposite: false, 6391 type: 'bullets', 6392 // 'bullets' or 'progressbar' or 'fraction' or 'custom' 6393 dynamicBullets: false, 6394 dynamicMainBullets: 1, 6395 formatFractionCurrent: function formatFractionCurrent(number) { 6396 return number; 6397 }, 6398 formatFractionTotal: function formatFractionTotal(number) { 6399 return number; 6400 }, 6401 bulletClass: 'swiper-pagination-bullet', 6402 bulletActiveClass: 'swiper-pagination-bullet-active', 6403 modifierClass: 'swiper-pagination-', 6404 // NEW 6405 currentClass: 'swiper-pagination-current', 6406 totalClass: 'swiper-pagination-total', 6407 hiddenClass: 'swiper-pagination-hidden', 6408 progressbarFillClass: 'swiper-pagination-progressbar-fill', 6409 progressbarOppositeClass: 'swiper-pagination-progressbar-opposite', 6410 clickableClass: 'swiper-pagination-clickable', 6411 // NEW 6412 lockClass: 'swiper-pagination-lock' 6413 } 6414 }, 6415 create: function create() { 6416 var swiper = this; 6417 bindModuleMethods(swiper, { 6418 pagination: _extends({ 6419 dynamicBulletIndex: 0 6420 }, Pagination) 6421 }); 6422 }, 6423 on: { 6424 init: function init(swiper) { 6425 swiper.pagination.init(); 6426 swiper.pagination.render(); 6427 swiper.pagination.update(); 6428 }, 6429 activeIndexChange: function activeIndexChange(swiper) { 6430 if (swiper.params.loop) { 6431 swiper.pagination.update(); 6432 } else if (typeof swiper.snapIndex === 'undefined') { 6433 swiper.pagination.update(); 6434 } 6435 }, 6436 snapIndexChange: function snapIndexChange(swiper) { 6437 if (!swiper.params.loop) { 6438 swiper.pagination.update(); 6439 } 6440 }, 6441 slidesLengthChange: function slidesLengthChange(swiper) { 6442 if (swiper.params.loop) { 6443 swiper.pagination.render(); 6444 swiper.pagination.update(); 6445 } 6446 }, 6447 snapGridLengthChange: function snapGridLengthChange(swiper) { 6448 if (!swiper.params.loop) { 6449 swiper.pagination.render(); 6450 swiper.pagination.update(); 6451 } 6452 }, 6453 destroy: function destroy(swiper) { 6454 swiper.pagination.destroy(); 6455 }, 6456 click: function click(swiper, e) { 6457 if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) { 6458 var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass); 6459 6460 if (isHidden === true) { 6461 swiper.emit('paginationShow'); 6462 } else { 6463 swiper.emit('paginationHide'); 6464 } 6465 6466 swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass); 6467 } 6468 } 6469 } 6470 }; 6471 6472 var Scrollbar = { 6473 setTranslate: function setTranslate() { 6474 var swiper = this; 6475 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 6476 var scrollbar = swiper.scrollbar, 6477 rtl = swiper.rtlTranslate, 6478 progress = swiper.progress; 6479 var dragSize = scrollbar.dragSize, 6480 trackSize = scrollbar.trackSize, 6481 $dragEl = scrollbar.$dragEl, 6482 $el = scrollbar.$el; 6483 var params = swiper.params.scrollbar; 6484 var newSize = dragSize; 6485 var newPos = (trackSize - dragSize) * progress; 6486 6487 if (rtl) { 6488 newPos = -newPos; 6489 6490 if (newPos > 0) { 6491 newSize = dragSize - newPos; 6492 newPos = 0; 6493 } else if (-newPos + dragSize > trackSize) { 6494 newSize = trackSize + newPos; 6495 } 6496 } else if (newPos < 0) { 6497 newSize = dragSize + newPos; 6498 newPos = 0; 6499 } else if (newPos + dragSize > trackSize) { 6500 newSize = trackSize - newPos; 6501 } 6502 6503 if (swiper.isHorizontal()) { 6504 $dragEl.transform("translate3d(" + newPos + "px, 0, 0)"); 6505 $dragEl[0].style.width = newSize + "px"; 6506 } else { 6507 $dragEl.transform("translate3d(0px, " + newPos + "px, 0)"); 6508 $dragEl[0].style.height = newSize + "px"; 6509 } 6510 6511 if (params.hide) { 6512 clearTimeout(swiper.scrollbar.timeout); 6513 $el[0].style.opacity = 1; 6514 swiper.scrollbar.timeout = setTimeout(function () { 6515 $el[0].style.opacity = 0; 6516 $el.transition(400); 6517 }, 1000); 6518 } 6519 }, 6520 setTransition: function setTransition(duration) { 6521 var swiper = this; 6522 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 6523 swiper.scrollbar.$dragEl.transition(duration); 6524 }, 6525 updateSize: function updateSize() { 6526 var swiper = this; 6527 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 6528 var scrollbar = swiper.scrollbar; 6529 var $dragEl = scrollbar.$dragEl, 6530 $el = scrollbar.$el; 6531 $dragEl[0].style.width = ''; 6532 $dragEl[0].style.height = ''; 6533 var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; 6534 var divider = swiper.size / swiper.virtualSize; 6535 var moveDivider = divider * (trackSize / swiper.size); 6536 var dragSize; 6537 6538 if (swiper.params.scrollbar.dragSize === 'auto') { 6539 dragSize = trackSize * divider; 6540 } else { 6541 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 6542 } 6543 6544 if (swiper.isHorizontal()) { 6545 $dragEl[0].style.width = dragSize + "px"; 6546 } else { 6547 $dragEl[0].style.height = dragSize + "px"; 6548 } 6549 6550 if (divider >= 1) { 6551 $el[0].style.display = 'none'; 6552 } else { 6553 $el[0].style.display = ''; 6554 } 6555 6556 if (swiper.params.scrollbar.hide) { 6557 $el[0].style.opacity = 0; 6558 } 6559 6560 extend$1(scrollbar, { 6561 trackSize: trackSize, 6562 divider: divider, 6563 moveDivider: moveDivider, 6564 dragSize: dragSize 6565 }); 6566 scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); 6567 }, 6568 getPointerPosition: function getPointerPosition(e) { 6569 var swiper = this; 6570 6571 if (swiper.isHorizontal()) { 6572 return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX; 6573 } 6574 6575 return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY; 6576 }, 6577 setDragPosition: function setDragPosition(e) { 6578 var swiper = this; 6579 var scrollbar = swiper.scrollbar, 6580 rtl = swiper.rtlTranslate; 6581 var $el = scrollbar.$el, 6582 dragSize = scrollbar.dragSize, 6583 trackSize = scrollbar.trackSize, 6584 dragStartPos = scrollbar.dragStartPos; 6585 var positionRatio; 6586 positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 6587 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 6588 6589 if (rtl) { 6590 positionRatio = 1 - positionRatio; 6591 } 6592 6593 var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 6594 swiper.updateProgress(position); 6595 swiper.setTranslate(position); 6596 swiper.updateActiveIndex(); 6597 swiper.updateSlidesClasses(); 6598 }, 6599 onDragStart: function onDragStart(e) { 6600 var swiper = this; 6601 var params = swiper.params.scrollbar; 6602 var scrollbar = swiper.scrollbar, 6603 $wrapperEl = swiper.$wrapperEl; 6604 var $el = scrollbar.$el, 6605 $dragEl = scrollbar.$dragEl; 6606 swiper.scrollbar.isTouched = true; 6607 swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 6608 e.preventDefault(); 6609 e.stopPropagation(); 6610 $wrapperEl.transition(100); 6611 $dragEl.transition(100); 6612 scrollbar.setDragPosition(e); 6613 clearTimeout(swiper.scrollbar.dragTimeout); 6614 $el.transition(0); 6615 6616 if (params.hide) { 6617 $el.css('opacity', 1); 6618 } 6619 6620 if (swiper.params.cssMode) { 6621 swiper.$wrapperEl.css('scroll-snap-type', 'none'); 6622 } 6623 6624 swiper.emit('scrollbarDragStart', e); 6625 }, 6626 onDragMove: function onDragMove(e) { 6627 var swiper = this; 6628 var scrollbar = swiper.scrollbar, 6629 $wrapperEl = swiper.$wrapperEl; 6630 var $el = scrollbar.$el, 6631 $dragEl = scrollbar.$dragEl; 6632 if (!swiper.scrollbar.isTouched) return; 6633 if (e.preventDefault) e.preventDefault();else e.returnValue = false;
6634 scrollbar.setDragPosition(e); 6635 $wrapperEl.transition(0); 6636 $el.transition(0); 6637 $dragEl.transition(0); 6638 swiper.emit('scrollbarDragMove', e); 6639 }, 6640 onDragEnd: function onDragEnd(e) { 6641 var swiper = this; 6642 var params = swiper.params.scrollbar; 6643 var scrollbar = swiper.scrollbar, 6644 $wrapperEl = swiper.$wrapperEl; 6645 var $el = scrollbar.$el; 6646 if (!swiper.scrollbar.isTouched) return; 6647 swiper.scrollbar.isTouched = false; 6648 6649 if (swiper.params.cssMode) { 6650 swiper.$wrapperEl.css('scroll-snap-type', ''); 6651 $wrapperEl.transition(''); 6652 } 6653 6654 if (params.hide) { 6655 clearTimeout(swiper.scrollbar.dragTimeout); 6656 swiper.scrollbar.dragTimeout = nextTick(function () { 6657 $el.css('opacity', 0); 6658 $el.transition(400); 6659 }, 1000); 6660 } 6661 6662 swiper.emit('scrollbarDragEnd', e); 6663 6664 if (params.snapOnRelease) { 6665 swiper.slideToClosest(); 6666 } 6667 }, 6668 enableDraggable: function enableDraggable() { 6669 var swiper = this; 6670 if (!swiper.params.scrollbar.el) return; 6671 var document = getDocument(); 6672 var scrollbar = swiper.scrollbar, 6673 touchEventsTouch = swiper.touchEventsTouch, 6674 touchEventsDesktop = swiper.touchEventsDesktop, 6675 params = swiper.params, 6676 support = swiper.support; 6677 var $el = scrollbar.$el; 6678 var target = $el[0]; 6679 var activeListener = support.passiveListener && params.passiveListeners ? { 6680 passive: false, 6681 capture: false 6682 } : false; 6683 var passiveListener = support.passiveListener && params.passiveListeners ? { 6684 passive: true, 6685 capture: false 6686 } : false; 6687 6688 if (!support.touch) { 6689 target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); 6690 document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); 6691 document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); 6692 } else { 6693 target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); 6694 target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); 6695 target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); 6696 } 6697 }, 6698 disableDraggable: function disableDraggable() { 6699 var swiper = this; 6700 if (!swiper.params.scrollbar.el) return; 6701 var document = getDocument(); 6702 var scrollbar = swiper.scrollbar, 6703 touchEventsTouch = swiper.touchEventsTouch, 6704 touchEventsDesktop = swiper.touchEventsDesktop, 6705 params = swiper.params, 6706 support = swiper.support; 6707 var $el = scrollbar.$el; 6708 var target = $el[0]; 6709 var activeListener = support.passiveListener && params.passiveListeners ? { 6710 passive: false, 6711 capture: false 6712 } : false; 6713 var passiveListener = support.passiveListener && params.passiveListeners ? { 6714 passive: true, 6715 capture: false 6716 } : false; 6717 6718 if (!support.touch) { 6719 target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); 6720 document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); 6721 document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); 6722 } else { 6723 target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); 6724 target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); 6725 target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); 6726 } 6727 }, 6728 init: function init() { 6729 var swiper = this; 6730 if (!swiper.params.scrollbar.el) return; 6731 var scrollbar = swiper.scrollbar, 6732 $swiperEl = swiper.$el; 6733 var params = swiper.params.scrollbar; 6734 var $el = $(params.el); 6735 6736 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { 6737 $el = $swiperEl.find(params.el); 6738 } 6739 6740 var $dragEl = $el.find("." + swiper.params.scrollbar.dragClass); 6741 6742 if ($dragEl.length === 0) { 6743 $dragEl = $("<div class=\"" + swiper.params.scrollbar.dragClass + "\"></div>"); 6744 $el.append($dragEl); 6745 } 6746 6747 extend$1(scrollbar, { 6748 $el: $el, 6749 el: $el[0], 6750 $dragEl: $dragEl, 6751 dragEl: $dragEl[0] 6752 }); 6753 6754 if (params.draggable) { 6755 scrollbar.enableDraggable(); 6756 } 6757 }, 6758 destroy: function destroy() { 6759 var swiper = this; 6760 swiper.scrollbar.disableDraggable(); 6761 } 6762 }; 6763 var Scrollbar$1 = { 6764 name: 'scrollbar', 6765 params: { 6766 scrollbar: { 6767 el: null, 6768 dragSize: 'auto', 6769 hide: false, 6770 draggable: false, 6771 snapOnRelease: true, 6772 lockClass: 'swiper-scrollbar-lock', 6773 dragClass: 'swiper-scrollbar-drag' 6774 } 6775 }, 6776 create: function create() { 6777 var swiper = this; 6778 bindModuleMethods(swiper, { 6779 scrollbar: _extends({ 6780 isTouched: false, 6781 timeout: null, 6782 dragTimeout: null 6783 }, Scrollbar) 6784 }); 6785 }, 6786 on: { 6787 init: function init(swiper) { 6788 swiper.scrollbar.init(); 6789 swiper.scrollbar.updateSize(); 6790 swiper.scrollbar.setTranslate(); 6791 }, 6792 update: function update(swiper) { 6793 swiper.scrollbar.updateSize(); 6794 }, 6795 resize: function resize(swiper) { 6796 swiper.scrollbar.updateSize(); 6797 }, 6798 observerUpdate: function observerUpdate(swiper) { 6799 swiper.scrollbar.updateSize(); 6800 }, 6801 setTranslate: function setTranslate(swiper) { 6802 swiper.scrollbar.setTranslate(); 6803 }, 6804 setTransition: function setTransition(swiper, duration) { 6805 swiper.scrollbar.setTransition(duration); 6806 }, 6807 destroy: function destroy(swiper) { 6808 swiper.scrollbar.destroy(); 6809 } 6810 } 6811 }; 6812 6813 var Parallax = { 6814 setTransform: function setTransform(el, progress) { 6815 var swiper = this; 6816 var rtl = swiper.rtl; 6817 var $el = $(el); 6818 var rtlFactor = rtl ? -1 : 1; 6819 var p = $el.attr('data-swiper-parallax') || '0'; 6820 var x = $el.attr('data-swiper-parallax-x'); 6821 var y = $el.attr('data-swiper-parallax-y'); 6822 var scale = $el.attr('data-swiper-parallax-scale'); 6823 var opacity = $el.attr('data-swiper-parallax-opacity'); 6824 6825 if (x || y) { 6826 x = x || '0'; 6827 y = y || '0'; 6828 } else if (swiper.isHorizontal()) { 6829 x = p; 6830 y = '0'; 6831 } else { 6832 y = p; 6833 x = '0'; 6834 } 6835 6836 if (x.indexOf('%') >= 0) { 6837 x = parseInt(x, 10) * progress * rtlFactor + "%"; 6838 } else { 6839 x = x * progress * rtlFactor + "px"; 6840 } 6841 6842 if (y.indexOf('%') >= 0) { 6843 y = parseInt(y, 10) * progress + "%"; 6844 } else { 6845 y = y * progress + "px"; 6846 } 6847 6848 if (typeof opacity !== 'undefined' && opacity !== null) { 6849 var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); 6850 $el[0].style.opacity = currentOpacity; 6851 } 6852 6853 if (typeof scale === 'undefined' || scale === null) { 6854 $el.transform("translate3d(" + x + ", " + y + ", 0px)"); 6855 } else { 6856 var currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); 6857 $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"); 6858 } 6859 }, 6860 setTranslate: function setTranslate() { 6861 var swiper = this; 6862 var $el = swiper.$el, 6863 slides = swiper.slides, 6864 progress = swiper.progress, 6865 snapGrid = swiper.snapGrid; 6866 $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { 6867 swiper.parallax.setTransform(el, progress); 6868 }); 6869 slides.each(function (slideEl, slideIndex) { 6870 var slideProgress = slideEl.progress; 6871 6872 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 6873 slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); 6874 } 6875 6876 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 6877 $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { 6878 swiper.parallax.setTransform(el, slideProgress); 6879 }); 6880 }); 6881 }, 6882 setTransition: function setTransition(duration) { 6883 if (duration === void 0) { 6884 duration = this.params.speed; 6885 } 6886 6887 var swiper = this; 6888 var $el = swiper.$el; 6889 $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) { 6890 var $parallaxEl = $(parallaxEl); 6891 var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; 6892 if (duration === 0) parallaxDuration = 0; 6893 $parallaxEl.transition(parallaxDuration); 6894 }); 6895 } 6896 }; 6897 var Parallax$1 = { 6898 name: 'parallax', 6899 params: { 6900 parallax: { 6901 enabled: false 6902 } 6903 }, 6904 create: function create() { 6905 var swiper = this; 6906 bindModuleMethods(swiper, { 6907 parallax: _extends({}, Parallax) 6908 }); 6909 }, 6910 on: { 6911 beforeInit: function beforeInit(swiper) { 6912 if (!swiper.params.parallax.enabled) return; 6913 swiper.params.watchSlidesProgress = true; 6914 swiper.originalParams.watchSlidesProgress = true; 6915 }, 6916 init: function init(swiper) { 6917 if (!swiper.params.parallax.enabled) return; 6918 swiper.parallax.setTranslate(); 6919 }, 6920 setTranslate: function setTranslate(swiper) { 6921 if (!swiper.params.parallax.enabled) return; 6922 swiper.parallax.setTranslate(); 6923 }, 6924 setTransition: function setTransition(swiper, duration) { 6925 if (!swiper.params.parallax.enabled) return; 6926 swiper.parallax.setTransition(duration); 6927 } 6928 } 6929 }; 6930 6931 var Zoom = { 6932 // Calc Scale From Multi-touches 6933 getDistanceBetweenTouches: function getDistanceBetweenTouches(e) { 6934 if (e.targetTouches.length < 2) return 1; 6935 var x1 = e.targetTouches[0].pageX; 6936 var y1 = e.targetTouches[0].pageY; 6937 var x2 = e.targetTouches[1].pageX; 6938 var y2 = e.targetTouches[1].pageY; 6939 var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); 6940 return distance; 6941 }, 6942 // Events 6943 onGestureStart: function onGestureStart(e) { 6944 var swiper = this; 6945 var support = swiper.support; 6946 var params = swiper.params.zoom; 6947 var zoom = swiper.zoom; 6948 var gesture = zoom.gesture; 6949 zoom.fakeGestureTouched = false;
6950 zoom.fakeGestureMoved = false; 6951 6952 if (!support.gestures) { 6953 if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { 6954 return; 6955 } 6956 6957 zoom.fakeGestureTouched = true; 6958 gesture.scaleStart = Zoom.getDistanceBetweenTouches(e); 6959 } 6960 6961 if (!gesture.$slideEl || !gesture.$slideEl.length) { 6962 gesture.$slideEl = $(e.target).closest("." + swiper.params.slideClass); 6963 if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 6964 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 6965 gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); 6966 gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 6967 6968 if (gesture.$imageWrapEl.length === 0) { 6969 gesture.$imageEl = undefined; 6970 return; 6971 } 6972 } 6973 6974 if (gesture.$imageEl) { 6975 gesture.$imageEl.transition(0); 6976 } 6977 6978 swiper.zoom.isScaling = true; 6979 }, 6980 onGestureChange: function onGestureChange(e) { 6981 var swiper = this; 6982 var support = swiper.support; 6983 var params = swiper.params.zoom; 6984 var zoom = swiper.zoom; 6985 var gesture = zoom.gesture; 6986 6987 if (!support.gestures) { 6988 if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { 6989 return; 6990 } 6991 6992 zoom.fakeGestureMoved = true; 6993 gesture.scaleMove = Zoom.getDistanceBetweenTouches(e); 6994 } 6995 6996 if (!gesture.$imageEl || gesture.$imageEl.length === 0) { 6997 if (e.type === 'gesturechange') zoom.onGestureStart(e); 6998 return; 6999 } 7000 7001 if (support.gestures) { 7002 zoom.scale = e.scale * zoom.currentScale; 7003 } else { 7004 zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale; 7005 } 7006 7007 if (zoom.scale > gesture.maxRatio) { 7008 zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5); 7009 } 7010 7011 if (zoom.scale < params.minRatio) { 7012 zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5); 7013 } 7014 7015 gesture.$imageEl.transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); 7016 }, 7017 onGestureEnd: function onGestureEnd(e) { 7018 var swiper = this; 7019 var device = swiper.device; 7020 var support = swiper.support; 7021 var params = swiper.params.zoom; 7022 var zoom = swiper.zoom; 7023 var gesture = zoom.gesture; 7024 7025 if (!support.gestures) { 7026 if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) { 7027 return; 7028 } 7029 7030 if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) { 7031 return; 7032 } 7033 7034 zoom.fakeGestureTouched = false; 7035 zoom.fakeGestureMoved = false; 7036 } 7037 7038 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 7039 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 7040 gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); 7041 zoom.currentScale = zoom.scale; 7042 zoom.isScaling = false; 7043 if (zoom.scale === 1) gesture.$slideEl = undefined; 7044 }, 7045 onTouchStart: function onTouchStart(e) { 7046 var swiper = this; 7047 var device = swiper.device; 7048 var zoom = swiper.zoom; 7049 var gesture = zoom.gesture, 7050 image = zoom.image; 7051 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 7052 if (image.isTouched) return; 7053 if (device.android && e.cancelable) e.preventDefault(); 7054 image.isTouched = true; 7055 image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 7056 image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 7057 }, 7058 onTouchMove: function onTouchMove(e) { 7059 var swiper = this; 7060 var zoom = swiper.zoom; 7061 var gesture = zoom.gesture, 7062 image = zoom.image, 7063 velocity = zoom.velocity; 7064 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 7065 swiper.allowClick = false;
vendor: 4,124 bytes, lines 7066-7158
7066 if (!image.isTouched || !gesture.$slideEl) return; 7067 7068 if (!image.isMoved) { 7069 image.width = gesture.$imageEl[0].offsetWidth; 7070 image.height = gesture.$imageEl[0].offsetHeight; 7071 image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0; 7072 image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0; 7073 gesture.slideWidth = gesture.$slideEl[0].offsetWidth; 7074 gesture.slideHeight = gesture.$slideEl[0].offsetHeight; 7075 gesture.$imageWrapEl.transition(0); 7076 7077 if (swiper.rtl) { 7078 image.startX = -image.startX; 7079 image.startY = -image.startY; 7080 } 7081 } // Define if we need image drag 7082 7083 7084 var scaledWidth = image.width * zoom.scale; 7085 var scaledHeight = image.height * zoom.scale; 7086 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 7087 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 7088 image.maxX = -image.minX; 7089 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 7090 image.maxY = -image.minY; 7091 image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; 7092 image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; 7093 7094 if (!image.isMoved && !zoom.isScaling) { 7095 if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) { 7096 image.isTouched = false; 7097 return; 7098 } 7099 7100 if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) { 7101 image.isTouched = false; 7102 return; 7103 } 7104 } 7105 7106 if (e.cancelable) { 7107 e.preventDefault(); 7108 } 7109 7110 e.stopPropagation(); 7111 image.isMoved = true; 7112 image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX; 7113 image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY; 7114 7115 if (image.currentX < image.minX) { 7116 image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8); 7117 } 7118 7119 if (image.currentX > image.maxX) { 7120 image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8); 7121 } 7122 7123 if (image.currentY < image.minY) { 7124 image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8); 7125 } 7126 7127 if (image.currentY > image.maxY) { 7128 image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8); 7129 } // Velocity 7130 7131 7132 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 7133 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 7134 if (!velocity.prevTime) velocity.prevTime = Date.now(); 7135 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 7136 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 7137 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 7138 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 7139 velocity.prevPositionX = image.touchesCurrent.x; 7140 velocity.prevPositionY = image.touchesCurrent.y; 7141 velocity.prevTime = Date.now(); 7142 gesture.$imageWrapEl.transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)"); 7143 }, 7144 onTouchEnd: function onTouchEnd() { 7145 var swiper = this; 7146 var zoom = swiper.zoom; 7147 var gesture = zoom.gesture, 7148 image = zoom.image, 7149 velocity = zoom.velocity; 7150 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 7151 7152 if (!image.isTouched || !image.isMoved) { 7153 image.isTouched = false; 7154 image.isMoved = false; 7155 return; 7156 } 7157 7158 image.isTouched = false;
7159 image.isMoved = false; 7160 var momentumDurationX = 300; 7161 var momentumDurationY = 300; 7162 var momentumDistanceX = velocity.x * momentumDurationX; 7163 var newPositionX = image.currentX + momentumDistanceX; 7164 var momentumDistanceY = velocity.y * momentumDurationY; 7165 var newPositionY = image.currentY + momentumDistanceY; // Fix duration 7166 7167 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 7168 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 7169 var momentumDuration = Math.max(momentumDurationX, momentumDurationY); 7170 image.currentX = newPositionX; 7171 image.currentY = newPositionY; // Define if we need image drag 7172 7173 var scaledWidth = image.width * zoom.scale; 7174 var scaledHeight = image.height * zoom.scale; 7175 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 7176 image.maxX = -image.minX; 7177 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 7178 image.maxY = -image.minY; 7179 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 7180 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 7181 gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)"); 7182 }, 7183 onTransitionEnd: function onTransitionEnd() { 7184 var swiper = this; 7185 var zoom = swiper.zoom; 7186 var gesture = zoom.gesture; 7187 7188 if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { 7189 if (gesture.$imageEl) { 7190 gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); 7191 } 7192 7193 if (gesture.$imageWrapEl) { 7194 gesture.$imageWrapEl.transform('translate3d(0,0,0)'); 7195 } 7196 7197 zoom.scale = 1; 7198 zoom.currentScale = 1; 7199 gesture.$slideEl = undefined; 7200 gesture.$imageEl = undefined; 7201 gesture.$imageWrapEl = undefined; 7202 } 7203 }, 7204 // Toggle Zoom 7205 toggle: function toggle(e) { 7206 var swiper = this; 7207 var zoom = swiper.zoom; 7208 7209 if (zoom.scale && zoom.scale !== 1) { 7210 // Zoom Out 7211 zoom.out(); 7212 } else { 7213 // Zoom In 7214 zoom.in(e); 7215 } 7216 }, 7217 in: function _in(e) { 7218 var swiper = this; 7219 var zoom = swiper.zoom; 7220 var params = swiper.params.zoom; 7221 var gesture = zoom.gesture, 7222 image = zoom.image; 7223 7224 if (!gesture.$slideEl) { 7225 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 7226 gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass); 7227 } else { 7228 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 7229 } 7230 7231 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 7232 gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); 7233 } 7234 7235 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 7236 gesture.$slideEl.addClass("" + params.zoomedSlideClass); 7237 var touchX; 7238 var touchY; 7239 var offsetX; 7240 var offsetY; 7241 var diffX; 7242 var diffY; 7243 var translateX; 7244 var translateY; 7245 var imageWidth; 7246 var imageHeight; 7247 var scaledWidth; 7248 var scaledHeight; 7249 var translateMinX; 7250 var translateMinY; 7251 var translateMaxX; 7252 var translateMaxY; 7253 var slideWidth; 7254 var slideHeight; 7255 7256 if (typeof image.touchesStart.x === 'undefined' && e) { 7257 touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; 7258 touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; 7259 } else { 7260 touchX = image.touchesStart.x; 7261 touchY = image.touchesStart.y; 7262 } 7263 7264 zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 7265 zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 7266 7267 if (e) { 7268 slideWidth = gesture.$slideEl[0].offsetWidth; 7269 slideHeight = gesture.$slideEl[0].offsetHeight; 7270 offsetX = gesture.$slideEl.offset().left; 7271 offsetY = gesture.$slideEl.offset().top; 7272 diffX = offsetX + slideWidth / 2 - touchX; 7273 diffY = offsetY + slideHeight / 2 - touchY; 7274 imageWidth = gesture.$imageEl[0].offsetWidth; 7275 imageHeight = gesture.$imageEl[0].offsetHeight; 7276 scaledWidth = imageWidth * zoom.scale; 7277 scaledHeight = imageHeight * zoom.scale; 7278 translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); 7279 translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); 7280 translateMaxX = -translateMinX; 7281 translateMaxY = -translateMinY; 7282 translateX = diffX * zoom.scale; 7283 translateY = diffY * zoom.scale; 7284 7285 if (translateX < translateMinX) { 7286 translateX = translateMinX; 7287 } 7288 7289 if (translateX > translateMaxX) { 7290 translateX = translateMaxX; 7291 } 7292 7293 if (translateY < translateMinY) { 7294 translateY = translateMinY; 7295 } 7296 7297 if (translateY > translateMaxY) { 7298 translateY = translateMaxY; 7299 } 7300 } else { 7301 translateX = 0; 7302 translateY = 0; 7303 } 7304 7305 gesture.$imageWrapEl.transition(300).transform("translate3d(" + translateX + "px, " + translateY + "px,0
7305)"); 7306 gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); 7307 }, 7308 out: function out() { 7309 var swiper = this; 7310 var zoom = swiper.zoom; 7311 var params = swiper.params.zoom; 7312 var gesture = zoom.gesture; 7313 7314 if (!gesture.$slideEl) { 7315 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 7316 gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass); 7317 } else { 7318 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 7319 } 7320 7321 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 7322 gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); 7323 } 7324 7325 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 7326 zoom.scale = 1; 7327 zoom.currentScale = 1; 7328 gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); 7329 gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); 7330 gesture.$slideEl.removeClass("" + params.zoomedSlideClass); 7331 gesture.$slideEl = undefined; 7332 }, 7333 toggleGestures: function toggleGestures(method) { 7334 var swiper = this; 7335 var zoom = swiper.zoom; 7336 var selector = zoom.slideSelector, 7337 passive = zoom.passiveListener; 7338 swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive); 7339 swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive); 7340 swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive); 7341 }, 7342 enableGestures: function enableGestures() { 7343 if (this.zoom.gesturesEnabled) return; 7344 this.zoom.gesturesEnabled = true; 7345 this.zoom.toggleGestures('on'); 7346 }, 7347 disableGestures: function disableGestures() { 7348 if (!this.zoom.gesturesEnabled) return; 7349 this.zoom.gesturesEnabled = false; 7350 this.zoom.toggleGestures('off'); 7351 }, 7352 // Attach/Detach Events 7353 enable: function enable() { 7354 var swiper = this; 7355 var support = swiper.support; 7356 var zoom = swiper.zoom; 7357 if (zoom.enabled) return; 7358 zoom.enabled = true; 7359 var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { 7360 passive: true, 7361 capture: false 7362 } : false; 7363 var activeListenerWithCapture = support.passiveListener ? { 7364 passive: false, 7365 capture: true 7366 } : true; 7367 var slideSelector = "." + swiper.params.slideClass; 7368 swiper.zoom.passiveListener = passiveListener; 7369 swiper.zoom.slideSelector = slideSelector; // Scale image 7370 7371 if (support.gestures) { 7372 swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener); 7373 swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener); 7374 } else if (swiper.touchEvents.start === 'touchstart') { 7375 swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); 7376 swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); 7377 swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); 7378 7379 if (swiper.touchEvents.cancel) { 7380 swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); 7381 } 7382 } // Move image 7383 7384 7385 swiper.$wrapperEl.on(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture); 7386 }, 7387 disable: function disable() { 7388 var swiper = this; 7389 var zoom = swiper.zoom; 7390 if (!zoom.enabled) return; 7391 var support = swiper.support; 7392 swiper.zoom.enabled = false; 7393 var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { 7394 passive: true, 7395 capture: false 7396 } : false; 7397 var activeListenerWithCapture = support.passiveListener ? { 7398 passive: false, 7399 capture: true 7400 } : true; 7401 var slideSelector = "." + swiper.params.slideClass; // Scale image 7402 7403 if (support.gestures) { 7404 swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener); 7405 swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener); 7406 } else if (swiper.touchEvents.start === 'touchstart') { 7407 swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); 7408 swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); 7409 swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); 7410 7411 if (swiper.touchEvents.cancel) { 7412 swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); 7413 } 7414 } // Move image 7415 7416 7417 swiper.$wrapperEl.off(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture); 7418 } 7419 }; 7420 var Zoom$1 = { 7421 name: 'zoom', 7422 params: { 7423 zoom: { 7424 enabled: false, 7425 maxRatio: 3, 7426 minRatio: 1, 7427 toggle: true, 7428 containerClass: 'swiper-zoom-container', 7429 zoomedSlideClass: 'swiper-slide-zoomed' 7430 } 7431 }, 7432 create: function create() { 7433 var swiper = this; 7434 bindModuleMethods(swiper, { 7435 zoom: _extends({ 7436 enabled: false, 7437 scale: 1, 7438 currentScale: 1, 7439 isScaling: false, 7440 gesture: { 7441 $slideEl: undefined, 7442 slideWidth: undefined, 7443 slideHeight: undefined, 7444 $imageEl: undefined, 7445 $imageWrapEl: undefined, 7446 maxRatio: 3 7447 }, 7448 image: { 7449 isTouched: undefined, 7450 isMoved: undefined, 7451 currentX: undefined, 7452 currentY: undefined, 7453 minX: undefined, 7454 minY: undefined, 7455 maxX: undefined, 7456 maxY: undefined, 7457 width: undefined, 7458 height: undefined, 7459 startX: undefined, 7460 startY: undefined, 7461 touchesStart: {}, 7462 touchesCurrent: {} 7463 }, 7464 velocity: { 7465 x: undefined, 7466 y: undefined, 7467 prevPositionX: undefined, 7468 prevPositionY: undefined, 7469 prevTime: undefined 7470 } 7471 }, Zoom) 7472 }); 7473 var scale = 1; 7474 Object.defineProperty(swiper.zoom, 'scale', { 7475 get: function get() { 7476 return scale; 7477 }, 7478 set: function set(value) { 7479 if (scale !== value) { 7480 var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined; 7481 var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined; 7482 swiper.emit('zoomChange', value, imageEl, slideEl); 7483 } 7484 7485 scale = value; 7486 } 7487 }); 7488 }, 7489 on: { 7490 init: function init(swiper) { 7491 if (swiper.params.zoom.enabled) { 7492 swiper.zoom.enable(); 7493 } 7494 }, 7495 destroy: function destroy(swiper) { 7496 swiper.zoom.disable(); 7497 }, 7498 touchStart: function touchStart(swiper, e) { 7499 if (!swiper.zoom.enabled) return; 7500 swiper.zoom.onTouchStart(e); 7501 }, 7502 touchEnd: function touchEnd(swiper, e) { 7503 if (!swiper.zoom.enabled) return; 7504 swiper.zoom.onTouchEnd(e); 7505 }, 7506 doubleTap: function doubleTap(swiper, e) { 7507 if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 7508 swiper.zoom.toggle(e); 7509 } 7510 }, 7511 transitionEnd: function transitionEnd(swiper) { 7512 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 7513 swiper.zoom.onTransitionEnd(); 7514 } 7515 }, 7516 slideChange: function slideChange(swiper) { 7517 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 7518 swiper.zoom.onTransitionEnd(); 7519 } 7520 } 7521 } 7522 }; 7523 7524 var Lazy = {
7525 loadInSlide: function loadInSlide(index, loadInDuplicate) { 7526 if (loadInDuplicate === void 0) { 7527 loadInDuplicate = true; 7528 } 7529 7530 var swiper = this; 7531 var params = swiper.params.lazy; 7532 if (typeof index === 'undefined') return; 7533 if (swiper.slides.length === 0) return; 7534 var isVirtual = swiper.virtual && swiper.params.virtual.enabled; 7535 var $slideEl = isVirtual ? swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + index + "\"]") : swiper.slides.eq(index); 7536 var $images = $slideEl.find("." + params.elementClass + ":not(." + params.loadedClass + "):not(." + params.loadingClass + ")"); 7537 7538 if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { 7539 $images.push($slideEl[0]); 7540 } 7541 7542 if ($images.length === 0) return; 7543 $images.each(function (imageEl) { 7544 var $imageEl = $(imageEl); 7545 $imageEl.addClass(params.loadingClass); 7546 var background = $imageEl.attr('data-background'); 7547 var src = $imageEl.attr('data-src'); 7548 var srcset = $imageEl.attr('data-srcset'); 7549 var sizes = $imageEl.attr('data-sizes'); 7550 var $pictureEl = $imageEl.parent('picture'); 7551 swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () { 7552 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return; 7553 7554 if (background) { 7555 $imageEl.css('background-image', "url(\"" + background + "\")"); 7556 $imageEl.removeAttr('data-background'); 7557 } else { 7558 if (srcset) { 7559 $imageEl.attr('srcset', srcset); 7560 $imageEl.removeAttr('data-srcset'); 7561 } 7562 7563 if (sizes) { 7564 $imageEl.attr('sizes', sizes); 7565 $imageEl.removeAttr('data-sizes'); 7566 } 7567 7568 if ($pictureEl.length) { 7569 $pictureEl.children('source').each(function (sourceEl) { 7570 var $source = $(sourceEl); 7571 7572 if ($source.attr('data-srcset')) { 7573 $source.attr('srcset', $source.attr('data-srcset')); 7574 $source.removeAttr('data-srcset'); 7575 } 7576 }); 7577 } 7578 7579 if (src) { 7580 $imageEl.attr('src', src); 7581 $imageEl.removeAttr('data-src'); 7582 } 7583 } 7584 7585 $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); 7586 $slideEl.find("." + params.preloaderClass).remove(); 7587 7588 if (swiper.params.loop && loadInDuplicate) { 7589 var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); 7590 7591 if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { 7592 var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + swiper.params.slideDuplicateClass + ")"); 7593 swiper.lazy.loadInSlide(originalSlide.index(), false); 7594 } else { 7595 var duplicatedSlide = swiper.$wrapperEl.children("." + swiper.params.slideDuplicateClass + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]"); 7596 swiper.lazy.loadInSlide(duplicatedSlide.index(), false); 7597 } 7598 } 7599 7600 swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]); 7601 7602 if (swiper.params.autoHeight) { 7603 swiper.updateAutoHeight(); 7604 } 7605 }); 7606 swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]); 7607 }); 7608 }, 7609 load: function load() { 7610 var swiper = this; 7611 var $wrapperEl = swiper.$wrapperEl, 7612 swiperParams = swiper.params, 7613 slides = swiper.slides, 7614 activeIndex = swiper.activeIndex; 7615 var isVirtual = swiper.virtual && swiperParams.virtual.enabled; 7616 var params = swiperParams.lazy; 7617 var slidesPerView = swiperParams.slidesPerView; 7618 7619 if (slidesPerView === 'auto') { 7620 slidesPerView = 0; 7621 } 7622 7623 function slideExist(index) { 7624 if (isVirtual) { 7625 if ($wrapperEl.children("." + swiperParams.slideClass + "[data-swiper-slide-index=\"" + index + "\"]").length) { 7626 return true; 7627 } 7628 } else if (slides[index]) return true; 7629 7630 return false;
7631 } 7632 7633 function slideIndex(slideEl) { 7634 if (isVirtual) { 7635 return $(slideEl).attr('data-swiper-slide-index'); 7636 } 7637 7638 return $(slideEl).index(); 7639 } 7640 7641 if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true; 7642 7643 if (swiper.params.watchSlidesVisibility) { 7644 $wrapperEl.children("." + swiperParams.slideVisibleClass).each(function (slideEl) { 7645 var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index(); 7646 swiper.lazy.loadInSlide(index); 7647 }); 7648 } else if (slidesPerView > 1) { 7649 for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) { 7650 if (slideExist(i)) swiper.lazy.loadInSlide(i); 7651 } 7652 } else { 7653 swiper.lazy.loadInSlide(activeIndex); 7654 } 7655 7656 if (params.loadPrevNext) { 7657 if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) { 7658 var amount = params.loadPrevNextAmount; 7659 var spv = slidesPerView; 7660 var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); 7661 var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides 7662 7663 for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) { 7664 if (slideExist(_i)) swiper.lazy.loadInSlide(_i); 7665 } // Prev Slides 7666 7667 7668 for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) { 7669 if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2); 7670 } 7671 } else { 7672 var nextSlide = $wrapperEl.children("." + swiperParams.slideNextClass); 7673 if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide)); 7674 var prevSlide = $wrapperEl.children("." + swiperParams.slidePrevClass); 7675 if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide)); 7676 } 7677 } 7678 } 7679 }; 7680 var Lazy$1 = { 7681 name: 'lazy', 7682 params: { 7683 lazy: { 7684 enabled: false, 7685 loadPrevNext: false, 7686 loadPrevNextAmount: 1, 7687 loadOnTransitionStart: false, 7688 elementClass: 'swiper-lazy', 7689 loadingClass: 'swiper-lazy-loading', 7690 loadedClass: 'swiper-lazy-loaded', 7691 preloaderClass: 'swiper-lazy-preloader' 7692 } 7693 }, 7694 create: function create() { 7695 var swiper = this; 7696 bindModuleMethods(swiper, { 7697 lazy: _extends({ 7698 initialImageLoaded: false 7699 }, Lazy) 7700 }); 7701 }, 7702 on: { 7703 beforeInit: function beforeInit(swiper) { 7704 if (swiper.params.lazy.enabled && swiper.params.preloadImages) { 7705 swiper.params.preloadImages = false; 7706 } 7707 }, 7708 init: function init(swiper) { 7709 if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) { 7710 swiper.lazy.load(); 7711 } 7712 }, 7713 scroll: function scroll(swiper) { 7714 if (swiper.params.freeMode && !swiper.params.freeModeSticky) { 7715 swiper.lazy.load(); 7716 } 7717 }, 7718 resize: function resize(swiper) { 7719 if (swiper.params.lazy.enabled) { 7720 swiper.lazy.load(); 7721 } 7722 }, 7723 scrollbarDragMove: function scrollbarDragMove(swiper) { 7724 if (swiper.params.lazy.enabled) { 7725 swiper.lazy.load(); 7726 } 7727 }, 7728 transitionStart: function transitionStart(swiper) { 7729 if (swiper.params.lazy.enabled) { 7730 if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) { 7731 swiper.lazy.load(); 7732 } 7733 } 7734 }, 7735 transitionEnd: function transitionEnd(swiper) { 7736 if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { 7737 swiper.lazy.load(); 7738 } 7739 }, 7740 slideChange: function slideChange(swiper) { 7741 if (swiper.params.lazy.enabled && swiper.params.cssMode) { 7742 swiper.lazy.load(); 7743 } 7744 } 7745 } 7746 }; 7747 7748 var Controller = { 7749 LinearSpline: function LinearSpline(x, y) { 7750 var binarySearch = function search() { 7751 var maxIndex; 7752 var minIndex; 7753 var guess; 7754 return function (array, val) { 7755 minIndex = -1; 7756 maxIndex = array.length; 7757 7758 while (maxIndex - minIndex > 1) {
7759 guess = maxIndex + minIndex >> 1; 7760 7761 if (array[guess] <= val) { 7762 minIndex = guess; 7763 } else { 7764 maxIndex = guess; 7765 } 7766 } 7767 7768 return maxIndex; 7769 }; 7770 }(); 7771 7772 this.x = x; 7773 this.y = y; 7774 this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value: 7775 // (x1,y1) is the known point before given value, 7776 // (x3,y3) is the known point after given value. 7777 7778 var i1; 7779 var i3; 7780 7781 this.interpolate = function interpolate(x2) { 7782 if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2): 7783 7784 i3 = binarySearch(this.x, x2); 7785 i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already: 7786 // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 7787 7788 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; 7789 }; 7790 7791 return this; 7792 }, 7793 // xxx: for now i will just save one spline function to to 7794 getInterpolateFunction: function getInterpolateFunction(c) { 7795 var swiper = this; 7796 7797 if (!swiper.controller.spline) { 7798 swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid); 7799 } 7800 }, 7801 setTranslate: function setTranslate(_setTranslate, byController) { 7802 var swiper = this; 7803 var controlled = swiper.controller.control; 7804 var multiplier; 7805 var controlledTranslate; 7806 var Swiper = swiper.constructor; 7807 7808 function setControlledTranslate(c) { 7809 // this will create an Interpolate function based on the snapGrids 7810 // x is the Grid of the scrolled scroller and y will be the controlled scroller 7811 // it makes sense to create this only once and recall it for the interpolation 7812 // the function does a lot of value caching for performance 7813 var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 7814 7815 if (swiper.params.controller.by === 'slide') { 7816 swiper.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid 7817 // but it did not work out 7818 7819 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 7820 } 7821 7822 if (!controlledTranslate || swiper.params.controller.by === 'container') { 7823 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 7824 controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); 7825 } 7826 7827 if (swiper.params.controller.inverse) { 7828 controlledTranslate = c.maxTranslate() - controlledTranslate; 7829 } 7830 7831 c.updateProgress(controlledTranslate); 7832 c.setTranslate(controlledTranslate, swiper); 7833 c.updateActiveIndex(); 7834 c.updateSlidesClasses(); 7835 } 7836 7837 if (Array.isArray(controlled)) { 7838 for (var i = 0; i < controlled.length; i += 1) { 7839 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 7840 setControlledTranslate(controlled[i]); 7841 } 7842 } 7843 } else if (controlled instanceof Swiper && byController !== controlled) { 7844 setControlledTranslate(controlled); 7845 } 7846 }, 7847 setTransition: function setTransition(duration, byController) { 7848 var swiper = this; 7849 var Swiper = swiper.constructor; 7850 var controlled = swiper.controller.control; 7851 var i; 7852 7853 function setControlledTransition(c) { 7854 c.setTransition(duration, swiper); 7855 7856 if (duration !== 0) { 7857 c.transitionStart(); 7858 7859 if (c.params.autoHeight) { 7860 nextTick(function () { 7861 c.updateAutoHeight(); 7862 }); 7863 } 7864 7865 c.$wrapperEl.transitionEnd(function () { 7866 if (!controlled) return; 7867 7868 if (c.params.loop && swiper.params.controller.by === 'slide') { 7869 c.loopFix(); 7870 } 7871 7872 c.transitionEnd(); 7873 }); 7874 } 7875 } 7876 7877 if (Array.isArray(controlled)) { 7878 for (i = 0; i < controlled.length; i += 1) { 7879 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 7880 setControlledTransition(controlled[i]); 7881 } 7882 } 7883 } else if (controlled instanceof Swiper && byController !== controlled) { 7884 setControlledTransition(controlled); 7885 } 7886 } 7887 }; 7888 var Controller$1 = { 7889 name: 'controller', 7890 params: { 7891 controller: { 7892 control: undefined, 7893 inverse: false, 7894 by: 'slide' // or 'container' 7895 7896 } 7897 }, 7898 create: function create() { 7899 var swiper = this; 7900 bindModuleMethods(swiper, { 7901 controller: _extends({ 7902 control: swiper.params.controller.control 7903 }, Controller) 7904 }); 7905 }, 7906 on: { 7907 update: function update(swiper) { 7908 if (!swiper.controller.control) return; 7909 7910 if (swiper.controller.spline) { 7911 swiper.controller.spline = undefined; 7912 delete swiper.controller.spline; 7913 } 7914 }, 7915 resize: function resize(swiper) { 7916 if (!swiper.controller.control) return; 7917 7918 if (swiper.controller.spline) { 7919 swiper.controller.spline = undefined; 7920 delete swiper.controller.spline; 7921 } 7922 }, 7923 observerUpdate: function observerUpdate(swiper) { 7924 if (!swiper.controller.control) return; 7925 7926 if (swiper.controller.spline) { 7927 swiper.controller.spline = undefined; 7928 delete swiper.controller.spline; 7929 } 7930 }, 7931 setTranslate: function setTranslate(swiper, translate, byController) { 7932 if (!swiper.controller.control) return; 7933 swiper.controller.setTranslate(translate, byController); 7934 }, 7935 setTransition: function setTransition(swiper, duration, byController) { 7936 if (!swiper.controller.control) return; 7937 swiper.controller.setTransition(duration, byController); 7938 } 7939 } 7940 }; 7941 7942 var A11y = { 7943 makeElFocusable: function makeElFocusable($el) { 7944 $el.attr('tabIndex', '0'); 7945 return $el; 7946 }, 7947 makeElNotFocusable: function makeElNotFocusable($el) { 7948 $el.attr('tabIndex', '-1'); 7949 return $el; 7950 }, 7951 addElRole: function addElRole($el, role) { 7952 $el.attr('role', role); 7953 return $el; 7954 }, 7955 addElLabel: function addElLabel($el, label) { 7956 $el.attr('aria-label', label); 7957 return $el; 7958 }, 7959 disableEl: function disableEl($el) { 7960 $el.attr('aria-disabled', true); 7961 return $el; 7962 }, 7963 enableEl: function enableEl($el) { 7964 $el.attr('aria-disabled', false); 7965 return $el; 7966 }, 7967 onEnterKey: function onEnterKey(e) { 7968 var swiper = this; 7969 var params = swiper.params.a11y; 7970 if (e.keyCode !== 13) return; 7971 var $targetEl = $(e.target); 7972 7973 if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { 7974 if (!(swiper.isEnd && !swiper.params.loop)) { 7975 swiper.slideNext(); 7976 } 7977 7978 if (swiper.isEnd) { 7979 swiper.a11y.notify(params.lastSlideMessage); 7980 } else { 7981 swiper.a11y.notify(params.nextSlideMessage); 7982 } 7983 } 7984 7985 if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { 7986 if (!(swiper.isBeginning && !swiper.params.loop)) { 7987 swiper.slidePrev(); 7988 } 7989 7990 if (swiper.isBeginning) { 7991 swiper.a11y.notify(params.firstSlideMessage); 7992 } else { 7993 swiper.a11y.notify(params.prevSlideMessage); 7994 } 7995 } 7996 7997 if (swiper.pagination && $targetEl.is("." + swiper.params.pagination.bulletClass)) { 7998 $targetEl[0].click(); 7999 } 8000 }, 8001 notify: function notify(message) { 8002 var swiper = this; 8003 var notification = swiper.a11y.liveRegion; 8004 if (notification.length === 0) return; 8005 notification.html(''); 8006 notification.html(message); 8007 }, 8008 updateNavigation: function updateNavigation() { 8009 var swiper = this; 8010 if (swiper.params.loop || !swiper.navigation) return; 8011 var _swiper$navigation = swiper.navigation, 8012 $nextEl = _swiper$navigation.$nextEl, 8013 $prevEl = _swiper$navigation.$prevEl; 8014 8015 if ($prevEl && $prevEl.length > 0) { 8016 if (swiper.isBeginning) { 8017 swiper.a11y.disableEl($prevEl); 8018 swiper.a11y.makeElNotFocusable($prevEl); 8019 } else { 8020 swiper.a11y.enableEl($prevEl); 8021 swiper.a11y.makeElFocusable($prevEl); 8022 } 8023 } 8024 8025 if ($nextEl && $nextEl.length > 0) { 8026 if (swiper.isEnd) { 8027 swiper.a11y.disableEl($nextEl); 8028 swiper.a11y.makeElNotFocusable($nextEl); 8029 } else { 8030 swiper.a11y.enableEl($nextEl); 8031 swiper.a11y.makeElFocusable($nextEl); 8032 } 8033 } 8034 }, 8035 updatePagination: function updatePagination() { 8036 var swiper = this; 8037 var params = swiper.params.a11y; 8038 8039 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 8040 swiper.pagination.bullets.each(function (bulletEl) { 8041 var $bulletEl = $(bulletEl); 8042 swiper.a11y.makeElFocusable($bulletEl); 8043 swiper.a11y.addElRole($bulletEl, 'button'); 8044 swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); 8045 }); 8046 } 8047 },
8048 init: function init() { 8049 var swiper = this; 8050 swiper.$el.append(swiper.a11y.liveRegion); // Navigation 8051 8052 var params = swiper.params.a11y; 8053 var $nextEl; 8054 var $prevEl; 8055 8056 if (swiper.navigation && swiper.navigation.$nextEl) { 8057 $nextEl = swiper.navigation.$nextEl; 8058 } 8059 8060 if (swiper.navigation && swiper.navigation.$prevEl) { 8061 $prevEl = swiper.navigation.$prevEl; 8062 } 8063 8064 if ($nextEl) { 8065 swiper.a11y.makeElFocusable($nextEl); 8066 swiper.a11y.addElRole($nextEl, 'button'); 8067 swiper.a11y.addElLabel($nextEl, params.nextSlideMessage); 8068 $nextEl.on('keydown', swiper.a11y.onEnterKey); 8069 } 8070 8071 if ($prevEl) { 8072 swiper.a11y.makeElFocusable($prevEl); 8073 swiper.a11y.addElRole($prevEl, 'button'); 8074 swiper.a11y.addElLabel($prevEl, params.prevSlideMessage); 8075 $prevEl.on('keydown', swiper.a11y.onEnterKey); 8076 } // Pagination 8077 8078 8079 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 8080 swiper.pagination.$el.on('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey); 8081 } 8082 }, 8083 destroy: function destroy() { 8084 var swiper = this; 8085 if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove(); 8086 var $nextEl; 8087 var $prevEl; 8088 8089 if (swiper.navigation && swiper.navigation.$nextEl) { 8090 $nextEl = swiper.navigation.$nextEl; 8091 } 8092 8093 if (swiper.navigation && swiper.navigation.$prevEl) { 8094 $prevEl = swiper.navigation.$prevEl; 8095 } 8096 8097 if ($nextEl) { 8098 $nextEl.off('keydown', swiper.a11y.onEnterKey); 8099 } 8100 8101 if ($prevEl) { 8102 $prevEl.off('keydown', swiper.a11y.onEnterKey); 8103 } // Pagination 8104 8105 8106 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 8107 swiper.pagination.$el.off('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey); 8108 } 8109 } 8110 }; 8111 var A11y$1 = { 8112 name: 'a11y', 8113 params: { 8114 a11y: { 8115 enabled: true, 8116 notificationClass: 'swiper-notification', 8117 prevSlideMessage: 'Previous slide', 8118 nextSlideMessage: 'Next slide', 8119 firstSlideMessage: 'This is the first slide', 8120 lastSlideMessage: 'This is the last slide', 8121 paginationBulletMessage: 'Go to slide {{index}}' 8122 } 8123 }, 8124 create: function create() { 8125 var swiper = this; 8126 bindModuleMethods(swiper, { 8127 a11y: _extends(_extends({}, A11y), {}, { 8128 liveRegion: $("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>") 8129 }) 8130 }); 8131 }, 8132 on: { 8133 init: function init(swiper) { 8134 if (!swiper.params.a11y.enabled) return; 8135 swiper.a11y.init(); 8136 swiper.a11y.updateNavigation(); 8137 }, 8138 toEdge: function toEdge(swiper) { 8139 if (!swiper.params.a11y.enabled) return; 8140 swiper.a11y.updateNavigation(); 8141 }, 8142 fromEdge: function fromEdge(swiper) { 8143 if (!swiper.params.a11y.enabled) return; 8144 swiper.a11y.updateNavigation(); 8145 }, 8146 paginationUpdate: function paginationUpdate(swiper) { 8147 if (!swiper.params.a11y.enabled) return; 8148 swiper.a11y.updatePagination(); 8149 }, 8150 destroy: function destroy(swiper) { 8151 if (!swiper.params.a11y.enabled) return; 8152 swiper.a11y.destroy(); 8153 } 8154 } 8155 }; 8156 8157 var History = { 8158 init: function init() { 8159 var swiper = this; 8160 var window = getWindow(); 8161 if (!swiper.params.history) return; 8162 8163 if (!window.history || !window.history.pushState) { 8164 swiper.params.history.enabled = false; 8165 swiper.params.hashNavigation.enabled = true; 8166 return; 8167 } 8168 8169 var history = swiper.history; 8170 history.initialized = true; 8171 history.paths = History.getPathValues(swiper.params.url); 8172 if (!history.paths.key && !history.paths.value) return; 8173 history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit); 8174 8175 if (!swiper.params.history.replaceState) { 8176 window.addEventListener('popstate', swiper.history.setHistoryPopState); 8177 } 8178 }, 8179 destroy: function destroy() { 8180 var swiper = this; 8181 var window = getWindow(); 8182 8183 if (!swiper.params.history.replaceState) { 8184 window.removeEventListener('popstate', swiper.history.setHistoryPopState); 8185 } 8186 }, 8187 setHistoryPopState: function setHistoryPopState() { 8188 var swiper = this; 8189 swiper.history.paths = History.getPathValues(swiper.params.url); 8190 swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false); 8191 }, 8192 getPathValues: function getPathValues(urlOverride) { 8193 var window = getWindow(); 8194 var location; 8195 8196 if (urlOverride) { 8197 location = new URL(urlOverride); 8198 } else { 8199 location = window.location; 8200 } 8201 8202 var pathArray = location.pathname.slice(1).split('/').filter(function (part) { 8203 return part !== ''; 8204 }); 8205 var total = pathArray.length; 8206 var key = pathArray[total - 2]; 8207 var value = pathArray[total - 1]; 8208 return { 8209 key: key, 8210 value: value 8211 }; 8212 }, 8213 setHistory: function setHistory(key, index) { 8214 var swiper = this; 8215 var window = getWindow(); 8216 if (!swiper.history.initialized || !swiper.params.history.enabled) return; 8217 var location; 8218 8219 if (swiper.params.url) { 8220 location = new URL(swiper.params.url); 8221 } else { 8222 location = window.location; 8223 } 8224 8225 var slide = swiper.slides.eq(index); 8226 var value = History.slugify(slide.attr('data-history')); 8227 8228 if (!location.pathname.includes(key)) { 8229 value = key + "/" + value; 8230 } 8231 8232 var currentState = window.history.state; 8233 8234 if (currentState && currentState.value === value) { 8235 return; 8236 } 8237 8238 if (swiper.params.history.replaceState) { 8239 window.history.replaceState({ 8240 value: value 8241 }, null, value); 8242 } else { 8243 window.history.pushState({ 8244 value: value 8245 }, null, value); 8246 } 8247 }, 8248 slugify: function slugify(text) { 8249 return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); 8250 }, 8251 scrollToSlide: function scrollToSlide(speed, value, runCallbacks) { 8252 var swiper = this; 8253 8254 if (value) { 8255 for (var i = 0, length = swiper.slides.length; i < length; i += 1) { 8256 var slide = swiper.slides.eq(i); 8257 var slideHistory = History.slugify(slide.attr('data-history')); 8258 8259 if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { 8260 var index = slide.index(); 8261 swiper.slideTo(index, speed, runCallbacks); 8262 } 8263 } 8264 } else { 8265 swiper.slideTo(0, speed, runCallbacks); 8266 } 8267 } 8268 }; 8269 var History$1 = { 8270 name: 'history', 8271 params: { 8272 history: { 8273 enabled: false, 8274 replaceState: false, 8275 key: 'slides' 8276 } 8277 }, 8278 create: function create() { 8279 var swiper = this; 8280 bindModuleMethods(swiper, { 8281 history: _extends({}, History) 8282 }); 8283 }, 8284 on: { 8285 init: function init(swiper) { 8286 if (swiper.params.history.enabled) { 8287 swiper.history.init(); 8288 } 8289 }, 8290 destroy: function destroy(swiper) { 8291 if (swiper.params.history.enabled) { 8292 swiper.history.destroy(); 8293 } 8294 }, 8295 transitionEnd: function transitionEnd(swiper) { 8296 if (swiper.history.initialized) { 8297 swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); 8298 } 8299 }, 8300 slideChange: function slideChange(swiper) { 8301 if (swiper.history.initialized && swiper.params.cssMode) { 8302 swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); 8303 } 8304 } 8305 } 8306 }; 8307 8308 var HashNavigation = { 8309 onHashCange: function onHashCange() { 8310 var swiper = this; 8311 var document = getDocument(); 8312 swiper.emit('hashChange'); 8313 var newHash = document.location.hash.replace('#', ''); 8314 var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); 8315 8316 if (newHash !== activeSlideHash) { 8317 var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index(); 8318 if (typeof newIndex === 'undefined') return; 8319 swiper.slideTo(newIndex); 8320 } 8321 }, 8322 setHash: function setHash() { 8323 var swiper = this; 8324 var window = getWindow(); 8325 var document = getDocument(); 8326 if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return; 8327 8328 if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { 8329 window.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || ''); 8330 swiper.emit('hashSet'); 8331 } else { 8332 var slide = swiper.slides.eq(swiper.activeIndex); 8333 var hash = slide.attr('data-hash') || slide.attr('data-history'); 8334 document.location.hash = hash || ''; 8335 swiper.emit('hashSet'); 8336 } 8337 },
8338 init: function init() { 8339 var swiper = this; 8340 var document = getDocument(); 8341 var window = getWindow(); 8342 if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; 8343 swiper.hashNavigation.initialized = true; 8344 var hash = document.location.hash.replace('#', ''); 8345 8346 if (hash) { 8347 var speed = 0; 8348 8349 for (var i = 0, length = swiper.slides.length; i < length; i += 1) { 8350 var slide = swiper.slides.eq(i); 8351 var slideHash = slide.attr('data-hash') || slide.attr('data-history'); 8352 8353 if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { 8354 var index = slide.index(); 8355 swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); 8356 } 8357 } 8358 } 8359 8360 if (swiper.params.hashNavigation.watchState) { 8361 $(window).on('hashchange', swiper.hashNavigation.onHashCange); 8362 } 8363 }, 8364 destroy: function destroy() { 8365 var swiper = this; 8366 var window = getWindow(); 8367 8368 if (swiper.params.hashNavigation.watchState) { 8369 $(window).off('hashchange', swiper.hashNavigation.onHashCange); 8370 } 8371 } 8372 }; 8373 var HashNavigation$1 = { 8374 name: 'hash-navigation', 8375 params: { 8376 hashNavigation: { 8377 enabled: false, 8378 replaceState: false, 8379 watchState: false 8380 } 8381 }, 8382 create: function create() { 8383 var swiper = this; 8384 bindModuleMethods(swiper, { 8385 hashNavigation: _extends({ 8386 initialized: false 8387 }, HashNavigation) 8388 }); 8389 }, 8390 on: { 8391 init: function init(swiper) { 8392 if (swiper.params.hashNavigation.enabled) { 8393 swiper.hashNavigation.init(); 8394 } 8395 }, 8396 destroy: function destroy(swiper) { 8397 if (swiper.params.hashNavigation.enabled) { 8398 swiper.hashNavigation.destroy(); 8399 } 8400 }, 8401 transitionEnd: function transitionEnd(swiper) { 8402 if (swiper.hashNavigation.initialized) { 8403 swiper.hashNavigation.setHash(); 8404 } 8405 }, 8406 slideChange: function slideChange(swiper) { 8407 if (swiper.hashNavigation.initialized && swiper.params.cssMode) { 8408 swiper.hashNavigation.setHash(); 8409 } 8410 } 8411 } 8412 }; 8413 8414 var Autoplay = { 8415 run: function run() { 8416 var swiper = this; 8417 var $activeSlideEl = swiper.slides.eq(swiper.activeIndex); 8418 var delay = swiper.params.autoplay.delay; 8419 8420 if ($activeSlideEl.attr('data-swiper-autoplay')) { 8421 delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; 8422 } 8423 8424 clearTimeout(swiper.autoplay.timeout); 8425 swiper.autoplay.timeout = nextTick(function () { 8426 if (swiper.params.autoplay.reverseDirection) { 8427 if (swiper.params.loop) { 8428 swiper.loopFix(); 8429 swiper.slidePrev(swiper.params.speed, true, true); 8430 swiper.emit('autoplay'); 8431 } else if (!swiper.isBeginning) { 8432 swiper.slidePrev(swiper.params.speed, true, true); 8433 swiper.emit('autoplay'); 8434 } else if (!swiper.params.autoplay.stopOnLastSlide) { 8435 swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); 8436 swiper.emit('autoplay'); 8437 } else { 8438 swiper.autoplay.stop(); 8439 } 8440 } else if (swiper.params.loop) { 8441 swiper.loopFix(); 8442 swiper.slideNext(swiper.params.speed, true, true); 8443 swiper.emit('autoplay'); 8444 } else if (!swiper.isEnd) { 8445 swiper.slideNext(swiper.params.speed, true, true); 8446 swiper.emit('autoplay'); 8447 } else if (!swiper.params.autoplay.stopOnLastSlide) { 8448 swiper.slideTo(0, swiper.params.speed, true, true); 8449 swiper.emit('autoplay'); 8450 } else { 8451 swiper.autoplay.stop(); 8452 } 8453 8454 if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run(); 8455 }, delay); 8456 }, 8457 start: function start() { 8458 var swiper = this; 8459 if (typeof swiper.autoplay.timeout !== 'undefined') return false; 8460 if (swiper.autoplay.running) return false;
8461 swiper.autoplay.running = true; 8462 swiper.emit('autoplayStart'); 8463 swiper.autoplay.run(); 8464 return true; 8465 }, 8466 stop: function stop() { 8467 var swiper = this; 8468 if (!swiper.autoplay.running) return false; 8469 if (typeof swiper.autoplay.timeout === 'undefined') return false; 8470 8471 if (swiper.autoplay.timeout) { 8472 clearTimeout(swiper.autoplay.timeout); 8473 swiper.autoplay.timeout = undefined; 8474 } 8475 8476 swiper.autoplay.running = false; 8477 swiper.emit('autoplayStop'); 8478 return true; 8479 }, 8480 pause: function pause(speed) { 8481 var swiper = this; 8482 if (!swiper.autoplay.running) return; 8483 if (swiper.autoplay.paused) return; 8484 if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout); 8485 swiper.autoplay.paused = true; 8486 8487 if (speed === 0 || !swiper.params.autoplay.waitForTransition) { 8488 swiper.autoplay.paused = false; 8489 swiper.autoplay.run(); 8490 } else { 8491 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd); 8492 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); 8493 } 8494 }, 8495 onVisibilityChange: function onVisibilityChange() { 8496 var swiper = this; 8497 var document = getDocument(); 8498 8499 if (document.visibilityState === 'hidden' && swiper.autoplay.running) { 8500 swiper.autoplay.pause(); 8501 } 8502 8503 if (document.visibilityState === 'visible' && swiper.autoplay.paused) { 8504 swiper.autoplay.run(); 8505 swiper.autoplay.paused = false; 8506 } 8507 }, 8508 onTransitionEnd: function onTransitionEnd(e) { 8509 var swiper = this; 8510 if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return; 8511 if (e.target !== swiper.$wrapperEl[0]) return; 8512 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd); 8513 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); 8514 swiper.autoplay.paused = false; 8515 8516 if (!swiper.autoplay.running) { 8517 swiper.autoplay.stop(); 8518 } else { 8519 swiper.autoplay.run(); 8520 } 8521 } 8522 }; 8523 var Autoplay$1 = { 8524 name: 'autoplay', 8525 params: { 8526 autoplay: { 8527 enabled: false, 8528 delay: 3000, 8529 waitForTransition: true, 8530 disableOnInteraction: true, 8531 stopOnLastSlide: false, 8532 reverseDirection: false 8533 } 8534 }, 8535 create: function create() { 8536 var swiper = this; 8537 bindModuleMethods(swiper, { 8538 autoplay: _extends(_extends({}, Autoplay), {}, { 8539 running: false, 8540 paused: false 8541 }) 8542 }); 8543 }, 8544 on: { 8545 init: function init(swiper) { 8546 if (swiper.params.autoplay.enabled) { 8547 swiper.autoplay.start(); 8548 var document = getDocument(); 8549 document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); 8550 } 8551 }, 8552 beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) { 8553 if (swiper.autoplay.running) { 8554 if (internal || !swiper.params.autoplay.disableOnInteraction) { 8555 swiper.autoplay.pause(speed); 8556 } else { 8557 swiper.autoplay.stop(); 8558 } 8559 } 8560 }, 8561 sliderFirstMove: function sliderFirstMove(swiper) { 8562 if (swiper.autoplay.running) { 8563 if (swiper.params.autoplay.disableOnInteraction) { 8564 swiper.autoplay.stop(); 8565 } else { 8566 swiper.autoplay.pause(); 8567 } 8568 } 8569 }, 8570 touchEnd: function touchEnd(swiper) { 8571 if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) { 8572 swiper.autoplay.run(); 8573 } 8574 }, 8575 destroy: function destroy(swiper) { 8576 if (swiper.autoplay.running) { 8577 swiper.autoplay.stop(); 8578 } 8579 8580 var document = getDocument(); 8581 document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); 8582 } 8583 } 8584 }; 8585 8586 var Fade = { 8587 setTranslate: function setTranslate() { 8588 var swiper = this; 8589 var slides = swiper.slides; 8590 8591 for (var i = 0; i < slides.length; i += 1) { 8592 var $slideEl = swiper.slides.eq(i); 8593 var offset = $slideEl[0].swiperSlideOffset; 8594 var tx = -offset; 8595 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 8596 var ty = 0; 8597 8598 if (!swiper.isHorizontal()) { 8599 ty = tx; 8600 tx = 0; 8601 } 8602 8603 var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); 8604 $slideEl.css({ 8605 opacity: slideOpacity 8606 }).transform("translate3d(" + tx + "px, " + ty + "px, 0px)"); 8607 } 8608 }, 8609 setTransition: function setTransition(duration) { 8610 var swiper = this; 8611 var slides = swiper.slides, 8612 $wrapperEl = swiper.$wrapperEl; 8613 slides.transition(duration); 8614 8615 if (swiper.params.virtualTranslate && duration !== 0) { 8616 var eventTriggered = false;
8617 slides.transitionEnd(function () { 8618 if (eventTriggered) return; 8619 if (!swiper || swiper.destroyed) return; 8620 eventTriggered = true; 8621 swiper.animating = false; 8622 var triggerEvents = ['webkitTransitionEnd', 'transitionend']; 8623 8624 for (var i = 0; i < triggerEvents.length; i += 1) { 8625 $wrapperEl.trigger(triggerEvents[i]); 8626 } 8627 }); 8628 } 8629 } 8630 }; 8631 var EffectFade = { 8632 name: 'effect-fade', 8633 params: { 8634 fadeEffect: { 8635 crossFade: false 8636 } 8637 }, 8638 create: function create() { 8639 var swiper = this; 8640 bindModuleMethods(swiper, { 8641 fadeEffect: _extends({}, Fade) 8642 }); 8643 }, 8644 on: { 8645 beforeInit: function beforeInit(swiper) { 8646 if (swiper.params.effect !== 'fade') return; 8647 swiper.classNames.push(swiper.params.containerModifierClass + "fade"); 8648 var overwriteParams = { 8649 slidesPerView: 1, 8650 slidesPerColumn: 1, 8651 slidesPerGroup: 1, 8652 watchSlidesProgress: true, 8653 spaceBetween: 0, 8654 virtualTranslate: true 8655 }; 8656 extend$1(swiper.params, overwriteParams); 8657 extend$1(swiper.originalParams, overwriteParams); 8658 }, 8659 setTranslate: function setTranslate(swiper) { 8660 if (swiper.params.effect !== 'fade') return; 8661 swiper.fadeEffect.setTranslate(); 8662 }, 8663 setTransition: function setTransition(swiper, duration) { 8664 if (swiper.params.effect !== 'fade') return; 8665 swiper.fadeEffect.setTransition(duration); 8666 } 8667 } 8668 }; 8669 8670 var Cube = { 8671 setTranslate: function setTranslate() { 8672 var swiper = this; 8673 var $el = swiper.$el, 8674 $wrapperEl = swiper.$wrapperEl, 8675 slides = swiper.slides, 8676 swiperWidth = swiper.width, 8677 swiperHeight = swiper.height, 8678 rtl = swiper.rtlTranslate, 8679 swiperSize = swiper.size, 8680 browser = swiper.browser; 8681 var params = swiper.params.cubeEffect; 8682 var isHorizontal = swiper.isHorizontal(); 8683 var isVirtual = swiper.virtual && swiper.params.virtual.enabled; 8684 var wrapperRotate = 0; 8685 var $cubeShadowEl; 8686 8687 if (params.shadow) { 8688 if (isHorizontal) { 8689 $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); 8690 8691 if ($cubeShadowEl.length === 0) { 8692 $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>'); 8693 $wrapperEl.append($cubeShadowEl); 8694 } 8695 8696 $cubeShadowEl.css({ 8697 height: swiperWidth + "px" 8698 }); 8699 } else { 8700 $cubeShadowEl = $el.find('.swiper-cube-shadow'); 8701 8702 if ($cubeShadowEl.length === 0) { 8703 $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>'); 8704 $el.append($cubeShadowEl); 8705 } 8706 } 8707 } 8708 8709 for (var i = 0; i < slides.length; i += 1) { 8710 var $slideEl = slides.eq(i); 8711 var slideIndex = i; 8712 8713 if (isVirtual) { 8714 slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); 8715 } 8716 8717 var slideAngle = slideIndex * 90; 8718 var round = Math.floor(slideAngle / 360); 8719 8720 if (rtl) { 8721 slideAngle = -slideAngle; 8722 round = Math.floor(-slideAngle / 360); 8723 } 8724 8725 var progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 8726 var tx = 0; 8727 var ty = 0; 8728 var tz = 0; 8729 8730 if (slideIndex % 4 === 0) { 8731 tx = -round * 4 * swiperSize; 8732 tz = 0; 8733 } else if ((slideIndex - 1) % 4 === 0) { 8734 tx = 0; 8735 tz = -round * 4 * swiperSize; 8736 } else if ((slideIndex - 2) % 4 === 0) { 8737 tx = swiperSize + round * 4 * swiperSize; 8738 tz = swiperSize; 8739 } else if ((slideIndex - 3) % 4 === 0) { 8740 tx = -swiperSize; 8741 tz = 3 * swiperSize + swiperSize * 4 * round; 8742 } 8743 8744 if (rtl) { 8745 tx = -tx; 8746 } 8747 8748 if (!isHorizontal) { 8749 ty = tx; 8750 tx = 0; 8751 } 8752 8753 var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)"; 8754 8755 if (progress <= 1 && progress > -1) { 8756 wrapperRotate = slideIndex * 90 + progress * 90; 8757 if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; 8758 } 8759 8760 $slideEl.transform(transform); 8761 8762 if (params.slideShadows) { 8763 // Set shadows 8764 var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 8765 var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 8766 8767 if (shadowBefore.length === 0) { 8768 shadowBefore = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"); 8769 $slideEl.append(shadowBefore); 8770 } 8771 8772 if (shadowAfter.length === 0) { 8773 shadowAfter = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"); 8774 $slideEl.append(shadowAfter); 8775 } 8776 8777 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 8778 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 8779 } 8780 } 8781 8782 $wrapperEl.css({
8783 '-webkit-transform-origin': "50% 50% -" + swiperSize / 2 + "px", 8784 '-moz-transform-origin': "50% 50% -" + swiperSize / 2 + "px", 8785 '-ms-transform-origin': "50% 50% -" + swiperSize / 2 + "px", 8786 'transform-origin': "50% 50% -" + swiperSize / 2 + "px" 8787 }); 8788 8789 if (params.shadow) { 8790 if (isHorizontal) { 8791 $cubeShadowEl.transform("translate3d(0px, " + (swiperWidth / 2 + params.shadowOffset) + "px, " + -swiperWidth / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + params.shadowScale + ")"); 8792 } else { 8793 var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; 8794 var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); 8795 var scale1 = params.shadowScale; 8796 var scale2 = params.shadowScale / multiplier; 8797 var offset = params.shadowOffset; 8798 $cubeShadowEl.transform("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + (swiperHeight / 2 + offset) + "px, " + -swiperHeight / 2 / scale2 + "px) rotateX(-90deg)"); 8799 } 8800 } 8801 8802 var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0; 8803 $wrapperEl.transform("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)"); 8804 }, 8805 setTransition: function setTransition(duration) { 8806 var swiper = this; 8807 var $el = swiper.$el, 8808 slides = swiper.slides; 8809 slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 8810 8811 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 8812 $el.find('.swiper-cube-shadow').transition(duration); 8813 } 8814 } 8815 }; 8816 var EffectCube = { 8817 name: 'effect-cube', 8818 params: { 8819 cubeEffect: { 8820 slideShadows: true, 8821 shadow: true, 8822 shadowOffset: 20, 8823 shadowScale: 0.94 8824 } 8825 }, 8826 create: function create() { 8827 var swiper = this; 8828 bindModuleMethods(swiper, { 8829 cubeEffect: _extends({}, Cube) 8830 }); 8831 }, 8832 on: { 8833 beforeInit: function beforeInit(swiper) { 8834 if (swiper.params.effect !== 'cube') return; 8835 swiper.classNames.push(swiper.params.containerModifierClass + "cube"); 8836 swiper.classNames.push(swiper.params.containerModifierClass + "3d"); 8837 var overwriteParams = { 8838 slidesPerView: 1, 8839 slidesPerColumn: 1, 8840 slidesPerGroup: 1, 8841 watchSlidesProgress: true, 8842 resistanceRatio: 0, 8843 spaceBetween: 0, 8844 centeredSlides: false, 8845 virtualTranslate: true 8846 }; 8847 extend$1(swiper.params, overwriteParams); 8848 extend$1(swiper.originalParams, overwriteParams); 8849 }, 8850 setTranslate: function setTranslate(swiper) { 8851 if (swiper.params.effect !== 'cube') return; 8852 swiper.cubeEffect.setTranslate(); 8853 }, 8854 setTransition: function setTransition(swiper, duration) { 8855 if (swiper.params.effect !== 'cube') return; 8856 swiper.cubeEffect.setTransition(duration); 8857 } 8858 } 8859 }; 8860 8861 var Flip = { 8862 setTranslate: function setTranslate() { 8863 var swiper = this; 8864 var slides = swiper.slides, 8865 rtl = swiper.rtlTranslate; 8866 8867 for (var i = 0; i < slides.length; i += 1) { 8868 var $slideEl = slides.eq(i); 8869 var progress = $slideEl[0].progress; 8870 8871 if (swiper.params.flipEffect.limitRotation) { 8872 progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 8873 } 8874 8875 var offset = $slideEl[0].swiperSlideOffset; 8876 var rotate = -180 * progress; 8877 var rotateY = rotate; 8878 var rotateX = 0; 8879 var tx = -offset; 8880 var ty = 0; 8881 8882 if (!swiper.isHorizontal()) { 8883 ty = tx; 8884 tx = 0; 8885 rotateX = -rotateY; 8886 rotateY = 0; 8887 } else if (rtl) { 8888 rotateY = -rotateY; 8889 } 8890 8891 $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 8892 8893 if (swiper.params.flipEffect.slideShadows) { 8894 // Set shadows 8895 var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 8896 var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 8897 8898 if (shadowBefore.length === 0) { 8899 shadowBefore = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>"); 8900 $slideEl.append(shadowBefore); 8901 } 8902 8903 if (shadowAfter.length === 0) { 8904 shadowAfter = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>"); 8905 $slideEl.append(shadowAfter); 8906 } 8907 8908 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 8909 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 8910 } 8911 8912 $slideEl.transform("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)"); 8913 } 8914 }, 8915 setTransition: function setTransition(duration) { 8916 var swiper = this; 8917 var slides = swiper.slides, 8918 activeIndex = swiper.activeIndex, 8919 $wrapperEl = swiper.$wrapperEl; 8920 slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 8921 8922 if (swiper.params.virtualTranslate && duration !== 0) { 8923 var eventTriggered = false; // eslint-disable-next-line 8924 8925 slides.eq(activeIndex).transitionEnd(function onTransitionEnd() { 8926 if (eventTriggered) return; 8927 if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return; 8928 8929 eventTriggered = true; 8930 swiper.animating = false;
8931 var triggerEvents = ['webkitTransitionEnd', 'transitionend']; 8932 8933 for (var i = 0; i < triggerEvents.length; i += 1) { 8934 $wrapperEl.trigger(triggerEvents[i]); 8935 } 8936 }); 8937 } 8938 } 8939 }; 8940 var EffectFlip = { 8941 name: 'effect-flip', 8942 params: { 8943 flipEffect: { 8944 slideShadows: true, 8945 limitRotation: true 8946 } 8947 }, 8948 create: function create() { 8949 var swiper = this; 8950 bindModuleMethods(swiper, { 8951 flipEffect: _extends({}, Flip) 8952 }); 8953 }, 8954 on: { 8955 beforeInit: function beforeInit(swiper) { 8956 if (swiper.params.effect !== 'flip') return; 8957 swiper.classNames.push(swiper.params.containerModifierClass + "flip"); 8958 swiper.classNames.push(swiper.params.containerModifierClass + "3d"); 8959 var overwriteParams = { 8960 slidesPerView: 1, 8961 slidesPerColumn: 1, 8962 slidesPerGroup: 1, 8963 watchSlidesProgress: true, 8964 spaceBetween: 0, 8965 virtualTranslate: true 8966 }; 8967 extend$1(swiper.params, overwriteParams); 8968 extend$1(swiper.originalParams, overwriteParams); 8969 }, 8970 setTranslate: function setTranslate(swiper) { 8971 if (swiper.params.effect !== 'flip') return; 8972 swiper.flipEffect.setTranslate(); 8973 }, 8974 setTransition: function setTransition(swiper, duration) { 8975 if (swiper.params.effect !== 'flip') return; 8976 swiper.flipEffect.setTransition(duration); 8977 } 8978 } 8979 }; 8980 8981 var Coverflow = { 8982 setTranslate: function setTranslate() { 8983 var swiper = this; 8984 var swiperWidth = swiper.width, 8985 swiperHeight = swiper.height, 8986 slides = swiper.slides, 8987 slidesSizesGrid = swiper.slidesSizesGrid; 8988 var params = swiper.params.coverflowEffect; 8989 var isHorizontal = swiper.isHorizontal(); 8990 var transform = swiper.translate; 8991 var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; 8992 var rotate = isHorizontal ? params.rotate : -params.rotate; 8993 var translate = params.depth; // Each slide offset from center 8994 8995 for (var i = 0, length = slides.length; i < length; i += 1) { 8996 var $slideEl = slides.eq(i); 8997 var slideSize = slidesSizesGrid[i]; 8998 var slideOffset = $slideEl[0].swiperSlideOffset; 8999 var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier; 9000 var rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 9001 var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0 9002 9003 var translateZ = -translate * Math.abs(offsetMultiplier); 9004 var stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders 9005 9006 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 9007 stretch = parseFloat(params.stretch) / 100 * slideSize; 9008 } 9009 9010 var translateY = isHorizontal ? 0 : stretch * offsetMultiplier; 9011 var translateX = isHorizontal ? stretch * offsetMultiplier : 0; 9012 var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values 9013 9014 if (Math.abs(translateX) < 0.001) translateX = 0; 9015 if (Math.abs(translateY) < 0.001) translateY = 0; 9016 if (Math.abs(translateZ) < 0.001) translateZ = 0; 9017 if (Math.abs(rotateY) < 0.001) rotateY = 0; 9018 if (Math.abs(rotateX) < 0.001) rotateX = 0; 9019 if (Math.abs(scale) < 0.001) scale = 0; 9020 var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg) scale(" + scale + ")"; 9021 $slideEl.transform(slideTransform); 9022 $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 9023 9024 if (params.slideShadows) { 9025 // Set shadows 9026 var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 9027 var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 9028 9029 if ($shadowBeforeEl.length === 0) { 9030 $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"); 9031 $slideEl.append($shadowBeforeEl); 9032 } 9033 9034 if ($shadowAfterEl.length === 0) { 9035 $shadowAfterEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"); 9036 $slideEl.append($shadowAfterEl); 9037 } 9038 9039 if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 9040 if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; 9041 } 9042 } 9043 }, 9044 setTransition: function setTransition(duration) { 9045 var swiper = this; 9046 swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 9047 } 9048 }; 9049 var EffectCoverflow = { 9050 name: 'effect-coverflow', 9051 params: { 9052 coverflowEffect: { 9053 rotate: 50, 9054 stretch: 0, 9055 depth: 100, 9056 scale: 1, 9057 modifier: 1, 9058 slideShadows: true 9059 } 9060 }, 9061 create: function create() { 9062 var swiper = this; 9063 bindModuleMethods(swiper, { 9064 coverflowEffect: _extends({}
9064, Coverflow) 9065 }); 9066 }, 9067 on: { 9068 beforeInit: function beforeInit(swiper) { 9069 if (swiper.params.effect !== 'coverflow') return; 9070 swiper.classNames.push(swiper.params.containerModifierClass + "coverflow"); 9071 swiper.classNames.push(swiper.params.containerModifierClass + "3d"); 9072 swiper.params.watchSlidesProgress = true; 9073 swiper.originalParams.watchSlidesProgress = true; 9074 }, 9075 setTranslate: function setTranslate(swiper) { 9076 if (swiper.params.effect !== 'coverflow') return; 9077 swiper.coverflowEffect.setTranslate(); 9078 }, 9079 setTransition: function setTransition(swiper, duration) { 9080 if (swiper.params.effect !== 'coverflow') return; 9081 swiper.coverflowEffect.setTransition(duration); 9082 } 9083 } 9084 }; 9085 9086 var Thumbs = { 9087 init: function init() { 9088 var swiper = this; 9089 var thumbsParams = swiper.params.thumbs; 9090 if (swiper.thumbs.initialized) return false; 9091 swiper.thumbs.initialized = true; 9092 var SwiperClass = swiper.constructor; 9093 9094 if (thumbsParams.swiper instanceof SwiperClass) { 9095 swiper.thumbs.swiper = thumbsParams.swiper; 9096 extend$1(swiper.thumbs.swiper.originalParams, { 9097 watchSlidesProgress: true, 9098 slideToClickedSlide: false 9099 }); 9100 extend$1(swiper.thumbs.swiper.params, { 9101 watchSlidesProgress: true, 9102 slideToClickedSlide: false 9103 }); 9104 } else if (isObject$1(thumbsParams.swiper)) { 9105 swiper.thumbs.swiper = new SwiperClass(extend$1({}, thumbsParams.swiper, { 9106 watchSlidesVisibility: true, 9107 watchSlidesProgress: true, 9108 slideToClickedSlide: false 9109 })); 9110 swiper.thumbs.swiperCreated = true; 9111 } 9112 9113 swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); 9114 swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick); 9115 return true; 9116 }, 9117 onThumbClick: function onThumbClick() { 9118 var swiper = this; 9119 var thumbsSwiper = swiper.thumbs.swiper; 9120 if (!thumbsSwiper) return; 9121 var clickedIndex = thumbsSwiper.clickedIndex; 9122 var clickedSlide = thumbsSwiper.clickedSlide; 9123 if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return; 9124 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 9125 var slideToIndex; 9126 9127 if (thumbsSwiper.params.loop) { 9128 slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); 9129 } else { 9130 slideToIndex = clickedIndex; 9131 } 9132 9133 if (swiper.params.loop) { 9134 var currentIndex = swiper.activeIndex; 9135 9136 if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { 9137 swiper.loopFix(); // eslint-disable-next-line 9138 9139 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 9140 currentIndex = swiper.activeIndex; 9141 } 9142 9143 var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index(); 9144 var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index(); 9145 if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex; 9146 } 9147 9148 swiper.slideTo(slideToIndex); 9149 }, 9150 update: function update(initial) { 9151 var swiper = this; 9152 var thumbsSwiper = swiper.thumbs.swiper; 9153 if (!thumbsSwiper) return; 9154 var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; 9155 var autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 9156 var useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 9157 9158 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 9159 var currentThumbsIndex = thumbsSwiper.activeIndex; 9160 var newThumbsIndex; 9161 var direction; 9162 9163 if (thumbsSwiper.params.loop) { 9164 if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { 9165 thumbsSwiper.loopFix(); // eslint-disable-next-line 9166 9167 thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; 9168 currentThumbsIndex = thumbsSwiper.activeIndex; 9169 } // Find actual thumbs index to slide to 9170 9171 9172 var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index(); 9173 var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index(); 9174 if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex; 9175 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 9176 } else { 9177 newThumbsIndex = swiper.realIndex; 9178 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 9179 } 9180 9181 if (useOffset) { 9182 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 9183 } 9184 9185 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 9186 if (thumbsSwiper.params.centeredSlides) { 9187 if (newThumbsIndex > currentThumbsIndex) { 9188 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 9189 } else { 9190 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 9191 } 9192 } else if (newThumbsIndex > currentThumbsIndex) { 9193 newThumbsIndex = newThumbsIndex - slidesPerView + 1; 9194 } 9195 9196 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 9197 } 9198 } // Activate thumbs 9199 9200 9201 var thumbsToActivate = 1; 9202 var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 9203 9204 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 9205 thumbsToActivate = swiper.params.slidesPerView; 9206 } 9207
9208 if (!swiper.params.thumbs.multipleActiveThumbs) { 9209 thumbsToActivate = 1; 9210 } 9211 9212 thumbsToActivate = Math.floor(thumbsToActivate); 9213 thumbsSwiper.slides.removeClass(thumbActiveClass); 9214 9215 if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { 9216 for (var i = 0; i < thumbsToActivate; i += 1) { 9217 thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]").addClass(thumbActiveClass); 9218 } 9219 } else { 9220 for (var _i = 0; _i < thumbsToActivate; _i += 1) { 9221 thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass); 9222 } 9223 } 9224 } 9225 }; 9226 var Thumbs$1 = { 9227 name: 'thumbs', 9228 params: { 9229 thumbs: { 9230 swiper: null, 9231 multipleActiveThumbs: true, 9232 autoScrollOffset: 0, 9233 slideThumbActiveClass: 'swiper-slide-thumb-active', 9234 thumbsContainerClass: 'swiper-container-thumbs' 9235 } 9236 }, 9237 create: function create() { 9238 var swiper = this; 9239 bindModuleMethods(swiper, { 9240 thumbs: _extends({ 9241 swiper: null, 9242 initialized: false 9243 }, Thumbs) 9244 }); 9245 }, 9246 on: { 9247 beforeInit: function beforeInit(swiper) { 9248 var thumbs = swiper.params.thumbs; 9249 if (!thumbs || !thumbs.swiper) return; 9250 swiper.thumbs.init(); 9251 swiper.thumbs.update(true); 9252 }, 9253 slideChange: function slideChange(swiper) { 9254 if (!swiper.thumbs.swiper) return; 9255 swiper.thumbs.update(); 9256 }, 9257 update: function update(swiper) { 9258 if (!swiper.thumbs.swiper) return; 9259 swiper.thumbs.update(); 9260 }, 9261 resize: function resize(swiper) { 9262 if (!swiper.thumbs.swiper) return; 9263 swiper.thumbs.update(); 9264 }, 9265 observerUpdate: function observerUpdate(swiper) { 9266 if (!swiper.thumbs.swiper) return; 9267 swiper.thumbs.update(); 9268 }, 9269 setTransition: function setTransition(swiper, duration) { 9270 var thumbsSwiper = swiper.thumbs.swiper; 9271 if (!thumbsSwiper) return; 9272 thumbsSwiper.setTransition(duration); 9273 }, 9274 beforeDestroy: function beforeDestroy(swiper) { 9275 var thumbsSwiper = swiper.thumbs.swiper; 9276 if (!thumbsSwiper) return; 9277 9278 if (swiper.thumbs.swiperCreated && thumbsSwiper) { 9279 thumbsSwiper.destroy(); 9280 } 9281 } 9282 } 9283 }; 9284 9285 // Swiper Class 9286 var components = [Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y$1, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1]; 9287 Swiper.use(components); 9288 9289 return Swiper; 9290 9291}))); 9292//# sourceMappingURL=swiper-bundle.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.