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