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