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