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