vendor: 4,310 bytes, line 1
1(function(a){a.isScrollToFixed=function(b){return !!a(b).data("ScrollToFixed")};a.ScrollToFixed=function(d,i){var m=this;m.$el=a(d);m.el=d;m.$el.data("ScrollToFixed",m);var c=false;var H=m.$el;var I;var F;var k;var e;var z;var E=0;var r=0;var j=-1;var f=-1;var u=null;var A;var g;function v(){H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");f=-1;E=H.offset().top;r=H.offset().left;if(m.options.offsets){r+=(H.offset().left-H.position().left)}if(j==-1){j=r}I=H.css("position");c=true;if(m.options.bottom!=-1){H.trigger("preFixed.ScrollToFixed");x();H.trigger("fixed.ScrollToFixed")}}function o(){var J=m.options.limit;if(!J){return 0}if(typeof(J)==="function"){return J.apply(H)}return J}function q(){return I==="fixed"}function y(){return I==="absolute"}function h(){return !(q()||y())}function x(){if(!q()){var J=H[0].getBoundingClientRect();u.css({display:H.css("display"),width:J.width,height:J.height,"float":H.css("float")});cssOptions={"z-index":m.options.zIndex,position:"fixed",top:m.options.bottom==-1?t():"",bottom:m.options.bottom==-1?"":m.options.bottom,"margin-left":"0px"};if(!m.options.dontSetWidth){cssOptions.width=H.css("width")}H.css(cssOptions);H.addClass(m.options.baseClassName);if(m.options.className){H.addClass(m.options.className)}I="fixed"}}function b(){var K=o();var J=r;if(m.options.removeOffsets){J="";K=K-E}cssOptions={position:"absolute",top:K,left:J,"margin-left":"0px",bottom:""};if(!m.options.dontSetWidth){cssOptions.width=H.css("width")}H.css(cssOptions);I="absolute"}function l(){if(!h()){f=-1;u.css("display","none");H.css({"z-index":z,width:"",position:F,left:"",top:e,"margin-left":""});H.removeClass("scroll-to-fixed-fixed");if(m.options.className){H.removeClass(m.options.className)}I=null}}function w(J){if(J!=f){H.css("left",r-J);f=J}}function t(){var J=m.options.marginTop;if(!J){return 0}if(typeof(J)==="function"){return J.apply(H)}return J}function B(){if(!a.isScrollToFixed(H)||H.is(":hidden")){return}var M=c;var L=h();if(!c){v()}else{if(h()){E=H.offset().top;r=H.offset().left}}var J=a(window).scrollLeft();var N=a(window).scrollTop();var K=o();if(m.options.minWidth&&a(window).width()<m.options.minWidth){if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}else{if(m.options.maxWidth&&a(window).width()>m.options.maxWidth){if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}else{if(m.options.bottom==-1){if(K>0&&N>=K-t()){if(!L&&(!y()||!M)){p();H.trigger("preAbsolute.ScrollToFixed");b();H.trigger("unfixed.ScrollToFixed")}}else{if(N>=E-t()){if(!q()||!M){p();H.trigger("preFixed.ScrollToFixed");x();f=-1;H.trigger("fixed.ScrollToFixed")}w(J)}else{if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}}}else{if(K>0){if(N+a(window).height()-H.outerHeight(true)>=K-(t()||-n())){if(q()){p();H.trigger("preUnfixed.ScrollToFixed");if(F==="absolute"){b()}else{l()}H.trigger("unfixed.ScrollToFixed")}}else{if(!q()){p();H.trigger("preFixed.ScrollToFixed");x()}w(J);H.trigger("fixed.ScrollToFixed")}}else{w(J)}}}}}function n(){if(!m.options.bottom){return 0}return m.options.bottom}function p(){var J=H.css("position");if(J=="absolute"){H.trigger("postAbsolute.ScrollToFixed")}else{if(J=="fixed"){H.trigger("postFixed.ScrollToFixed")}else{H.trigger("postUnfixed.ScrollToFixed")}}}var D=function(J){if(H.is(":visible")){c=false;B()}else{l()}};var G=function(J){(!!window.requestAnimationFrame)?requestAnimationFrame(B):B()};var C=function(){var K=document.body;if(document.createElement&&K&&K.appendChild&&K.removeChild){var M=document.createElement("div");if(!M.getBoundingClientRect){return null}M.innerHTML="x";M.style.cssText="position:fixed;top:100px;";K.appendChild(M);var N=K.style.height,O=K.scrollTop;K.style.height="3000px";K.scrollTop=500;var J=M.getBoundingClientRect().top;K.style.height=N;var L=(J===100);K.removeChild(M);K.scrollTop=O;return L}return null};var s=function(J){J=J||window.event;if(J.preventDefault){J.preventDefault()}J.returnValue=false};m.init=function(){m.options=a.extend({},a.ScrollToFixed.defaultOptions,i);z=H.css("z-index");m.$el.css("z-index",m.options.zIndex);u=a("<div />");I=H.css("position");F=H.css("position");k=H.css("float");e=H.css("top");if(h()){m.$el.after(u)}
1a(window).bind("resize.ScrollToFixed",D);a(window).bind("scroll.ScrollToFixed",G);if("ontouchmove" in window){a(window).bind("touchmove.ScrollToFixed",B)}if(m.options.preFixed){H.bind("preFixed.ScrollToFixed",m.options.preFixed)}if(m.options.postFixed){H.bind("postFixed.ScrollToFixed",m.options.postFixed)}if(m.options.preUnfixed){H.bind("preUnfixed.ScrollToFixed",m.options.preUnfixed)}if(m.options.postUnfixed){H.bind("postUnfixed.ScrollToFixed",m.options.postUnfixed)}if(m.options.preAbsolute){H.bind("preAbsolute.ScrollToFixed",m.options.preAbsolute)}if(m.options.postAbsolute){H.bind("postAbsolute.ScrollToFixed",m.options.postAbsolute)}if(m.options.fixed){H.bind("fixed.ScrollToFixed",m.options.fixed)}if(m.options.unfixed){H.bind("unfixed.ScrollToFixed",m.options.unfixed)}if(m.options.spacerClass){u.addClass(m.options.spacerClass)}H.bind("resize.ScrollToFixed",function(){u.height(H.height())});H.bind("scroll.ScrollToFixed",function(){H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");B()});H.bind("detach.ScrollToFixed",function(J){s(J);H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");a(window).unbind("resize.ScrollToFixed",D);a(window).unbind("scroll.ScrollToFixed",G);H.unbind(".ScrollToFixed");u.remove();m.$el.removeData("ScrollToFixed")});D()};m.init()};a.ScrollToFixed.defaultOptions={marginTop:0,limit:0,bottom:-1,zIndex:1000,baseClassName:"scroll-to-fixed-fixed"};a.fn.scrollToFixed=function(b){return this.each(function(){(new a.ScrollToFixed(this,b))})}})(jQuery); 2/* 3 _ _ _ _ 4 ___| (_) ___| | __ (_)___ 5/ __| | |/ __| |/ / | / __| 6\__ \ | | (__| < _ | \__ \ 7|___/_|_|\___|_|\_(_)/ |___/ 8 |__/ 9 10 Version: 1.6.0 11 Author: Ken Wheeler 12 Website: http://kenwheeler.github.io 13 Docs: http://kenwheeler.github.io/slick 14 Repo: http://github.com/kenwheeler/slick 15 Issues: http://github.com/kenwheeler/slick/issues 16 17 */ 18/* global window, document, define, jQuery, setInterval, clearInterval */ 19(function(factory) { 20 'use strict'; 21 if (typeof define === 'function' && define.amd) { 22 define(['jquery'], factory); 23 } else if (typeof exports !== 'undefined') { 24 module.exports = factory(require('jquery')); 25 } else { 26 factory(jQuery); 27 } 28 29}(function($) { 30 'use strict'; 31 var Slick = window.Slick || {}; 32 33 Slick = (function() { 34 35 var instanceUid = 0; 36 37 function Slick(element, settings) { 38 39 var _ = this, dataSettings; 40 41 _.defaults = { 42 accessibility: true, 43 adaptiveHeight: false, 44 appendArrows: $(element), 45 appendDots: $(element), 46 arrows: true, 47 asNavFor: null, 48 prevArrow: '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button"><span class="material-symbols-outlined">chevron_left</span></button>', 49 nextArrow: '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button"><span class="material-symbols-outlined">chevron_right</span></button>', 50 autoplay: false, 51 autoplaySpeed: 3000, 52 centerMode: false, 53 centerPadding: '50px', 54 cssEase: 'ease', 55 customPaging: function(slider, i) { 56 return $('<button type="button" data-role="none" role="button" tabindex="0" />').text(i + 1); 57 }, 58 dots: false, 59 dotsClass: 'slick-dots', 60 draggable: true, 61 easing: 'linear', 62 edgeFriction: 0.35, 63 fade: false, 64 focusOnSelect: false, 65 infinite: true, 66 initialSlide: 0, 67 lazyLoad: 'ondemand', 68 mobileFirst: false, 69 pauseOnHover: true, 70 pauseOnFocus: true, 71 pauseOnDotsHover: false, 72 respondTo: 'window', 73 responsive: null, 74 rows: 1, 75 rtl: false, 76 slide: '', 77 slidesPerRow: 1, 78 slidesToShow: 1, 79 slidesToScroll: 1, 80 speed: 500, 81 swipe: true, 82 swipeToSlide: false, 83 touchMove: true, 84 touchThreshold: 5, 85 useCSS: true, 86 useTransform: true, 87 variableWidth: false, 88 vertical: false, 89 verticalSwiping: false, 90 waitForAnimate: true, 91 zIndex: 3 92 }; 93 94 _.initials = { 95 animating: false, 96 dragging: false, 97 autoPlayTimer: null, 98 currentDirection: 0, 99 currentLeft: null, 100 currentSlide: 0, 101 direction: 1, 102 $dots: null, 103 listWidth: null, 104 listHeight: null, 105 loadIndex: 0, 106 $nextArrow: null, 107 $prevArrow: null, 108 slideCount: null, 109 slideWidth: null, 110 $slideTrack: null, 111 $slides: null, 112 sliding: false, 113 slideOffset: 0, 114 swipeLeft: null
vendor: 11,177 bytes, lines 114-497
114, 115 $list: null, 116 touchObject: {}, 117 transformsEnabled: false, 118 unslicked: false 119 }; 120 121 $.extend(_, _.initials); 122 123 _.activeBreakpoint = null; 124 _.animType = null; 125 _.animProp = null; 126 _.breakpoints = []; 127 _.breakpointSettings = []; 128 _.cssTransitions = false; 129 _.focussed = false; 130 _.interrupted = false; 131 _.hidden = 'hidden'; 132 _.paused = true; 133 _.positionProp = null; 134 _.respondTo = null; 135 _.rowCount = 1; 136 _.shouldClick = true; 137 _.$slider = $(element); 138 _.$slidesCache = null; 139 _.transformType = null; 140 _.transitionType = null; 141 _.visibilityChange = 'visibilitychange'; 142 _.windowWidth = 0; 143 _.windowTimer = null; 144 145 dataSettings = $(element).data('slick') || {}; 146 147 _.options = $.extend({}, _.defaults, settings, dataSettings); 148 149 _.currentSlide = _.options.initialSlide; 150 151 _.originalSettings = _.options; 152 153 if (typeof document.mozHidden !== 'undefined') { 154 _.hidden = 'mozHidden'; 155 _.visibilityChange = 'mozvisibilitychange'; 156 } else if (typeof document.webkitHidden !== 'undefined') { 157 _.hidden = 'webkitHidden'; 158 _.visibilityChange = 'webkitvisibilitychange'; 159 } 160 161 _.autoPlay = $.proxy(_.autoPlay, _); 162 _.autoPlayClear = $.proxy(_.autoPlayClear, _); 163 _.autoPlayIterator = $.proxy(_.autoPlayIterator, _); 164 _.changeSlide = $.proxy(_.changeSlide, _); 165 _.clickHandler = $.proxy(_.clickHandler, _); 166 _.selectHandler = $.proxy(_.selectHandler, _); 167 _.setPosition = $.proxy(_.setPosition, _); 168 _.swipeHandler = $.proxy(_.swipeHandler, _); 169 _.dragHandler = $.proxy(_.dragHandler, _); 170 _.keyHandler = $.proxy(_.keyHandler, _); 171 172 _.instanceUid = instanceUid++; 173 174 // A simple way to check for HTML strings 175 // Strict HTML recognition (must start with <) 176 // Extracted from jQuery v1.11 source 177 _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/; 178 179 180 _.registerBreakpoints(); 181 _.init(true); 182 183 } 184 185 return Slick; 186 187 }()); 188 189 Slick.prototype.activateADA = function() { 190 var _ = this; 191 192 _.$slideTrack.find('.slick-active').attr({ 193 'aria-hidden': 'false' 194 }).find('a, input, button, select').attr({ 195 'tabindex': '0' 196 }); 197 198 }; 199 200 Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) { 201 202 var _ = this; 203 204 if (typeof(index) === 'boolean') { 205 addBefore = index; 206 index = null; 207 } else if (index < 0 || (index >= _.slideCount)) { 208 return false; 209 } 210 211 _.unload(); 212 213 if (typeof(index) === 'number') { 214 if (index === 0 && _.$slides.length === 0) { 215 $(markup).appendTo(_.$slideTrack); 216 } else if (addBefore) { 217 $(markup).insertBefore(_.$slides.eq(index)); 218 } else { 219 $(markup).insertAfter(_.$slides.eq(index)); 220 } 221 } else { 222 if (addBefore === true) { 223 $(markup).prependTo(_.$slideTrack); 224 } else { 225 $(markup).appendTo(_.$slideTrack); 226 } 227 } 228 229 _.$slides = _.$slideTrack.children(this.options.slide); 230 231 _.$slideTrack.children(this.options.slide).detach(); 232 233 _.$slideTrack.append(_.$slides); 234 235 _.$slides.each(function(index, element) { 236 $(element).attr('data-slick-index', index); 237 }); 238 239 _.$slidesCache = _.$slides; 240 241 _.reinit(); 242 243 }; 244 245 Slick.prototype.animateHeight = function() { 246 var _ = this; 247 if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) { 248 var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true); 249 _.$list.animate({ 250 height: targetHeight 251 }, _.options.speed); 252 } 253 }; 254 255 Slick.prototype.animateSlide = function(targetLeft, callback) { 256 257 var animProps = {}, 258 _ = this; 259 260 _.animateHeight(); 261 262 if (_.options.rtl === true && _.options.vertical === false) { 263 targetLeft = -targetLeft; 264 } 265 if (_.transformsEnabled === false) { 266 if (_.options.vertical === false) { 267 _.$slideTrack.animate({ 268 left: targetLeft 269 }, _.options.speed, _.options.easing, callback); 270 } else { 271 _.$slideTrack.animate({ 272 top: targetLeft 273 }, _.options.speed, _.options.easing, callback); 274 } 275 276 } else { 277 278 if (_.cssTransitions === false) { 279 if (_.options.rtl === true) { 280 _.currentLeft = -(_.currentLeft); 281 } 282 $({ 283 animStart: _.currentLeft 284 }).animate({ 285 animStart: targetLeft 286 }, { 287 duration: _.options.speed, 288 easing: _.options.easing, 289 step: function(now) { 290 now = Math.ceil(now); 291 if (_.options.vertical === false) { 292 animProps[_.animType] = 'translate(' + 293 now + 'px, 0px)'; 294 _.$slideTrack.css(animProps); 295 } else { 296 animProps[_.animType] = 'translate(0px,' + 297 now + 'px)'; 298 _.$slideTrack.css(animProps); 299 } 300 }, 301 complete: function() { 302 if (callback) { 303 callback.call(); 304 } 305 } 306 }); 307 308 } else { 309 310 _.applyTransition(); 311 targetLeft = Math.ceil(targetLeft); 312 313 if (_.options.vertical === false) { 314 animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)'; 315 } else { 316 animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)'; 317 } 318 _.$slideTrack.css(animProps); 319 320 if (callback) { 321 setTimeout(function() { 322 323 _.disableTransition(); 324 325 callback.call(); 326 }, _.options.speed); 327 } 328 329 } 330 331 } 332 333 }; 334 335 Slick.prototype.getNavTarget = function() { 336 337 var _ = this, 338 asNavFor = _.options.asNavFor; 339 340 if ( asNavFor && asNavFor !== null ) { 341 asNavFor = $(asNavFor).not(_.$slider); 342 } 343 344 return asNavFor; 345 346 }; 347 348 Slick.prototype.asNavFor = function(index) { 349 350 var _ = this, 351 asNavFor = _.getNavTarget(); 352 353 if ( asNavFor !== null && typeof asNavFor === 'object' ) { 354 asNavFor.each(function() { 355 var target = $(this).slick('getSlick'); 356 if(!target.unslicked) { 357 target.slideHandler(index, true); 358 } 359 }); 360 } 361 362 }; 363 364 Slick.prototype.applyTransition = function(slide) { 365 366 var _ = this, 367 transition = {}; 368 369 if (_.options.fade === false) { 370 transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase; 371 } else { 372 transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase; 373 } 374 375 if (_.options.fade === false) { 376 _.$slideTrack.css(transition); 377 } else { 378 _.$slides.eq(slide).css(transition); 379 } 380 381 }; 382 383 Slick.prototype.autoPlay = function() { 384 385 var _ = this; 386 387 _.autoPlayClear(); 388 389 if ( _.slideCount > _.options.slidesToShow ) { 390 _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed ); 391 } 392 393 }; 394 395 Slick.prototype.autoPlayClear = function() { 396 397 var _ = this; 398 399 if (_.autoPlayTimer) { 400 clearInterval(_.autoPlayTimer); 401 } 402 403 }; 404 405 Slick.prototype.autoPlayIterator = function() { 406 407 var _ = this, 408 slideTo = _.currentSlide + _.options.slidesToScroll; 409 410 if ( !_.paused && !_.interrupted && !_.focussed ) { 411 412 if ( _.options.infinite === false ) { 413 414 if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) { 415 _.direction = 0; 416 } 417 418 else if ( _.direction === 0 ) { 419 420 slideTo = _.currentSlide - _.options.slidesToScroll; 421 422 if ( _.currentSlide - 1 === 0 ) { 423 _.direction = 1; 424 } 425 426 } 427 428 } 429 430 _.slideHandler( slideTo ); 431 432 } 433 434 }; 435 436 Slick.prototype.buildArrows = function() { 437 438 var _ = this; 439 440 if (_.options.arrows === true ) { 441 442 _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow'); 443 _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow'); 444 445 if( _.slideCount > _.options.slidesToShow ) { 446 447 _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex'); 448 _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex'); 449 450 if (_.htmlExpr.test(_.options.prevArrow)) { 451 _.$prevArrow.prependTo(_.options.appendArrows); 452 } 453 454 if (_.htmlExpr.test(_.options.nextArrow)) { 455 _.$nextArrow.appendTo(_.options.appendArrows); 456 } 457 458 if (_.options.infinite !== true) { 459 _.$prevArrow 460 .addClass('slick-disabled') 461 .attr('aria-disabled', 'true'); 462 } 463 464 } else { 465 466 _.$prevArrow.add( _.$nextArrow ) 467 468 .addClass('slick-hidden') 469 .attr({ 470 'aria-disabled': 'true', 471 'tabindex': '-1' 472 }); 473 474 } 475 476 } 477 478 }; 479 480 Slick.prototype.buildDots = function() { 481 482 var _ = this, 483 i, dot; 484 485 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { 486 487 _.$slider.addClass('slick-dotted'); 488 489 dot = $('<ul />').addClass(_.options.dotsClass); 490 491 for (i = 0; i <= _.getDotCount(); i += 1) { 492 dot.append($('<li />').append(_.options.customPaging.call(this, _, i))); 493 } 494 495 _.$dots = dot.appendTo(_.options.appendDots); 496 497 _.$dots.find('li').first().addClass('slick-active')
vendor: 14,869 bytes, lines 497-985
497.attr('aria-hidden', 'false'); 498 499 } 500 501 }; 502 503 Slick.prototype.buildOut = function() { 504 505 var _ = this; 506 507 _.$slides = 508 _.$slider 509 .children( _.options.slide + ':not(.slick-cloned)') 510 .addClass('slick-slide'); 511 512 _.slideCount = _.$slides.length; 513 514 _.$slides.each(function(index, element) { 515 $(element) 516 .attr('data-slick-index', index) 517 .data('originalStyling', $(element).attr('style') || ''); 518 }); 519 520 _.$slider.addClass('slick-slider'); 521 522 _.$slideTrack = (_.slideCount === 0) ? 523 $('<div class="slick-track"/>').appendTo(_.$slider) : 524 _.$slides.wrapAll('<div class="slick-track"/>').parent(); 525 526 _.$list = _.$slideTrack.wrap( 527 '<div aria-live="polite" class="slick-list"/>').parent(); 528 _.$slideTrack.css('opacity', 0); 529 530 if (_.options.centerMode === true || _.options.swipeToSlide === true) { 531 _.options.slidesToScroll = 1; 532 } 533 534 $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading'); 535 536 _.setupInfinite(); 537 538 _.buildArrows(); 539 540 _.buildDots(); 541 542 _.updateDots(); 543 544 545 _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0); 546 547 if (_.options.draggable === true) { 548 _.$list.addClass('draggable'); 549 } 550 551 }; 552 553 Slick.prototype.buildRows = function() { 554 555 var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection; 556 557 newSlides = document.createDocumentFragment(); 558 originalSlides = _.$slider.children(); 559 560 if(_.options.rows > 1) { 561 562 slidesPerSection = _.options.slidesPerRow * _.options.rows; 563 numOfSlides = Math.ceil( 564 originalSlides.length / slidesPerSection 565 ); 566 567 for(a = 0; a < numOfSlides; a++){ 568 var slide = document.createElement('div'); 569 for(b = 0; b < _.options.rows; b++) { 570 var row = document.createElement('div'); 571 for(c = 0; c < _.options.slidesPerRow; c++) { 572 var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c)); 573 if (originalSlides.get(target)) { 574 row.appendChild(originalSlides.get(target)); 575 } 576 } 577 slide.appendChild(row); 578 } 579 newSlides.appendChild(slide); 580 } 581 582 _.$slider.empty().append(newSlides); 583 _.$slider.children().children().children() 584 .css({ 585 'width':(100 / _.options.slidesPerRow) + '%', 586 'display': 'inline-block' 587 }); 588 589 } 590 591 }; 592 593 Slick.prototype.checkResponsive = function(initial, forceUpdate) { 594 595 var _ = this, 596 breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false; 597 var sliderWidth = _.$slider.width(); 598 var windowWidth = window.innerWidth || $(window).width(); 599 600 if (_.respondTo === 'window') { 601 respondToWidth = windowWidth; 602 } else if (_.respondTo === 'slider') { 603 respondToWidth = sliderWidth; 604 } else if (_.respondTo === 'min') { 605 respondToWidth = Math.min(windowWidth, sliderWidth); 606 } 607 608 if ( _.options.responsive && 609 _.options.responsive.length && 610 _.options.responsive !== null) { 611 612 targetBreakpoint = null; 613 614 for (breakpoint in _.breakpoints) { 615 if (_.breakpoints.hasOwnProperty(breakpoint)) { 616 if (_.originalSettings.mobileFirst === false) { 617 if (respondToWidth < _.breakpoints[breakpoint]) { 618 targetBreakpoint = _.breakpoints[breakpoint]; 619 } 620 } else { 621 if (respondToWidth > _.breakpoints[breakpoint]) { 622 targetBreakpoint = _.breakpoints[breakpoint]; 623 } 624 } 625 } 626 } 627 628 if (targetBreakpoint !== null) { 629 if (_.activeBreakpoint !== null) { 630 if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) { 631 _.activeBreakpoint = 632 targetBreakpoint; 633 if (_.breakpointSettings[targetBreakpoint] === 'unslick') { 634 _.unslick(targetBreakpoint); 635 } else { 636 _.options = $.extend({}, _.originalSettings, 637 _.breakpointSettings[ 638 targetBreakpoint]); 639 if (initial === true) { 640 _.currentSlide = _.options.initialSlide; 641 } 642 _.refresh(initial); 643 } 644 triggerBreakpoint = targetBreakpoint; 645 } 646 } else { 647 _.activeBreakpoint = targetBreakpoint; 648 if (_.breakpointSettings[targetBreakpoint] === 'unslick') { 649 _.unslick(targetBreakpoint); 650 } else { 651 _.options = $.extend({}, _.originalSettings, 652 _.breakpointSettings[ 653 targetBreakpoint]); 654 if (initial === true) { 655 _.currentSlide = _.options.initialSlide; 656 } 657 _.refresh(initial); 658 } 659 triggerBreakpoint = targetBreakpoint; 660 } 661 } else { 662 if (_.activeBreakpoint !== null) { 663 _.activeBreakpoint = null; 664 _.options = _.originalSettings; 665 if (initial === true) { 666 _.currentSlide = _.options.initialSlide; 667 } 668 _.refresh(initial); 669 triggerBreakpoint = targetBreakpoint; 670 } 671 } 672 673 // only trigger breakpoints during an actual break. not on initialize. 674 if( !initial && triggerBreakpoint !== false ) { 675 _.$slider.trigger('breakpoint', [_, triggerBreakpoint]); 676 } 677 } 678 679 }; 680 681 Slick.prototype.changeSlide = function(event, dontAnimate) { 682 683 var _ = this, 684 $target = $(event.currentTarget), 685 indexOffset, slideOffset, unevenOffset; 686 687 // If target is a link, prevent default action. 688 if($target.is('a')) { 689 event.preventDefault(); 690 } 691 692 // If target is not the <li> element (ie: a child), find the <li>. 693 if(!$target.is('li')) { 694 $target = $target.closest('li'); 695 } 696 697 unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0); 698 indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll; 699 700 switch (event.data.message) { 701 702 case 'previous': 703 slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset; 704 if (_.slideCount > _.options.slidesToShow) { 705 _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate); 706 } 707 break; 708 709 case 'next': 710 slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset; 711 if (_.slideCount > _.options.slidesToShow) { 712 _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate); 713 } 714 break; 715 716 case 'index': 717 var index = event.data.index === 0 ? 0 : 718 event.data.index || $target.index() * _.options.slidesToScroll; 719 720 _.slideHandler(_.checkNavigable(index), false, dontAnimate); 721 $target.children().trigger('focus'); 722 break; 723 724 default: 725 return; 726 } 727 728 }; 729 730 Slick.prototype.checkNavigable = function(index) { 731 732 var _ = this, 733 navigables, prevNavigable; 734 735 navigables = _.getNavigableIndexes(); 736 prevNavigable = 0; 737 if (index > navigables[navigables.length - 1]) { 738 index = navigables[navigables.length - 1]; 739 } else { 740 for (var n in navigables) { 741 if (index < navigables[n]) { 742 index = prevNavigable; 743 break; 744 } 745 prevNavigable = navigables[n]; 746 } 747 } 748 749 return index; 750 }; 751 752 Slick.prototype.cleanUpEvents = function() { 753 754 var _ = this; 755 756 if (_.options.dots && _.$dots !== null) { 757 758 $('li', _.$dots) 759 .off('click.slick', _.changeSlide) 760 .off('mouseenter.slick', $.proxy(_.interrupt, _, true)) 761 .off('mouseleave.slick', $.proxy(_.interrupt, _, false)); 762 763 } 764 765 _.$slider.off('focus.slick blur.slick'); 766 767 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 768 _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide); 769 _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide); 770 } 771 772 _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler); 773 _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler); 774 _.$list.off('touchend.slick mouseup.slick', _.swipeHandler); 775 _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler); 776 777 _.$list.off('click.slick', _.clickHandler); 778 779 $(document).off(_.visibilityChange, _.visibility); 780 781 _.cleanUpSlideEvents(); 782 783 if (_.options.accessibility === true) { 784 _.$list.off('keydown.slick', _.keyHandler); 785 } 786 787 if (_.options.focusOnSelect === true) { 788 $(_.$slideTrack).children().off('click.slick', _.selectHandler); 789 } 790 791 $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange); 792 793 $(window).off('resize.slick.slick-' + _.instanceUid, _.resize); 794 795 $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault); 796 797 $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition); 798 $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition); 799 800 }; 801 802 Slick.prototype.cleanUpSlideEvents = function() { 803 804 var _ = this; 805 806 _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true)); 807 _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false)); 808 809 }; 810 811 Slick.prototype.cleanUpRows = function() { 812 813 var _ = this, originalSlides; 814 815 if(_.options.rows > 1) { 816 originalSlides = _.$slides.children().children(); 817 originalSlides.removeAttr('style'); 818 _.$slider.empty().append(originalSlides); 819 } 820 821 }; 822 823 Slick.prototype.clickHandler = function(event) { 824 825 var _ = this; 826 827 if (_.shouldClick === false) { 828 event.stopImmediatePropagation(); 829 event.stopPropagation(); 830 event.preventDefault(); 831 } 832 833 }; 834 835 Slick.prototype.destroy = function(refresh) { 836 837 var _ = this; 838 839 _.autoPlayClear(); 840 841 _.touchObject = {}; 842 843 _.cleanUpEvents(); 844 845 $('.slick-cloned', _.$slider).detach(); 846 847 if (_.$dots) { 848 _.$dots.remove(); 849 } 850 851 852 if ( _.$prevArrow && _.$prevArrow.length ) { 853 854 _.$prevArrow 855 .removeClass('slick-disabled slick-arrow slick-hidden') 856 .removeAttr('aria-hidden aria-disabled tabindex') 857 .css('display',''); 858 859 if ( _.htmlExpr.test( _.options.prevArrow )) { 860 _.$prevArrow.remove(); 861 } 862 } 863 864 if ( _.$nextArrow && _.$nextArrow.length ) { 865 866 _.$nextArrow 867 .removeClass('slick-disabled slick-arrow slick-hidden') 868 .removeAttr('aria-hidden aria-disabled tabindex') 869 .css('display',''); 870 871 if ( _.htmlExpr.test( _.options.nextArrow )) { 872 _.$nextArrow.remove(); 873 } 874 875 } 876 877 878 if (_.$slides) { 879 880 _.$slides 881 .removeClass('slick-slide slick-active slick-center slick-visible slick-current') 882 .removeAttr('aria-hidden') 883 .removeAttr('data-slick-index') 884 .each(function(){ 885 $(this).attr('style', $(this).data('originalStyling')); 886 }); 887 888 _.$slideTrack.children(this.options.slide).detach(); 889 890 _.$slideTrack.detach(); 891 892 _.$list.detach(); 893 894 _.$slider.append(_.$slides); 895 } 896 897 _.cleanUpRows(); 898 899 _.$slider.removeClass('slick-slider'); 900 _.$slider.removeClass('slick-initialized'); 901 _.$slider.removeClass('slick-dotted'); 902 903 _.unslicked = true; 904 905 if(!refresh) { 906 _.$slider.trigger('destroy', [_]); 907 } 908 909 }; 910 911 Slick.prototype.disableTransition = function(slide) { 912 913 var _ = this, 914 transition = {}; 915 916 transition[_.transitionType] = ''; 917 918 if (_.options.fade === false) { 919 _.$slideTrack.css(transition); 920 } else { 921 _.$slides.eq(slide).css(transition); 922 } 923 924 }; 925 926 Slick.prototype.fadeSlide = function(slideIndex, callback) { 927 928 var _ = this; 929 930 if (_.cssTransitions === false) { 931 932 _.$slides.eq(slideIndex).css({ 933 zIndex: _.options.zIndex 934 }); 935 936 _.$slides.eq(slideIndex).animate({ 937 opacity: 1 938 }, _.options.speed, _.options.easing, callback); 939 940 } else { 941 942 _.applyTransition(slideIndex); 943 944 _.$slides.eq(slideIndex).css({ 945 opacity: 1, 946 zIndex: _.options.zIndex 947 }); 948 949 if (callback) { 950 setTimeout(function() { 951 952 _.disableTransition(slideIndex); 953 954 callback.call(); 955 }, _.options.speed); 956 } 957 958 } 959 960 }; 961 962 Slick.prototype.fadeSlideOut = function(slideIndex) { 963 964 var _ = this; 965 966 if (_.cssTransitions === false) { 967 968 _.$slides.eq(slideIndex).animate({ 969 opacity: 0, 970 zIndex: _.options.zIndex - 2 971 }, _.options.speed, _.options.easing); 972 973 } else { 974 975 _.applyTransition(slideIndex); 976 977 _.$slides.eq(slideIndex).css({ 978 opacity: 0, 979 zIndex: _.options.zIndex - 2 980 }); 981 982 } 983 984 }; 985
986 Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) { 987 988 var _ = this; 989 990 if (filter !== null) { 991 992 _.$slidesCache = _.$slides; 993 994 _.unload(); 995 996 _.$slideTrack.children(this.options.slide).detach(); 997 998 _.$slidesCache.filter(filter).appendTo(_.$slideTrack); 999 1000 _.reinit(); 1001 1002 } 1003 1004 }; 1005 1006 Slick.prototype.focusHandler = function() { 1007 1008 var _ = this; 1009 1010 _.$slider 1011 .off('focus.slick blur.slick') 1012 .on('focus.slick blur.slick', 1013 '*:not(.slick-arrow)', function(event) { 1014 1015 event.stopImmediatePropagation(); 1016 var $sf = $(this); 1017 1018 setTimeout(function() { 1019 1020 if( _.options.pauseOnFocus ) { 1021 _.focussed = $sf.is(':focus'); 1022 _.autoPlay(); 1023 } 1024 1025 }, 0); 1026 1027 }); 1028 }; 1029 1030 Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() { 1031 1032 var _ = this; 1033 return _.currentSlide; 1034 1035 }; 1036 1037 Slick.prototype.getDotCount = function() { 1038 1039 var _ = this; 1040 1041 var breakPoint = 0; 1042 var counter = 0; 1043 var pagerQty = 0; 1044 1045 if (_.options.infinite === true) { 1046 while (breakPoint < _.slideCount) { 1047 ++pagerQty; 1048 breakPoint = counter + _.options.slidesToScroll; 1049 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow; 1050 } 1051 } else if (_.options.centerMode === true) { 1052 pagerQty = _.slideCount; 1053 } else if(!_.options.asNavFor) { 1054 pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll); 1055 }else { 1056 while (breakPoint < _.slideCount) { 1057 ++pagerQty; 1058 breakPoint = counter + _.options.slidesToScroll; 1059 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow; 1060 } 1061 } 1062 1063 return pagerQty - 1; 1064 1065 }; 1066 1067 Slick.prototype.getLeft = function(slideIndex) { 1068 1069 var _ = this, 1070 targetLeft, 1071 verticalHeight, 1072 verticalOffset = 0, 1073 targetSlide; 1074 1075 _.slideOffset = 0; 1076 verticalHeight = _.$slides.first().outerHeight(true); 1077 1078 if (_.options.infinite === true) { 1079 if (_.slideCount > _.options.slidesToShow) { 1080 _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1; 1081 verticalOffset = (verticalHeight * _.options.slidesToShow) * -1; 1082 } 1083 if (_.slideCount % _.options.slidesToScroll !== 0) { 1084 if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) { 1085 if (slideIndex > _.slideCount) { 1086 _.slideOffset = ((_.options.slidesToShow - (sl
vendor: 921 bytes, lines 1086-1106
1086ideIndex - _.slideCount)) * _.slideWidth) * -1; 1087 verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1; 1088 } else { 1089 _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1; 1090 verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1; 1091 } 1092 } 1093 } 1094 } else { 1095 if (slideIndex + _.options.slidesToShow > _.slideCount) { 1096 _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth; 1097 verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight; 1098 } 1099 } 1100 1101 if (_.slideCount <= _.options.slidesToShow) { 1102 _.slideOffset = 0; 1103 verticalOffset = 0; 1104 } 1105 1106
vendor: 5,167 bytes, lines 1106-1279
1106 if (_.options.centerMode === true && _.options.infinite === true) { 1107 _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth; 1108 } else if (_.options.centerMode === true) { 1109 _.slideOffset = 0; 1110 _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2); 1111 } 1112 1113 if (_.options.vertical === false) { 1114 targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset; 1115 } else { 1116 targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset; 1117 } 1118 1119 if (_.options.variableWidth === true) { 1120 1121 if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) { 1122 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex); 1123 } else { 1124 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow); 1125 } 1126 1127 if (_.options.rtl === true) { 1128 if (targetSlide[0]) { 1129 targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1; 1130 } else { 1131 targetLeft = 0; 1132 } 1133 } else { 1134 targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0; 1135 } 1136 1137 if (_.options.centerMode === true) { 1138 if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) { 1139 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex); 1140 } else { 1141 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1); 1142 } 1143 1144 if (_.options.rtl === true) { 1145 if (targetSlide[0]) { 1146 targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1; 1147 } else { 1148 targetLeft = 0; 1149 } 1150 } else { 1151 targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0; 1152 } 1153 1154 targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2; 1155 } 1156 } 1157 1158 return targetLeft; 1159 1160 }; 1161 1162 Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) { 1163 1164 var _ = this; 1165 1166 return _.options[option]; 1167 1168 }; 1169 1170 Slick.prototype.getNavigableIndexes = function() { 1171 1172 var _ = this, 1173 breakPoint = 0, 1174 counter = 0, 1175 indexes = [], 1176 max; 1177 1178 if (_.options.infinite === false) { 1179 max = _.slideCount; 1180 } else { 1181 breakPoint = _.options.slidesToScroll * -1; 1182 counter = _.options.slidesToScroll * -1; 1183 max = _.slideCount * 2; 1184 } 1185 1186 while (breakPoint < max) { 1187 indexes.push(breakPoint); 1188 breakPoint = counter + _.options.slidesToScroll; 1189 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow; 1190 } 1191 1192 return indexes; 1193 1194 }; 1195 1196 Slick.prototype.getSlick = function() { 1197 1198 return this; 1199 1200 }; 1201 1202 Slick.prototype.getSlideCount = function() { 1203 1204 var _ = this, 1205 slidesTraversed, swipedSlide, centerOffset; 1206 1207 centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0; 1208 1209 if (_.options.swipeToSlide === true) { 1210 _.$slideTrack.find('.slick-slide').each(function(index, slide) { 1211 if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) { 1212 swipedSlide = slide; 1213 return false; 1214 } 1215 }); 1216 1217 slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1; 1218 1219 return slidesTraversed; 1220 1221 } else { 1222 return _.options.slidesToScroll; 1223 } 1224 1225 }; 1226 1227 Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) { 1228 1229 var _ = this; 1230 1231 _.changeSlide({ 1232 data: { 1233 message: 'index', 1234 index: parseInt(slide) 1235 } 1236 }, dontAnimate); 1237 1238 }; 1239 1240 Slick.prototype.init = function(creation) { 1241 1242 var _ = this; 1243 1244 if (!$(_.$slider).hasClass('slick-initialized')) { 1245 1246 $(_.$slider).addClass('slick-initialized'); 1247 1248 _.buildRows(); 1249 _.buildOut(); 1250 _.setProps(); 1251 _.startLoad(); 1252 _.loadSlider(); 1253 _.initializeEvents(); 1254 _.updateArrows(); 1255 _.updateDots(); 1256 _.checkResponsive(true); 1257 _.focusHandler(); 1258 1259 } 1260 1261 if (creation) { 1262 _.$slider.trigger('init', [_]); 1263 } 1264 1265 if (_.options.accessibility === true) { 1266 _.initADA(); 1267 } 1268 1269 if ( _.options.autoplay ) { 1270 1271 _.paused = false; 1272 _.autoPlay(); 1273 1274 } 1275 1276 }; 1277 1278 Slick.prototype.initADA = function() { 1279 var _ = this
1279; 1280 _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({ 1281 'aria-hidden': 'true', 1282 'tabindex': '-1' 1283 }).find('a, input, button, select').attr({ 1284 'tabindex': '-1' 1285 }); 1286 1287 _.$slideTrack.attr('role', 'listbox'); 1288 1289 _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) { 1290 $(this).attr({ 1291 'role': 'option', 1292 'aria-describedby': 'slick-slide' + _.instanceUid + i + '' 1293 }); 1294 }); 1295 1296 if (_.$dots !== null) { 1297 _.$dots.attr('role', 'tablist').find('li').each(function(i) { 1298 $(this).attr({ 1299 'role': 'presentation', 1300 'aria-selected': 'false', 1301 'aria-controls': 'navigation' + _.instanceUid + i + '', 1302 'id': 'slick-slide' + _.instanceUid + i + '' 1303 }); 1304 }) 1305 .first().attr('aria-selected', 'true').end() 1306 .find('button').attr('role', 'button').end() 1307 .closest('div').attr('role', 'toolbar'); 1308 } 1309 _.activateADA(); 1310 1311 }; 1312 1313 Slick.prototype.initArrowEvents = function() { 1314 1315 var _ = this; 1316 1317 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 1318 _.$prevArrow 1319 .off('click.slick') 1320 .on('click.slick', { 1321 message: 'previous' 1322 }, _.changeSlide); 1323 _.$nextArrow 1324 .off('click.slick') 1325 .on('click.slick', { 1326 message: 'next' 1327 }, _.changeSlide); 1328 } 1329 1330 }; 1331 1332 Slick.prototype.initDotEvents = function() { 1333 1334 var _ = this; 1335 1336 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { 1337 $('li', _.$dots).on('click.slick', { 1338 message: 'index' 1339 }, _.changeSlide); 1340 } 1341 1342 if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) { 1343 1344 $('li', _.$dots) 1345 .on('mouseenter.slick', $.proxy(_.interrupt, _, true)) 1346 .on('mouseleave.slick', $.proxy(_.interrupt, _, false)); 1347 1348 } 1349 1350 }; 1351 1352 Slick.prototype.initSlideEvents = function() { 1353 1354 var _ = this; 1355 1356 if ( _.options.pauseOnHover ) { 1357 1358 _.$list.find('.slick-slide img').on('mouseenter.slick', $.proxy(_.interrupt, _, true)); 1359 _.$list.find('.slick-slide img').on('mouseleave.slick', $.proxy(_.interrupt, _, false)); 1360 1361 } 1362 1363 }; 1364 1365 Slick.prototype.initializeEvents = function() { 1366 1367 var _ = this; 1368 1369 _.initArrowEvents(); 1370 1371 _.initDotEvents(); 1372 _.initSlideEvents(); 1373 1374 _.$list.on('touchstart.slick mousedown.slick', { 1375 action: 'start' 1376 }, _.swipeHandler); 1377 _.$list.on('touchmove.slick mousemove.slick', { 1378 action: 'move' 1379 }, _.swipeHandler); 1380 _.$list.on('touchend.slick mouseup.slick', { 1381 action: 'end' 1382 }, _.swipeHandler);
vendor: 12,527 bytes, lines 1383-1844
1383 _.$list.on('touchcancel.slick mouseleave.slick', { 1384 action: 'end' 1385 }, _.swipeHandler); 1386 1387 _.$list.on('click.slick', _.clickHandler); 1388 1389 $(document).on(_.visibilityChange, $.proxy(_.visibility, _)); 1390 1391 if (_.options.accessibility === true) { 1392 _.$list.on('keydown.slick', _.keyHandler); 1393 } 1394 1395 if (_.options.focusOnSelect === true) { 1396 $(_.$slideTrack).children().on('click.slick', _.selectHandler); 1397 } 1398 1399 $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _)); 1400 1401 $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _)); 1402 1403 $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault); 1404 1405 $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition); 1406 $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition); 1407 1408 }; 1409 1410 Slick.prototype.initUI = function() { 1411 1412 var _ = this; 1413 1414 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 1415 1416 _.$prevArrow.show(); 1417 _.$nextArrow.show(); 1418 1419 } 1420 1421 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { 1422 1423 _.$dots.show(); 1424 1425 } 1426 1427 }; 1428 1429 Slick.prototype.keyHandler = function(event) { 1430 1431 var _ = this; 1432 //Dont slide if the cursor is inside the form fields and arrow keys are pressed 1433 if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) { 1434 if (event.keyCode === 37 && _.options.accessibility === true) { 1435 _.changeSlide({ 1436 data: { 1437 message: _.options.rtl === true ? 'next' : 'previous' 1438 } 1439 }); 1440 } else if (event.keyCode === 39 && _.options.accessibility === true) { 1441 _.changeSlide({ 1442 data: { 1443 message: _.options.rtl === true ? 'previous' : 'next' 1444 } 1445 }); 1446 } 1447 } 1448 1449 }; 1450 1451 Slick.prototype.lazyLoad = function() { 1452 1453 var _ = this, 1454 loadRange, cloneRange, rangeStart, rangeEnd; 1455 1456 function loadImages(imagesScope) { 1457 1458 $('img[data-lazy]', imagesScope).each(function() { 1459 1460 var image = $(this), 1461 imageSource = $(this).attr('data-lazy'), 1462 imageToLoad = document.createElement('img'); 1463 1464 imageToLoad.onload = function() { 1465 1466 image 1467 .animate({ opacity: 0 }, 100, function() { 1468 image 1469 .attr('src', imageSource) 1470 .animate({ opacity: 1 }, 200, function() { 1471 image 1472 .removeAttr('data-lazy') 1473 .removeClass('slick-loading'); 1474 }); 1475 _.$slider.trigger('lazyLoaded', [_, image, imageSource]); 1476 }); 1477 1478 }; 1479 1480 imageToLoad.onerror = function() { 1481 1482 image 1483 .removeAttr( 'data-lazy' ) 1484 .removeClass( 'slick-loading' ) 1485 .addClass( 'slick-lazyload-error' ); 1486 1487 _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]); 1488 1489 }; 1490 1491 imageToLoad.src = imageSource; 1492 1493 }); 1494 1495 } 1496 1497 if (_.options.centerMode === true) { 1498 if (_.options.infinite === true) { 1499 rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1); 1500 rangeEnd = rangeStart + _.options.slidesToShow + 2; 1501 } else { 1502 rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1)); 1503 rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide; 1504 } 1505 } else { 1506 rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide; 1507 rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow); 1508 if (_.options.fade === true) { 1509 if (rangeStart > 0) rangeStart--; 1510 if (rangeEnd <= _.slideCount) rangeEnd++; 1511 } 1512 } 1513 1514 loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd); 1515 loadImages(loadRange); 1516 1517 if (_.slideCount <= _.options.slidesToShow) { 1518 cloneRange = _.$slider.find('.slick-slide'); 1519 loadImages(cloneRange); 1520 } else 1521 if (_.currentSlide >= _.slideCount - _.options.slidesToShow) { 1522 cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow); 1523 loadImages(cloneRange); 1524 } else if (_.currentSlide === 0) { 1525 cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1); 1526 loadImages(cloneRange); 1527 } 1528 1529 }; 1530 1531 Slick.prototype.loadSlider = function() { 1532 1533 var _ = this; 1534 1535 _.setPosition(); 1536 1537 _.$slideTrack.css({ 1538 opacity: 1 1539 }); 1540 1541 _.$slider.removeClass('slick-loading'); 1542 1543 _.initUI(); 1544 1545 if (_.options.lazyLoad === 'progressive') { 1546 _.progressiveLazyLoad(); 1547 } 1548 1549 }; 1550 1551 Slick.prototype.next = Slick.prototype.slickNext = function() { 1552 1553 var _ = this; 1554 1555 _.changeSlide({ 1556 data: { 1557 message: 'next' 1558 } 1559 }); 1560 1561 }; 1562 1563 Slick.prototype.orientationChange = function() { 1564 1565 var _ = this; 1566 1567 _.checkResponsive(); 1568 _.setPosition(); 1569 1570 }; 1571 1572 Slick.prototype.pause = Slick.prototype.slickPause = function() { 1573 1574 var _ = this; 1575 1576 _.autoPlayClear(); 1577 _.paused = true; 1578 1579 }; 1580 1581 Slick.prototype.play = Slick.prototype.slickPlay = function() { 1582 1583 var _ = this; 1584 1585 _.autoPlay(); 1586 _.options.autoplay = true; 1587 _.paused = false; 1588 _.focussed = false; 1589 _.interrupted = false; 1590 1591 }; 1592 1593 Slick.prototype.postSlide = function(index) { 1594 1595 var _ = this; 1596 1597 if( !_.unslicked ) { 1598 1599 _.$slider.trigger('afterChange', [_, index]); 1600 1601 _.animating = false; 1602 1603 _.setPosition(); 1604 1605 _.swipeLeft = null; 1606 1607 if ( _.options.autoplay ) { 1608 _.autoPlay(); 1609 } 1610 1611 if (_.options.accessibility === true) { 1612 _.initADA(); 1613 } 1614 1615 } 1616 1617 }; 1618 1619 Slick.prototype.prev = Slick.prototype.slickPrev = function() { 1620 1621 var _ = this; 1622 1623 _.changeSlide({ 1624 data: { 1625 message: 'previous' 1626 } 1627 }); 1628 1629 }; 1630 1631 Slick.prototype.preventDefault = function(event) { 1632 1633 event.preventDefault(); 1634 1635 }; 1636 1637 Slick.prototype.progressiveLazyLoad = function( tryCount ) { 1638 1639 tryCount = tryCount || 1; 1640 1641 var _ = this, 1642 $imgsToLoad = $( 'img[data-lazy]', _.$slider ), 1643 image, 1644 imageSource, 1645 imageToLoad; 1646 1647 if ( $imgsToLoad.length ) { 1648 1649 image = $imgsToLoad.first(); 1650 imageSource = image.attr('data-lazy'); 1651 imageToLoad = document.createElement('img'); 1652 1653 imageToLoad.onload = function() { 1654 1655 image 1656 .attr( 'src', imageSource ) 1657 .removeAttr('data-lazy') 1658 .removeClass('slick-loading'); 1659 1660 if ( _.options.adaptiveHeight === true ) { 1661 _.setPosition(); 1662 } 1663 1664 _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]); 1665 _.progressiveLazyLoad(); 1666 1667 }; 1668 1669 imageToLoad.onerror = function() { 1670 1671 if ( tryCount < 3 ) { 1672 1673 /** 1674 * try to load the image 3 times, 1675 * leave a slight delay so we don't get 1676 * servers blocking the request. 1677 */ 1678 setTimeout( function() { 1679 _.progressiveLazyLoad( tryCount + 1 ); 1680 }, 500 ); 1681 1682 } else { 1683 1684 image 1685 .removeAttr( 'data-lazy' ) 1686 .removeClass( 'slick-loading' ) 1687 .addClass( 'slick-lazyload-error' ); 1688 1689 _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]); 1690 1691 _.progressiveLazyLoad(); 1692 1693 } 1694 1695 }; 1696 1697 imageToLoad.src = imageSource; 1698 1699 } else { 1700 1701 _.$slider.trigger('allImagesLoaded', [ _ ]); 1702 1703 } 1704 1705 }; 1706 1707 Slick.prototype.refresh = function( initializing ) { 1708 1709 var _ = this, currentSlide, lastVisibleIndex; 1710 1711 lastVisibleIndex = _.slideCount - _.options.slidesToShow; 1712 1713 // in non-infinite sliders, we don't want to go past the 1714 // last visible index. 1715 if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) { 1716 _.currentSlide = lastVisibleIndex; 1717 } 1718 1719 // if less slides than to show, go to start. 1720 if ( _.slideCount <= _.options.slidesToShow ) { 1721 _.currentSlide = 0; 1722 1723 } 1724 1725 currentSlide = _.currentSlide; 1726 1727 _.destroy(true); 1728 1729 $.extend(_, _.initials, { currentSlide: currentSlide }); 1730 1731 _.init(); 1732 1733 if( !initializing ) { 1734 1735 _.changeSlide({ 1736 data: { 1737 message: 'index', 1738 index: currentSlide 1739 } 1740 }, false); 1741 1742 } 1743 1744 }; 1745 1746 Slick.prototype.registerBreakpoints = function() { 1747 1748 var _ = this, breakpoint, currentBreakpoint, l, 1749 responsiveSettings = _.options.responsive || null; 1750 1751 if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) { 1752 1753 _.respondTo = _.options.respondTo || 'window'; 1754 1755 for ( breakpoint in responsiveSettings ) { 1756 1757 l = _.breakpoints.length-1; 1758 currentBreakpoint = responsiveSettings[breakpoint].breakpoint; 1759 1760 if (responsiveSettings.hasOwnProperty(breakpoint)) { 1761 1762 // loop through the breakpoints and cut out any existing 1763 // ones with the same breakpoint number, we don't want dupes. 1764 while( l >= 0 ) { 1765 if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) { 1766 _.breakpoints.splice(l,1); 1767 } 1768 l--; 1769 } 1770 1771 _.breakpoints.push(currentBreakpoint); 1772 _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings; 1773 1774 } 1775 1776 } 1777 1778 _.breakpoints.sort(function(a, b) { 1779 return ( _.options.mobileFirst ) ? a-b : b-a; 1780 }); 1781 1782 } 1783 1784 }; 1785 1786 Slick.prototype.reinit = function() { 1787 1788 var _ = this; 1789 1790 _.$slides = 1791 _.$slideTrack 1792 .children(_.options.slide) 1793 .addClass('slick-slide'); 1794 1795 _.slideCount = _.$slides.length; 1796 1797 if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) { 1798 _.currentSlide = _.currentSlide - _.options.slidesToScroll; 1799 } 1800 1801 if (_.slideCount <= _.options.slidesToShow) { 1802 _.currentSlide = 0; 1803 } 1804 1805 _.registerBreakpoints(); 1806 1807 _.setProps(); 1808 _.setupInfinite(); 1809 _.buildArrows(); 1810 _.updateArrows(); 1811 _.initArrowEvents(); 1812 _.buildDots(); 1813 _.updateDots(); 1814 _.initDotEvents(); 1815 _.cleanUpSlideEvents(); 1816 _.initSlideEvents(); 1817 1818 _.checkResponsive(false, true); 1819 1820 if (_.options.focusOnSelect === true) { 1821 $(_.$slideTrack).children().on('click.slick', _.selectHandler); 1822 } 1823 1824 _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0); 1825 1826 _.setPosition(); 1827 _.focusHandler(); 1828 1829 _.paused = !_.options.autoplay; 1830 _.autoPlay(); 1831 1832 _.$slider.trigger('reInit', [_]); 1833 1834 }; 1835 1836 Slick.prototype.resize = function() { 1837 1838 var _ = this; 1839 1840 if ($(window).width() !== _.windowWidth) { 1841 clearTimeout(_.windowDelay); 1842 _.windowDelay = window.setTimeout(function() { 1843 _.windowWidth = $(window).width(); 1844 _.checkResponsive();
1845 if( !_.unslicked ) { _.setPosition(); } 1846 }, 50); 1847 } 1848 }; 1849 1850 Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) { 1851 1852 var _ = this; 1853 1854 if (typeof(index) === 'boolean') { 1855 removeBefore = index; 1856 index = removeBefore === true ? 0 : _.slideCount - 1; 1857 } else { 1858 index = removeBefore === true ? --index : index; 1859 } 1860 1861 if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) { 1862 return false; 1863 } 1864 1865 _.unload(); 1866 1867 if (removeAll === true) { 1868 _.$slideTrack.children().remove(); 1869 } else { 1870 _.$slideTrack.children(this.options.slide).eq(index).remove(); 1871 } 1872 1873 _.$slides = _.$slideTrack.children(this.options.slide); 1874 1875 _.$slideTrack.children(this.options.slide).detach(); 1876 1877 _.$slideTrack.append(_.$slides); 1878 1879 _.$slidesCache = _.$slides; 1880 1881 _.reinit(); 1882 1883 }; 1884 1885 Slick.prototype.setCSS = function(position) { 1886 1887 var _ = this, 1888 positionProps = {}, 1889 x, y; 1890 1891 if (_.options.rtl === true) { 1892 position = -position; 1893 } 1894 x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px'; 1895 y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px'; 1896 1897 positionProps[_.positionProp] = position; 1898 1899 if (_.transformsEnabled === false) { 1900 _.$slideTrack.css(positionProps); 1901 } else { 1902 positionProps = {}; 1903 if (_.cssTransitions === false) { 1904 positionProps[_.animType] = 'translate(' + x + ', ' + y + ')'; 1905 _.$slideTrack.css(positionProps); 1906 } else { 1907 positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)'; 1908 _.$slideTrack.css(positionProps); 1909 } 1910 } 1911 1912 }; 1913 1914 Slick.prototype.setDimensions = function() { 1915 1916 var _ = this; 1917 1918 if (_.options.vertical === false) { 1919 if (_.options.centerMode === true) { 1920 _.$list.css({ 1921 padding: ('0px ' + _.options.centerPadding) 1922 }); 1923 } 1924 } else { 1925 _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow); 1926 if (_.options.centerMode === true) { 1927 _.$list.css({ 1928 padding: (_.options.centerPadding + ' 0px') 1929 }); 1930 } 1931 } 1932 1933 _.listWidth = _.$list.width(); 1934 _.listHeight = _.$list.height(); 1935 1936 1937 if (_.options.vertical === false && _.options.variableWidth === false) { 1938 _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow); 1939 _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length))); 1940 1941 } else if (_.options.variableWidth === true) { 1942 _.$slideTrack.width(5000 * _.slideCount); 1943 } else { 1944 _.slideWidth = Math.ceil(_.listWidth); 1945 _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length))); 1946 } 1947 1948 var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width(); 1949 if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset); 1950 1951 }; 1952 1953 Slick.prototype.setFade = function() { 1954 1955 var _ = this, 1956 targetLeft; 1957 1958 _.$slides.each(function(index, element) { 1959 if (_.options.rtl === true) { 1960 targetLeft = (_.slideWidth * index) * -1; 1961 $(element).css({ 1962 position: 'relative', 1963 right: targetLeft, 1964 top: 0, 1965 zIndex: _.options.zIndex - 2, 1966 opacity: 0 1967 }); 1968 1969 } else { 1970 if($(element).parents().parents().parents().parents('div').hasClass('main_visual')){ 1971 targetLeft = (_.$slideTrack.children('.slick-slide').width() * index) * -1; 1972 $(element).css({ 1973 position: 'relative', 1974 left: targetLeft, 1975 top: 0, 1976 zIndex: _.options.zIndex - 2, 1977 opacity: 0, 1978 width: $(element).parents().parents().parents('.slider-wrap').width() 1979 }); 1980 $(element).find('img').css({ 1981 marginLeft: -$(element).parents().parents().parents('.slider-wrap').width(), 1982 position:'relative', 1983 left:'50%', 1984 width:'auto' 1985 }); 1986 }else{ 1987 targetLeft = (_.$slideTrack.children('.slick-slide').width() * index) * -1; 1988 $(element).css({ 1989 position: 'relative', 1990 left: targetLeft, 1991 top: 0, 1992 zIndex: _.options.zIndex - 2, 1993 opacity: 0 1994 }); 1995 } 1996
vendor: 6,051 bytes, lines 1996-2214
1996 1997 } 1998 }); 1999 2000 _.$slides.eq(_.currentSlide).css({ 2001 zIndex: _.options.zIndex - 1, 2002 opacity: 1 2003 }); 2004 2005 }; 2006 2007 Slick.prototype.setHeight = function() { 2008 2009 var _ = this; 2010 2011 if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) { 2012 var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true); 2013 _.$list.css('height', targetHeight); 2014 } 2015 2016 }; 2017 2018 Slick.prototype.setOption = 2019 Slick.prototype.slickSetOption = function() { 2020 2021 /** 2022 * accepts arguments in format of: 2023 * 2024 * - for changing a single option's value: 2025 * .slick("setOption", option, value, refresh ) 2026 * 2027 * - for changing a set of responsive options: 2028 * .slick("setOption", 'responsive', [{}, ...], refresh ) 2029 * 2030 * - for updating multiple values at once (not responsive) 2031 * .slick("setOption", { 'option': value, ... }, refresh ) 2032 */ 2033 2034 var _ = this, l, item, option, value, refresh = false, type; 2035 2036 if( $.type( arguments[0] ) === 'object' ) { 2037 2038 option = arguments[0]; 2039 refresh = arguments[1]; 2040 type = 'multiple'; 2041 2042 } else if ( $.type( arguments[0] ) === 'string' ) { 2043 2044 option = arguments[0]; 2045 value = arguments[1]; 2046 refresh = arguments[2]; 2047 2048 if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) { 2049 2050 type = 'responsive'; 2051 2052 } else if ( typeof arguments[1] !== 'undefined' ) { 2053 2054 type = 'single'; 2055 2056 } 2057 2058 } 2059 2060 if ( type === 'single' ) { 2061 2062 _.options[option] = value; 2063 2064 2065 } else if ( type === 'multiple' ) { 2066 2067 $.each( option , function( opt, val ) { 2068 2069 _.options[opt] = val; 2070 2071 }); 2072 2073 2074 } else if ( type === 'responsive' ) { 2075 2076 for ( item in value ) { 2077 2078 if( $.type( _.options.responsive ) !== 'array' ) { 2079 2080 _.options.responsive = [ value[item] ]; 2081 2082 } else { 2083 2084 l = _.options.responsive.length-1; 2085 2086 // loop through the responsive object and splice out duplicates. 2087 while( l >= 0 ) { 2088 2089 if( _.options.responsive[l].breakpoint === value[item].breakpoint ) { 2090 2091 _.options.responsive.splice(l,1); 2092 2093 } 2094 2095 l--; 2096 2097 } 2098 2099 _.options.responsive.push( value[item] ); 2100 2101 } 2102 2103 } 2104 2105 } 2106 2107 if ( refresh ) { 2108 2109 _.unload(); 2110 _.reinit(); 2111 2112 } 2113 2114 }; 2115 2116 Slick.prototype.setPosition = function() { 2117 2118 var _ = this; 2119 2120 _.setDimensions(); 2121 2122 _.setHeight(); 2123 2124 if (_.options.fade === false) { 2125 _.setCSS(_.getLeft(_.currentSlide)); 2126 } else { 2127 _.setFade(); 2128 } 2129 2130 _.$slider.trigger('setPosition', [_]); 2131 2132 }; 2133 2134 Slick.prototype.setProps = function() { 2135 2136 var _ = this, 2137 bodyStyle = document.body.style; 2138 2139 _.positionProp = _.options.vertical === true ? 'top' : 'left'; 2140 2141 if (_.positionProp === 'top') { 2142 _.$slider.addClass('slick-vertical'); 2143 } else { 2144 _.$slider.removeClass('slick-vertical'); 2145 } 2146 2147 if (bodyStyle.WebkitTransition !== undefined || 2148 bodyStyle.MozTransition !== undefined || 2149 bodyStyle.msTransition !== undefined) { 2150 if (_.options.useCSS === true) { 2151 _.cssTransitions = true; 2152 } 2153 } 2154 2155 if ( _.options.fade ) { 2156 if ( typeof _.options.zIndex === 'number' ) { 2157 if( _.options.zIndex < 3 ) { 2158 _.options.zIndex = 3; 2159 } 2160 } else { 2161 _.options.zIndex = _.defaults.zIndex; 2162 } 2163 } 2164 2165 if (bodyStyle.OTransform !== undefined) { 2166 _.animType = 'OTransform'; 2167 _.transformType = '-o-transform'; 2168 _.transitionType = 'OTransition'; 2169 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false; 2170 } 2171 if (bodyStyle.MozTransform !== undefined) { 2172 _.animType = 'MozTransform'; 2173 _.transformType = '-moz-transform'; 2174 _.transitionType = 'MozTransition'; 2175 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false; 2176 } 2177 if (bodyStyle.webkitTransform !== undefined) { 2178 _.animType = 'webkitTransform'; 2179 _.transformType = '-webkit-transform'; 2180 _.transitionType = 'webkitTransition'; 2181 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false; 2182 } 2183 if (bodyStyle.msTransform !== undefined) { 2184 _.animType = 'msTransform'; 2185 _.transformType = '-ms-transform'; 2186 _.transitionType = 'msTransition'; 2187 if (bodyStyle.msTransform === undefined) _.animType = false; 2188 } 2189 if (bodyStyle.transform !== undefined && _.animType !== false) { 2190 _.animType = 'transform'; 2191 _.transformType = 'transform'; 2192 _.transitionType = 'transition'; 2193 } 2194 _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false); 2195 }; 2196 2197 2198 Slick.prototype.setSlideClasses = function(index) { 2199 2200 var _ = this, 2201 centerOffset, allSlides, indexOffset, remainder; 2202 2203 allSlides = _.$slider 2204 .find('.slick-slide') 2205 .removeClass('slick-active slick-center slick-current') 2206 .attr('aria-hidden', 'true'); 2207 2208 _.$slides 2209 .eq(index) 2210 .addClass('slick-current'); 2211 2212 if (_.options.centerMode === true) { 2213 2214
2214centerOffset = Math.floor(_.options.slidesToShow / 2); 2215 2216 if (_.options.infinite === true) { 2217 2218 if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) { 2219 2220 _.$slides 2221 .slice(index - centerOffset, index + centerOffset + 1) 2222 .addClass('slick-active') 2223 .attr('aria-hidden', 'false'); 2224 2225 } else { 2226 2227 indexOffset = _.options.slidesToShow + index; 2228 allSlides 2229 .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2) 2230 .addClass('slick-active') 2231 .attr('aria-hidden', 'false'); 2232 2233 } 2234 2235 if (index === 0) { 2236 2237 allSlides 2238 .eq(allSlides.length - 1 - _.options.slidesToShow) 2239 .addClass('slick-center'); 2240 2241 } else if (index === _.slideCount - 1) { 2242 2243 allSlides 2244 .eq(_.options.slidesToShow) 2245 .addClass('slick-center'); 2246 2247 } 2248 2249 } 2250 2251 _.$slides 2252 .eq(index) 2253 .addClass('slick-center'); 2254 2255 } else { 2256 2257 if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) { 2258 2259 _.$slides 2260 .slice(index, index + _.options.slidesToShow) 2261 .addClass('slick-active') 2262 .attr('aria-hidden', 'false'); 2263 2264 } else if (allSlides.length <= _.options.slidesToShow) { 2265 2266 allSlides 2267 .addClass('slick-active') 2268 .attr('aria-hidden', 'false'); 2269 2270 } else { 2271 2272 remainder = _.slideCount % _.options.slidesToShow; 2273 indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index; 2274 2275 if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) { 2276 2277 allSlides 2278 .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder) 2279 .addClass('slick-active') 2280 .attr('aria-hidden', 'false'); 2281 2282 } else { 2283 2284 allSlides 2285 .slice(indexOffset, indexOffset + _.options.slidesToShow) 2286 .addClass('slick-active') 2287 .attr('aria-hidden', 'false'); 2288 2289 } 2290 2291 } 2292 2293 } 2294 2295 if (_.options.lazyLoad === 'ondemand') { 2296 _.lazyLoad(); 2297 } 2298 2299 }; 2300 2301 Slick.prototype.setupInfinite = function() { 2302 2303 var _ = this, 2304 i, slideIndex, infiniteCount; 2305 2306 if (_.options.fade === true) {
vendor: 15,027 bytes, lines 2307-2840
2307 _.options.centerMode = false; 2308 } 2309 2310 if (_.options.infinite === true && _.options.fade === false) { 2311 2312 slideIndex = null; 2313 2314 if (_.slideCount > _.options.slidesToShow) { 2315 2316 if (_.options.centerMode === true) { 2317 infiniteCount = _.options.slidesToShow + 1; 2318 } else { 2319 infiniteCount = _.options.slidesToShow; 2320 } 2321 2322 for (i = _.slideCount; i > (_.slideCount - 2323 infiniteCount); i -= 1) { 2324 slideIndex = i - 1; 2325 $(_.$slides[slideIndex]).clone(true).attr('id', '') 2326 .attr('data-slick-index', slideIndex - _.slideCount) 2327 .prependTo(_.$slideTrack).addClass('slick-cloned'); 2328 } 2329 for (i = 0; i < infiniteCount; i += 1) { 2330 slideIndex = i; 2331 $(_.$slides[slideIndex]).clone(true).attr('id', '') 2332 .attr('data-slick-index', slideIndex + _.slideCount) 2333 .appendTo(_.$slideTrack).addClass('slick-cloned'); 2334 } 2335 _.$slideTrack.find('.slick-cloned').find('[id]').each(function() { 2336 $(this).attr('id', ''); 2337 }); 2338 2339 } 2340 2341 } 2342 2343 }; 2344 2345 Slick.prototype.interrupt = function( toggle ) { 2346 2347 var _ = this; 2348 2349 if( !toggle ) { 2350 _.autoPlay(); 2351 } 2352 _.interrupted = toggle; 2353 2354 }; 2355 2356 Slick.prototype.selectHandler = function(event) { 2357 2358 var _ = this; 2359 2360 var targetElement = 2361 $(event.target).is('.slick-slide') ? 2362 $(event.target) : 2363 $(event.target).parents('.slick-slide'); 2364 2365 var index = parseInt(targetElement.attr('data-slick-index')); 2366 2367 if (!index) index = 0; 2368 2369 if (_.slideCount <= _.options.slidesToShow) { 2370 2371 _.setSlideClasses(index); 2372 _.asNavFor(index); 2373 return; 2374 2375 } 2376 2377 _.slideHandler(index); 2378 2379 }; 2380 2381 Slick.prototype.slideHandler = function(index, sync, dontAnimate) { 2382 2383 var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null, 2384 _ = this, navTarget; 2385 2386 sync = sync || false; 2387 2388 if (_.animating === true && _.options.waitForAnimate === true) { 2389 return; 2390 } 2391 2392 if (_.options.fade === true && _.currentSlide === index) { 2393 return; 2394 } 2395 2396 if (_.slideCount <= _.options.slidesToShow) { 2397 return; 2398 } 2399 2400 if (sync === false) { 2401 _.asNavFor(index); 2402 } 2403 2404 targetSlide = index; 2405 targetLeft = _.getLeft(targetSlide); 2406 slideLeft = _.getLeft(_.currentSlide); 2407 2408 _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft; 2409 2410 if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) { 2411 if (_.options.fade === false) { 2412 targetSlide = _.currentSlide; 2413 if (dontAnimate !== true) { 2414 _.animateSlide(slideLeft, function() { 2415 _.postSlide(targetSlide); 2416 }); 2417 } else { 2418 _.postSlide(targetSlide); 2419 } 2420 } 2421 return; 2422 } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) { 2423 if (_.options.fade === false) { 2424 targetSlide = _.currentSlide; 2425 if (dontAnimate !== true) { 2426 _.animateSlide(slideLeft, function() { 2427 _.postSlide(targetSlide); 2428 }); 2429 } else { 2430 _.postSlide(targetSlide); 2431 } 2432 } 2433 return; 2434 } 2435 2436 if ( _.options.autoplay ) { 2437 clearInterval(_.autoPlayTimer); 2438 } 2439 2440 if (targetSlide < 0) { 2441 if (_.slideCount % _.options.slidesToScroll !== 0) { 2442 animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll); 2443 } else { 2444 animSlide = _.slideCount + targetSlide; 2445 } 2446 } else if (targetSlide >= _.slideCount) { 2447 if (_.slideCount % _.options.slidesToScroll !== 0) { 2448 animSlide = 0; 2449 } else { 2450 animSlide = targetSlide - _.slideCount; 2451 } 2452 } else { 2453 animSlide = targetSlide; 2454 } 2455 2456 _.animating = true; 2457 2458 _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]); 2459 2460 oldSlide = _.currentSlide; 2461 _.currentSlide = animSlide; 2462 2463 _.setSlideClasses(_.currentSlide); 2464 2465 if ( _.options.asNavFor ) { 2466 2467 navTarget = _.getNavTarget(); 2468 navTarget = navTarget.slick('getSlick'); 2469 2470 if ( navTarget.slideCount <= navTarget.options.slidesToShow ) { 2471 navTarget.setSlideClasses(_.currentSlide); 2472 } 2473 2474 } 2475 2476 _.updateDots(); 2477 _.updateArrows(); 2478 2479 if (_.options.fade === true) { 2480 if (dontAnimate !== true) { 2481 2482 _.fadeSlideOut(oldSlide); 2483 2484 _.fadeSlide(animSlide, function() { 2485 _.postSlide(animSlide); 2486 }); 2487 2488 } else { 2489 _.postSlide(animSlide); 2490 } 2491 _.animateHeight(); 2492 return; 2493 } 2494 2495 if (dontAnimate !== true) { 2496 _.animateSlide(targetLeft, function() { 2497 _.postSlide(animSlide); 2498 }); 2499 } else { 2500 _.postSlide(animSlide); 2501 } 2502 2503 }; 2504 2505 Slick.prototype.startLoad = function() { 2506 2507 var _ = this; 2508 2509 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 2510 2511 _.$prevArrow.hide(); 2512 _.$nextArrow.hide(); 2513 2514 } 2515 2516 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { 2517 2518 _.$dots.hide(); 2519 2520 } 2521 2522 _.$slider.addClass('slick-loading'); 2523 2524 }; 2525 2526 Slick.prototype.swipeDirection = function() { 2527 2528 var xDist, yDist, r, swipeAngle, _ = this; 2529 2530 xDist = _.touchObject.startX - _.touchObject.curX; 2531 yDist = _.touchObject.startY - _.touchObject.curY; 2532 r = Math.atan2(yDist, xDist); 2533 2534 swipeAngle = Math.round(r * 180 / Math.PI); 2535 if (swipeAngle < 0) { 2536 swipeAngle = 360 - Math.abs(swipeAngle); 2537 } 2538 2539 if ((swipeAngle <= 45) && (swipeAngle >= 0)) { 2540 return (_.options.rtl === false ? 'left' : 'right'); 2541 } 2542 if ((swipeAngle <= 360) && (swipeAngle >= 315)) { 2543 return (_.options.rtl === false ? 'left' : 'right'); 2544 } 2545 if ((swipeAngle >= 135) && (swipeAngle <= 225)) { 2546 return (_.options.rtl === false ? 'right' : 'left'); 2547 } 2548 if (_.options.verticalSwiping === true) { 2549 if ((swipeAngle >= 35) && (swipeAngle <= 135)) { 2550 return 'down'; 2551 } else { 2552 return 'up'; 2553 } 2554 } 2555 2556 return 'vertical'; 2557 2558 }; 2559 2560 Slick.prototype.swipeEnd = function(event) { 2561 2562 var _ = this, 2563 slideCount, 2564 direction; 2565 2566 _.dragging = false; 2567 _.interrupted = false; 2568 _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true; 2569 2570 if ( _.touchObject.curX === undefined ) { 2571 return false; 2572 } 2573 2574 if ( _.touchObject.edgeHit === true ) { 2575 _.$slider.trigger('edge', [_, _.swipeDirection() ]); 2576 } 2577 2578 if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) { 2579 2580 direction = _.swipeDirection(); 2581 2582 switch ( direction ) { 2583 2584 case 'left': 2585 case 'down': 2586 2587 slideCount = 2588 _.options.swipeToSlide ? 2589 _.checkNavigable( _.currentSlide + _.getSlideCount() ) : 2590 _.currentSlide + _.getSlideCount(); 2591 2592 _.currentDirection = 0; 2593 2594 break; 2595 2596 case 'right': 2597 case 'up': 2598 2599 slideCount = 2600 _.options.swipeToSlide ? 2601 _.checkNavigable( _.currentSlide - _.getSlideCount() ) : 2602 _.currentSlide - _.getSlideCount(); 2603 2604 _.currentDirection = 1; 2605 2606 break; 2607 2608 default: 2609 2610 2611 } 2612 2613 if( direction != 'vertical' ) { 2614 2615 _.slideHandler( slideCount ); 2616 _.touchObject = {}; 2617 _.$slider.trigger('swipe', [_, direction ]); 2618 2619 } 2620 2621 } else { 2622 2623 if ( _.touchObject.startX !== _.touchObject.curX ) { 2624 2625 _.slideHandler( _.currentSlide ); 2626 _.touchObject = {}; 2627 2628 } 2629 2630 } 2631 2632 }; 2633 2634 Slick.prototype.swipeHandler = function(event) { 2635 2636 var _ = this; 2637 2638 if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) { 2639 return; 2640 } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) { 2641 return; 2642 } 2643 2644 _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ? 2645 event.originalEvent.touches.length : 1; 2646 2647 _.touchObject.minSwipe = _.listWidth / _.options 2648 .touchThreshold; 2649 2650 if (_.options.verticalSwiping === true) { 2651 _.touchObject.minSwipe = _.listHeight / _.options 2652 .touchThreshold; 2653 } 2654 2655 switch (event.data.action) { 2656 2657 case 'start': 2658 _.swipeStart(event); 2659 break; 2660 2661 case 'move': 2662 _.swipeMove(event); 2663 break; 2664 2665 case 'end': 2666 _.swipeEnd(event); 2667 break; 2668 2669 } 2670 2671 }; 2672 2673 Slick.prototype.swipeMove = function(event) { 2674 2675 var _ = this, 2676 edgeWasHit = false, 2677 curLeft, swipeDirection, swipeLength, positionOffset, touches; 2678 2679 touches = event.originalEvent !== undefined ? event.originalEvent.touches : null; 2680 2681 if (!_.dragging || touches && touches.length !== 1) { 2682 return false; 2683 } 2684 2685 curLeft = _.getLeft(_.currentSlide); 2686 2687 _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX; 2688 _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY; 2689 2690 _.touchObject.swipeLength = Math.round(Math.sqrt( 2691 Math.pow(_.touchObject.curX - _.touchObject.startX, 2))); 2692 2693 if (_.options.verticalSwiping === true) { 2694 _.touchObject.swipeLength = Math.round(Math.sqrt( 2695 Math.pow(_.touchObject.curY - _.touchObject.startY, 2))); 2696 } 2697 2698 swipeDirection = _.swipeDirection(); 2699 2700 if (swipeDirection === 'vertical') { 2701 return; 2702 } 2703 2704 if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) { 2705 event.preventDefault(); 2706 } 2707 2708 positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1); 2709 if (_.options.verticalSwiping === true) { 2710 positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1; 2711 } 2712 2713 2714 swipeLength = _.touchObject.swipeLength; 2715 2716 _.touchObject.edgeHit = false; 2717 2718 if (_.options.infinite === false) { 2719 if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) { 2720 swipeLength = _.touchObject.swipeLength * _.options.edgeFriction; 2721 _.touchObject.edgeHit = true; 2722 } 2723 } 2724 2725 if (_.options.vertical === false) { 2726 _.swipeLeft = curLeft + swipeLength * positionOffset; 2727 } else { 2728 _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset; 2729 } 2730 if (_.options.verticalSwiping === true) { 2731 _.swipeLeft = curLeft + swipeLength * positionOffset; 2732 } 2733 2734 if (_.options.fade === true || _.options.touchMove === false) { 2735 return false; 2736 } 2737 2738 if (_.animating === true) { 2739 _.swipeLeft = null; 2740 return false; 2741 } 2742 2743 _.setCSS(_.swipeLeft); 2744 2745 }; 2746 2747 Slick.prototype.swipeStart = function(event) { 2748 2749 var _ = this, 2750 touches; 2751 2752 _.interrupted = true; 2753 2754 if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) { 2755 _.touchObject = {}; 2756 return false; 2757 } 2758 2759 if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) { 2760 touches = event.originalEvent.touches[0]; 2761 } 2762 2763 _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX; 2764 _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY; 2765 2766 _.dragging = true; 2767 2768 }; 2769 2770 Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() { 2771 2772 var _ = this; 2773 2774 if (_.$slidesCache !== null) { 2775 2776 _.unload(); 2777 2778 _.$slideTrack.children(this.options.slide).detach(); 2779 2780 _.$slidesCache.appendTo(_.$slideTrack); 2781 2782 _.reinit(); 2783 2784 } 2785 2786 }; 2787 2788 Slick.prototype.unload = function() { 2789 2790 var _ = this; 2791 2792 $('.slick-cloned', _.$slider).remove(); 2793 2794 if (_.$dots) { 2795 _.$dots.remove(); 2796 } 2797 2798 if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) { 2799 _.$prevArrow.remove(); 2800 } 2801 2802 if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) { 2803 _.$nextArrow.remove(); 2804 } 2805 2806 _.$slides 2807 .removeClass('slick-slide slick-active slick-visible slick-current') 2808 .attr('aria-hidden', 'true') 2809 .css('width', ''); 2810 2811 }; 2812 2813 Slick.prototype.unslick = function(fromBreakpoint) { 2814 2815 var _ = this; 2816 _.$slider.trigger('unslick', [_, fromBreakpoint]); 2817 _.destroy(); 2818 2819 }; 2820 2821 Slick.prototype.updateArrows = function() { 2822 2823 var _ = this, 2824 centerOffset; 2825 2826 centerOffset = Math.floor(_.options.slidesToShow / 2); 2827 2828 if ( _.options.arrows === true && 2829 _.slideCount > _.options.slidesToShow && 2830 !_.options.infinite ) { 2831 2832 _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false'); 2833 _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false'); 2834 2835 if (_.currentSlide === 0) { 2836 2837 _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true'); 2838 _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false'); 2839 2840 } else if (_.currentSlide >
2840= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) { 2841 2842 _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true'); 2843 _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false'); 2844 2845 } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) { 2846 2847 _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true'); 2848 _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false'); 2849 2850 } 2851 2852 } 2853 2854 }; 2855 2856 Slick.prototype.updateDots = function() { 2857 2858 var _ = this; 2859 2860 if (_.$dots !== null) { 2861 2862 _.$dots 2863 .find('li') 2864 .removeClass('slick-active') 2865 .attr('aria-hidden', 'true'); 2866 2867 _.$dots 2868 .find('li') 2869 .eq(Math.floor(_.currentSlide / _.options.slidesToScroll)) 2870 .addClass('slick-active') 2871 .attr('aria-hidden', 'false'); 2872 2873 } 2874 2875 }; 2876 2877 Slick.prototype.visibility = function() { 2878 2879 var _ = this; 2880 2881 if ( _.options.autoplay ) { 2882 2883 if ( document[_.hidden] ) { 2884 2885 _.interrupted = true; 2886 2887 } else { 2888 2889 _.interrupted = false; 2890 2891 } 2892 2893 } 2894 2895 }; 2896 2897 $.fn.slick = function() { 2898 var _ = this, 2899 opt = arguments[0], 2900 args = Array.prototype.slice.call(arguments, 1), 2901 l = _.length, 2902 i, 2903 ret; 2904 for (i = 0; i < l; i++) { 2905 if (typeof opt == 'object' || typeof opt == 'undefined') 2906 _[i].slick = new Slick(_[i], opt); 2907 else 2908 ret = _[i].slick[opt].apply(_[i].slick, args); 2909 if (typeof ret != 'undefined') return ret; 2910 } 2911 return _; 2912 }; 2913 2914})); 2915 2916/** 2917 * Swiper 11.0.7 2918 * Most modern mobile touch slider and framework with hardware accelerated transitions 2919 * https://swiperjs.com 2920 * 2921 * Copyright 2014-2024 Vladimir Kharlampidi 2922 * 2923 * Released under the MIT License 2924 * 2925 * Released on: February 27, 2024 2926 */ 2927 2928var Swiper = (function () { 2929 'use strict'; 2930 2931 /** 2932 * SSR Window 4.0.2 2933 * Better handling for window object in SSR environment 2934 * https://github.com/nolimits4web/ssr-window 2935 * 2936 * Copyright 2021, Vladimir Kharlampidi 2937 * 2938 * Licensed under MIT 2939 * 2940 * Released on: December 13, 2021 2941 */ 2942 /* eslint-disable no-param-reassign */ 2943 function isObject$1(obj) { 2944 return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object; 2945 } 2946 function extend$1(target, src) { 2947 if (target === void 0) { 2948 target = {}; 2949 } 2950 if (src === void 0) { 2951 src = {}; 2952 } 2953 Object.keys(src).forEach(key => { 2954 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) { 2955 extend$1(target[key], src[key]); 2956 } 2957 }); 2958 } 2959 const ssrDocument = { 2960 body: {}, 2961 addEventListener() {}, 2962 removeEventListener() {}, 2963 activeElement: { 2964 blur() {}, 2965 nodeName: '' 2966 }, 2967 querySelector() { 2968 return null; 2969 }, 2970 querySelectorAll() { 2971 return []; 2972 }, 2973 getElementById() { 2974 return null; 2975 }, 2976 createEvent() { 2977 return { 2978 initEvent() {} 2979 }; 2980 }, 2981 createElement() { 2982 return { 2983 children: [], 2984 childNodes: [], 2985 style: {}, 2986 setAttribute() {}, 2987 getElementsByTagName() { 2988 return []; 2989 } 2990 }; 2991 }, 2992 createElementNS() { 2993 return {}; 2994 }, 2995 importNode() { 2996 return null; 2997 }, 2998 location: { 2999 hash: '', 3000 host: '', 3001 hostname: '', 3002 href: '', 3003 origin: '', 3004 pathname: '', 3005 protocol: '', 3006 search: '' 3007 } 3008 }; 3009 function getDocument() { 3010 const doc = typeof document !== 'undefined' ? document : {}; 3011 extend$1(doc, ssrDocument); 3012 return doc; 3013 } 3014 const ssrWindow = { 3015 document: ssrDocument, 3016 navigator: { 3017 userAgent: '' 3018 }, 3019 location: { 3020 hash: '', 3021 host: '', 3022 hostname: '', 3023 href: '', 3024 origin: '', 3025 pathname: '', 3026 protocol: '', 3027 search: '' 3028 }, 3029 history: { 3030 replaceState() {}, 3031 pushState() {}, 3032 go() {}, 3033 back() {} 3034 }, 3035 CustomEvent: function CustomEvent() { 3036 return this; 3037 }, 3038 addEventListener() {}, 3039 removeEventListener() {}, 3040 getComputedStyle() { 3041 return { 3042 getPropertyValue() { 3043 return ''; 3044 } 3045 }; 3046 }, 3047 Image() {}, 3048 Date() {}, 3049 screen: {}, 3050 setTimeout() {}, 3051 clearTimeout() {}, 3052 matchMedia() { 3053 return {}; 3054 }, 3055 requestAnimationFrame(callback) { 3056 if (typeof setTimeout === 'undefined') { 3057 callback(); 3058 return null; 3059 } 3060 return setTimeout(callback, 0); 3061 }, 3062 cancelAnimationFrame(id) { 3063 if (typeof setTimeout === 'undefined') { 3064 return; 3065 } 3066 clearTimeout(id); 3067 } 3068 }; 3069 function getWindow() { 3070 const win = typeof window !== 'undefined' ? window : {}; 3071 extend$1(win, ssrWindow); 3072 return win; 3073 } 3074
vendor: 6,918 bytes, lines 3075-3273
3075 function classesToTokens(classes) { 3076 if (classes === void 0) { 3077 classes = ''; 3078 } 3079 return classes.trim().split(' ').filter(c => !!c.trim()); 3080 } 3081 3082 function deleteProps(obj) { 3083 const object = obj; 3084 Object.keys(object).forEach(key => { 3085 try { 3086 object[key] = null; 3087 } catch (e) { 3088 // no getter for object 3089 } 3090 try { 3091 delete object[key]; 3092 } catch (e) { 3093 // something got wrong 3094 } 3095 }); 3096 } 3097 function nextTick(callback, delay) { 3098 if (delay === void 0) { 3099 delay = 0; 3100 } 3101 return setTimeout(callback, delay); 3102 } 3103 function now() { 3104 return Date.now(); 3105 } 3106 function getComputedStyle$1(el) { 3107 const window = getWindow(); 3108 let style; 3109 if (window.getComputedStyle) { 3110 style = window.getComputedStyle(el, null); 3111 } 3112 if (!style && el.currentStyle) { 3113 style = el.currentStyle; 3114 } 3115 if (!style) { 3116 style = el.style; 3117 } 3118 return style; 3119 } 3120 function getTranslate(el, axis) { 3121 if (axis === void 0) { 3122 axis = 'x'; 3123 } 3124 const window = getWindow(); 3125 let matrix; 3126 let curTransform; 3127 let transformMatrix; 3128 const curStyle = getComputedStyle$1(el); 3129 if (window.WebKitCSSMatrix) { 3130 curTransform = curStyle.transform || curStyle.webkitTransform; 3131 if (curTransform.split(',').length > 6) { 3132 curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', '); 3133 } 3134 // Some old versions of Webkit choke when 'none' is passed; pass 3135 // empty string instead in this case 3136 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 3137 } else { 3138 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 3139 matrix = transformMatrix.toString().split(','); 3140 } 3141 if (axis === 'x') { 3142 // Latest Chrome and webkits Fix 3143 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; 3144 // Crazy IE10 Matrix 3145 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); 3146 // Normal Browsers 3147 else curTransform = parseFloat(matrix[4]); 3148 } 3149 if (axis === 'y') { 3150 // Latest Chrome and webkits Fix 3151 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; 3152 // Crazy IE10 Matrix 3153 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); 3154 // Normal Browsers 3155 else curTransform = parseFloat(matrix[5]); 3156 } 3157 return curTransform || 0; 3158 } 3159 function isObject(o) { 3160 return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object'; 3161 } 3162 function isNode(node) { 3163 // eslint-disable-next-line 3164 if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') { 3165 return node instanceof HTMLElement; 3166 } 3167 return node && (node.nodeType === 1 || node.nodeType === 11); 3168 } 3169 function extend() { 3170 const to = Object(arguments.length <= 0 ? undefined : arguments[0]); 3171 const noExtend = ['__proto__', 'constructor', 'prototype']; 3172 for (let i = 1; i < arguments.length; i += 1) { 3173 const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i]; 3174 if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) { 3175 const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0); 3176 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 3177 const nextKey = keysArray[nextIndex]; 3178 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 3179 if (desc !== undefined && desc.enumerable) { 3180 if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 3181 if (nextSource[nextKey].__swiper__) { 3182 to[nextKey] = nextSource[nextKey]; 3183 } else { 3184 extend(to[nextKey], nextSource[nextKey]); 3185 } 3186 } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 3187 to[nextKey] = {}; 3188 if (nextSource[nextKey].__swiper__) { 3189 to[nextKey] = nextSource[nextKey]; 3190 } else { 3191 extend(to[nextKey], nextSource[nextKey]); 3192 } 3193 } else { 3194 to[nextKey] = nextSource[nextKey]; 3195 } 3196 } 3197 } 3198 } 3199 } 3200 return to; 3201 } 3202 function setCSSProperty(el, varName, varValue) { 3203 el.style.setProperty(varName, varValue); 3204 } 3205 function animateCSSModeScroll(_ref) { 3206 let { 3207 swiper, 3208 targetPosition, 3209 side 3210 } = _ref; 3211 const window = getWindow(); 3212 const startPosition = -swiper.translate; 3213 let startTime = null; 3214 let time; 3215 const duration = swiper.params.speed; 3216 swiper.wrapperEl.style.scrollSnapType = 'none'; 3217 window.cancelAnimationFrame(swiper.cssModeFrameID); 3218 const dir = targetPosition > startPosition ? 'next' : 'prev'; 3219 const isOutOfBound = (current, target) => { 3220 return dir === 'next' && current >= target || dir === 'prev' && current <= target; 3221 }; 3222 const animate = () => { 3223 time = new Date().getTime(); 3224 if (startTime === null) { 3225 startTime = time; 3226 } 3227 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 3228 const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2; 3229 let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); 3230 if (isOutOfBound(currentPosition, targetPosition)) { 3231 currentPosition = targetPosition; 3232 } 3233 swiper.wrapperEl.scrollTo({ 3234 [side]: currentPosition 3235 }); 3236 if (isOutOfBound(currentPosition, targetPosition)) { 3237 swiper.wrapperEl.style.overflow = 'hidden'; 3238 swiper.wrapperEl.style.scrollSnapType = ''; 3239 setTimeout(() => { 3240 swiper.wrapperEl.style.overflow = ''; 3241 swiper.wrapperEl.scrollTo({ 3242 [side]: currentPosition 3243 }); 3244 }); 3245 window.cancelAnimationFrame(swiper.cssModeFrameID); 3246 return; 3247 } 3248 swiper.cssModeFrameID = window.requestAnimationFrame(animate); 3249 }; 3250 animate(); 3251 } 3252 function getSlideTransformEl(slideEl) { 3253 return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl; 3254 } 3255 function elementChildren(element, selector) { 3256 if (selector === void 0) { 3257 selector = ''; 3258 } 3259 return [...element.children].filter(el => el.matches(selector)); 3260 } 3261 function showWarning(text) { 3262 try { 3263 console.warn(text); 3264 return; 3265 } catch (err) { 3266 // err 3267 } 3268 } 3269 function createElement(tag, classes) { 3270 if (classes === void 0) { 3271 classes = []; 3272 } 3273 const el = document.createElement(tag);
vendor: 3,558 bytes, lines 3274-3384
3274 el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes))); 3275 return el; 3276 } 3277 function elementOffset(el) { 3278 const window = getWindow(); 3279 const document = getDocument(); 3280 const box = el.getBoundingClientRect(); 3281 const body = document.body; 3282 const clientTop = el.clientTop || body.clientTop || 0; 3283 const clientLeft = el.clientLeft || body.clientLeft || 0; 3284 const scrollTop = el === window ? window.scrollY : el.scrollTop; 3285 const scrollLeft = el === window ? window.scrollX : el.scrollLeft; 3286 return { 3287 top: box.top + scrollTop - clientTop, 3288 left: box.left + scrollLeft - clientLeft 3289 }; 3290 } 3291 function elementPrevAll(el, selector) { 3292 const prevEls = []; 3293 while (el.previousElementSibling) { 3294 const prev = el.previousElementSibling; // eslint-disable-line 3295 if (selector) { 3296 if (prev.matches(selector)) prevEls.push(prev); 3297 } else prevEls.push(prev); 3298 el = prev; 3299 } 3300 return prevEls; 3301 } 3302 function elementNextAll(el, selector) { 3303 const nextEls = []; 3304 while (el.nextElementSibling) { 3305 const next = el.nextElementSibling; // eslint-disable-line 3306 if (selector) { 3307 if (next.matches(selector)) nextEls.push(next); 3308 } else nextEls.push(next); 3309 el = next; 3310 } 3311 return nextEls; 3312 } 3313 function elementStyle(el, prop) { 3314 const window = getWindow(); 3315 return window.getComputedStyle(el, null).getPropertyValue(prop); 3316 } 3317 function elementIndex(el) { 3318 let child = el; 3319 let i; 3320 if (child) { 3321 i = 0; 3322 // eslint-disable-next-line 3323 while ((child = child.previousSibling) !== null) { 3324 if (child.nodeType === 1) i += 1; 3325 } 3326 return i; 3327 } 3328 return undefined; 3329 } 3330 function elementParents(el, selector) { 3331 const parents = []; // eslint-disable-line 3332 let parent = el.parentElement; // eslint-disable-line 3333 while (parent) { 3334 if (selector) { 3335 if (parent.matches(selector)) parents.push(parent); 3336 } else { 3337 parents.push(parent); 3338 } 3339 parent = parent.parentElement; 3340 } 3341 return parents; 3342 } 3343 function elementTransitionEnd(el, callback) { 3344 function fireCallBack(e) { 3345 if (e.target !== el) return; 3346 callback.call(el, e); 3347 el.removeEventListener('transitionend', fireCallBack); 3348 } 3349 if (callback) { 3350 el.addEventListener('transitionend', fireCallBack); 3351 } 3352 } 3353 function elementOuterSize(el, size, includeMargins) { 3354 const window = getWindow(); 3355 if (includeMargins) { 3356 return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom')); 3357 } 3358 return el.offsetWidth; 3359 } 3360 function makeElementsArray(el) { 3361 return (Array.isArray(el) ? el : [el]).filter(e => !!e); 3362 } 3363 3364 let support; 3365 function calcSupport() { 3366 const window = getWindow(); 3367 const document = getDocument(); 3368 return { 3369 smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style, 3370 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch) 3371 }; 3372 } 3373 function getSupport() { 3374 if (!support) { 3375 support = calcSupport(); 3376 } 3377 return support; 3378 } 3379 3380 let deviceCached; 3381 function calcDevice(_temp) { 3382 let { 3383 userAgent 3384 } = _temp === void 0 ? {} : _temp;
vendor: 6,091 bytes, lines 3385-3569
3385 const support = getSupport(); 3386 const window = getWindow(); 3387 const platform = window.navigator.platform; 3388 const ua = userAgent || window.navigator.userAgent; 3389 const device = { 3390 ios: false, 3391 android: false 3392 }; 3393 const screenWidth = window.screen.width; 3394 const screenHeight = window.screen.height; 3395 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 3396 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 3397 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 3398 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 3399 const windows = platform === 'Win32'; 3400 let macos = platform === 'MacIntel'; 3401 3402 // iPadOs 13 fix 3403 const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; 3404 if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { 3405 ipad = ua.match(/(Version)\/([\d.]+)/); 3406 if (!ipad) ipad = [0, 1, '13_0_0']; 3407 macos = false; 3408 } 3409 3410 // Android 3411 if (android && !windows) { 3412 device.os = 'android'; 3413 device.android = true; 3414 } 3415 if (ipad || iphone || ipod) { 3416 device.os = 'ios'; 3417 device.ios = true; 3418 } 3419 3420 // Export object 3421 return device; 3422 } 3423 function getDevice(overrides) { 3424 if (overrides === void 0) { 3425 overrides = {}; 3426 } 3427 if (!deviceCached) { 3428 deviceCached = calcDevice(overrides); 3429 } 3430 return deviceCached; 3431 } 3432 3433 let browser; 3434 function calcBrowser() { 3435 const window = getWindow(); 3436 const device = getDevice(); 3437 let needPerspectiveFix = false; 3438 function isSafari() { 3439 const ua = window.navigator.userAgent.toLowerCase(); 3440 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 3441 } 3442 if (isSafari()) { 3443 const ua = String(window.navigator.userAgent); 3444 if (ua.includes('Version/')) { 3445 const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num)); 3446 needPerspectiveFix = major < 16 || major === 16 && minor < 2; 3447 } 3448 } 3449 const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent); 3450 const isSafariBrowser = isSafari(); 3451 const need3dFix = isSafariBrowser || isWebView && device.ios; 3452 return { 3453 isSafari: needPerspectiveFix || isSafariBrowser, 3454 needPerspectiveFix, 3455 need3dFix, 3456 isWebView 3457 }; 3458 } 3459 function getBrowser() { 3460 if (!browser) { 3461 browser = calcBrowser(); 3462 } 3463 return browser; 3464 } 3465 3466 function Resize(_ref) { 3467 let { 3468 swiper, 3469 on, 3470 emit 3471 } = _ref; 3472 const window = getWindow(); 3473 let observer = null; 3474 let animationFrame = null; 3475 const resizeHandler = () => { 3476 if (!swiper || swiper.destroyed || !swiper.initialized) return; 3477 emit('beforeResize'); 3478 emit('resize'); 3479 }; 3480 const createObserver = () => { 3481 if (!swiper || swiper.destroyed || !swiper.initialized) return; 3482 observer = new ResizeObserver(entries => { 3483 animationFrame = window.requestAnimationFrame(() => { 3484 const { 3485 width, 3486 height 3487 } = swiper; 3488 let newWidth = width; 3489 let newHeight = height; 3490 entries.forEach(_ref2 => { 3491 let { 3492 contentBoxSize, 3493 contentRect, 3494 target 3495 } = _ref2; 3496 if (target && target !== swiper.el) return; 3497 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 3498 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 3499 }); 3500 if (newWidth !== width || newHeight !== height) { 3501 resizeHandler(); 3502 } 3503 }); 3504 }); 3505 observer.observe(swiper.el); 3506 }; 3507 const removeObserver = () => { 3508 if (animationFrame) { 3509 window.cancelAnimationFrame(animationFrame); 3510 } 3511 if (observer && observer.unobserve && swiper.el) { 3512 observer.unobserve(swiper.el); 3513 observer = null; 3514 } 3515 }; 3516 const orientationChangeHandler = () => { 3517 if (!swiper || swiper.destroyed || !swiper.initialized) return; 3518 emit('orientationchange'); 3519 }; 3520 on('init', () => { 3521 if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') { 3522 createObserver(); 3523 return; 3524 } 3525 window.addEventListener('resize', resizeHandler); 3526 window.addEventListener('orientationchange', orientationChangeHandler); 3527 }); 3528 on('destroy', () => { 3529 removeObserver(); 3530 window.removeEventListener('resize', resizeHandler); 3531 window.removeEventListener('orientationchange', orientationChangeHandler); 3532 }); 3533 } 3534 3535 function Observer(_ref) { 3536 let { 3537 swiper, 3538 extendParams, 3539 on, 3540 emit 3541 } = _ref; 3542 const observers = []; 3543 const window = getWindow(); 3544 const attach = function (target, options) { 3545 if (options === void 0) { 3546 options = {}; 3547 } 3548 const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 3549 const observer = new ObserverFunc(mutations => { 3550 // The observerUpdate event should only be triggered 3551 // once despite the number of mutations. Additional 3552 // triggers are redundant and are very costly 3553 if (swiper.__preventObserver__) return; 3554 if (mutations.length === 1) { 3555 emit('observerUpdate', mutations[0]); 3556 return; 3557 } 3558 const observerUpdate = function observerUpdate() { 3559 emit('observerUpdate', mutations[0]); 3560 }; 3561 if (window.requestAnimationFrame) { 3562 window.requestAnimationFrame(observerUpdate); 3563 } else { 3564 window.setTimeout(observerUpdate, 0); 3565 } 3566 }); 3567 observer.observe(target, { 3568 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 3569 childList: typeof options.childList === 'undefined' ? true : options
vendor: 7,890 bytes, lines 3569-3800
3569.childList, 3570 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 3571 }); 3572 observers.push(observer); 3573 }; 3574 const init = () => { 3575 if (!swiper.params.observer) return; 3576 if (swiper.params.observeParents) { 3577 const containerParents = elementParents(swiper.hostEl); 3578 for (let i = 0; i < containerParents.length; i += 1) { 3579 attach(containerParents[i]); 3580 } 3581 } 3582 // Observe container 3583 attach(swiper.hostEl, { 3584 childList: swiper.params.observeSlideChildren 3585 }); 3586 3587 // Observe wrapper 3588 attach(swiper.wrapperEl, { 3589 attributes: false 3590 }); 3591 }; 3592 const destroy = () => { 3593 observers.forEach(observer => { 3594 observer.disconnect(); 3595 }); 3596 observers.splice(0, observers.length); 3597 }; 3598 extendParams({ 3599 observer: false, 3600 observeParents: false, 3601 observeSlideChildren: false 3602 }); 3603 on('init', init); 3604 on('destroy', destroy); 3605 } 3606 3607 /* eslint-disable no-underscore-dangle */ 3608 3609 var eventsEmitter = { 3610 on(events, handler, priority) { 3611 const self = this; 3612 if (!self.eventsListeners || self.destroyed) return self; 3613 if (typeof handler !== 'function') return self; 3614 const method = priority ? 'unshift' : 'push'; 3615 events.split(' ').forEach(event => { 3616 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 3617 self.eventsListeners[event][method](handler); 3618 }); 3619 return self; 3620 }, 3621 once(events, handler, priority) { 3622 const self = this; 3623 if (!self.eventsListeners || self.destroyed) return self; 3624 if (typeof handler !== 'function') return self; 3625 function onceHandler() { 3626 self.off(events, onceHandler); 3627 if (onceHandler.__emitterProxy) { 3628 delete onceHandler.__emitterProxy; 3629 } 3630 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 3631 args[_key] = arguments[_key]; 3632 } 3633 handler.apply(self, args); 3634 } 3635 onceHandler.__emitterProxy = handler; 3636 return self.on(events, onceHandler, priority); 3637 }, 3638 onAny(handler, priority) { 3639 const self = this; 3640 if (!self.eventsListeners || self.destroyed) return self; 3641 if (typeof handler !== 'function') return self; 3642 const method = priority ? 'unshift' : 'push'; 3643 if (self.eventsAnyListeners.indexOf(handler) < 0) { 3644 self.eventsAnyListeners[method](handler); 3645 } 3646 return self; 3647 }, 3648 offAny(handler) { 3649 const self = this; 3650 if (!self.eventsListeners || self.destroyed) return self; 3651 if (!self.eventsAnyListeners) return self; 3652 const index = self.eventsAnyListeners.indexOf(handler); 3653 if (index >= 0) { 3654 self.eventsAnyListeners.splice(index, 1); 3655 } 3656 return self; 3657 }, 3658 off(events, handler) { 3659 const self = this; 3660 if (!self.eventsListeners || self.destroyed) return self; 3661 if (!self.eventsListeners) return self; 3662 events.split(' ').forEach(event => { 3663 if (typeof handler === 'undefined') { 3664 self.eventsListeners[event] = []; 3665 } else if (self.eventsListeners[event]) { 3666 self.eventsListeners[event].forEach((eventHandler, index) => { 3667 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 3668 self.eventsListeners[event].splice(index, 1); 3669 } 3670 }); 3671 } 3672 }); 3673 return self; 3674 }, 3675 emit() { 3676 const self = this; 3677 if (!self.eventsListeners || self.destroyed) return self; 3678 if (!self.eventsListeners) return self; 3679 let events; 3680 let data; 3681 let context; 3682 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 3683 args[_key2] = arguments[_key2]; 3684 } 3685 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 3686 events = args[0]; 3687 data = args.slice(1, args.length); 3688 context = self; 3689 } else { 3690 events = args[0].events; 3691 data = args[0].data; 3692 context = args[0].context || self; 3693 } 3694 data.unshift(context); 3695 const eventsArray = Array.isArray(events) ? events : events.split(' '); 3696 eventsArray.forEach(event => { 3697 if (self.eventsAnyListeners && self.eventsAnyListeners.length) { 3698 self.eventsAnyListeners.forEach(eventHandler => { 3699 eventHandler.apply(context, [event, ...data]); 3700 }); 3701 } 3702 if (self.eventsListeners && self.eventsListeners[event]) { 3703 self.eventsListeners[event].forEach(eventHandler => { 3704 eventHandler.apply(context, data); 3705 }); 3706 } 3707 }); 3708 return self; 3709 } 3710 }; 3711 3712 function updateSize() { 3713 const swiper = this; 3714 let width; 3715 let height; 3716 const el = swiper.el; 3717 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 3718 width = swiper.params.width; 3719 } else { 3720 width = el.clientWidth; 3721 } 3722 if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { 3723 height = swiper.params.height; 3724 } else { 3725 height = el.clientHeight; 3726 } 3727 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 3728 return; 3729 } 3730 3731 // Subtract paddings 3732 width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10); 3733 height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10); 3734 if (Number.isNaN(width)) width = 0; 3735 if (Number.isNaN(height)) height = 0; 3736 Object.assign(swiper, { 3737 width, 3738 height, 3739 size: swiper.isHorizontal() ? width : height 3740 }); 3741 } 3742 3743 function updateSlides() { 3744 const swiper = this; 3745 function getDirectionPropertyValue(node, label) { 3746 return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0); 3747 } 3748 const params = swiper.params; 3749 const { 3750 wrapperEl, 3751 slidesEl, 3752 size: swiperSize, 3753 rtlTranslate: rtl, 3754 wrongRTL 3755 } = swiper; 3756 const isVirtual = swiper.virtual && params.virtual.enabled; 3757 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 3758 const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`); 3759 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 3760 let snapGrid = []; 3761 const slidesGrid = []; 3762 const slidesSizesGrid = []; 3763 let offsetBefore = params.slidesOffsetBefore; 3764 if (typeof offsetBefore === 'function') { 3765 offsetBefore = params.slidesOffsetBefore.call(swiper); 3766 } 3767 let offsetAfter = params.slidesOffsetAfter; 3768 if (typeof offsetAfter === 'function') { 3769 offsetAfter = params.slidesOffsetAfter.call(swiper); 3770 } 3771 const previousSnapGridLength = swiper.snapGrid.length; 3772 const previousSlidesGridLength = swiper.slidesGrid.length; 3773 let spaceBetween = params.spaceBetween; 3774 let slidePosition = -offsetBefore; 3775 let prevSlideSize = 0; 3776 let index = 0; 3777 if (typeof swiperSize === 'undefined') { 3778 return; 3779 } 3780 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 3781 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 3782 } else if (typeof spaceBetween === 'string') { 3783 spaceBetween = parseFloat(spaceBetween); 3784 } 3785 swiper.virtualSize = -spaceBetween; 3786 3787 // reset margins 3788 slides.forEach(slideEl => { 3789 if (rtl) { 3790 slideEl.style.marginLeft = ''; 3791 } else { 3792 slideEl.style.marginRight = ''; 3793 } 3794 slideEl.style.marginBottom = ''; 3795 slideEl.style.marginTop = ''; 3796 }); 3797 3798 // reset cssMode offsets 3799 if (params.centeredSlides && params.cssMode) { 3800 setCSSProperty
3800(wrapperEl, '--swiper-centered-offset-before', ''); 3801 setCSSProperty
vendor: 6,800 bytes, lines 3801-3955
3801(wrapperEl, '--swiper-centered-offset-after', ''); 3802 } 3803 const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; 3804 if (gridEnabled) { 3805 swiper.grid.initSlides(slides); 3806 } else if (swiper.grid) { 3807 swiper.grid.unsetSlides(); 3808 } 3809 3810 // Calc slides 3811 let slideSize; 3812 const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => { 3813 return typeof params.breakpoints[key].slidesPerView !== 'undefined'; 3814 }).length > 0; 3815 for (let i = 0; i < slidesLength; i += 1) { 3816 slideSize = 0; 3817 let slide; 3818 if (slides[i]) slide = slides[i]; 3819 if (gridEnabled) { 3820 swiper.grid.updateSlide(i, slide, slides); 3821 } 3822 if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line 3823 3824 if (params.slidesPerView === 'auto') { 3825 if (shouldResetSlideSize) { 3826 slides[i].style[swiper.getDirectionLabel('width')] = ``; 3827 } 3828 const slideStyles = getComputedStyle(slide); 3829 const currentTransform = slide.style.transform; 3830 const currentWebKitTransform = slide.style.webkitTransform; 3831 if (currentTransform) { 3832 slide.style.transform = 'none'; 3833 } 3834 if (currentWebKitTransform) { 3835 slide.style.webkitTransform = 'none'; 3836 } 3837 if (params.roundLengths) { 3838 slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true); 3839 } else { 3840 // eslint-disable-next-line 3841 const width = getDirectionPropertyValue(slideStyles, 'width'); 3842 const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); 3843 const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); 3844 const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); 3845 const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); 3846 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 3847 if (boxSizing && boxSizing === 'border-box') { 3848 slideSize = width + marginLeft + marginRight; 3849 } else { 3850 const { 3851 clientWidth, 3852 offsetWidth 3853 } = slide; 3854 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 3855 } 3856 } 3857 if (currentTransform) { 3858 slide.style.transform = currentTransform; 3859 } 3860 if (currentWebKitTransform) { 3861 slide.style.webkitTransform = currentWebKitTransform; 3862 } 3863 if (params.roundLengths) slideSize = Math.floor(slideSize); 3864 } else { 3865 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 3866 if (params.roundLengths) slideSize = Math.floor(slideSize); 3867 if (slides[i]) { 3868 slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`; 3869 } 3870 } 3871 if (slides[i]) { 3872 slides[i].swiperSlideSize = slideSize; 3873 } 3874 slidesSizesGrid.push(slideSize); 3875 if (params.centeredSlides) { 3876 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 3877 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 3878 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 3879 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 3880 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 3881 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 3882 slidesGrid.push(slidePosition); 3883 } else { 3884 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 3885 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 3886 slidesGrid.push(slidePosition); 3887 slidePosition = slidePosition + slideSize + spaceBetween; 3888 } 3889 swiper.virtualSize += slideSize + spaceBetween; 3890 prevSlideSize = slideSize; 3891 index += 1; 3892 } 3893 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 3894 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 3895 wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`; 3896 } 3897 if (params.setWrapperSize) { 3898 wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 3899 } 3900 if (gridEnabled) { 3901 swiper.grid.updateWrapperSize(slideSize, snapGrid); 3902 } 3903 3904 // Remove last grid elements depending on width 3905 if (!params.centeredSlides) { 3906 const newSlidesGrid = []; 3907 for (let i = 0; i < snapGrid.length; i += 1) { 3908 let slidesGridItem = snapGrid[i]; 3909 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 3910 if (snapGrid[i] <= swiper.virtualSize - swiperSize) { 3911 newSlidesGrid.push(slidesGridItem); 3912 } 3913 } 3914 snapGrid = newSlidesGrid; 3915 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 3916 snapGrid.push(swiper.virtualSize - swiperSize); 3917 } 3918 } 3919 if (isVirtual && params.loop) { 3920 const size = slidesSizesGrid[0] + spaceBetween; 3921 if (params.slidesPerGroup > 1) { 3922 const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup); 3923 const groupSize = size * params.slidesPerGroup; 3924 for (let i = 0; i < groups; i += 1) { 3925 snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize); 3926 } 3927 } 3928 for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) { 3929 if (params.slidesPerGroup === 1) { 3930 snapGrid.push(snapGrid[snapGrid.length - 1] + size); 3931 } 3932 slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size); 3933 swiper.virtualSize += size; 3934 } 3935 } 3936 if (snapGrid.length === 0) snapGrid = [0]; 3937 if (spaceBetween !== 0) { 3938 const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight'); 3939 slides.filter((_, slideIndex) => { 3940 if (!params.cssMode || params.loop) return true; 3941 if (slideIndex === slides.length - 1) { 3942 return false; 3943 } 3944 return true; 3945 }).forEach(slideEl => { 3946 slideEl.style[key] = `${spaceBetween}px`; 3947 }); 3948 } 3949 if (params.centeredSlides && params.centeredSlidesBounds) { 3950 let allSlidesSize = 0; 3951 slidesSizesGrid.forEach(slideSizeValue => { 3952 allSlidesSize += slideSizeValue + (spaceBetween || 0); 3953 }); 3954 allSlidesSize -= spaceBetween; 3955 const maxSnap = allSlidesSize
vendor: 3,181 bytes, lines 3955-4036
3955- swiperSize; 3956 snapGrid = snapGrid.map(snap => { 3957 if (snap <= 0) return -offsetBefore; 3958 if (snap > maxSnap) return maxSnap + offsetAfter; 3959 return snap; 3960 }); 3961 } 3962 if (params.centerInsufficientSlides) { 3963 let allSlidesSize = 0; 3964 slidesSizesGrid.forEach(slideSizeValue => { 3965 allSlidesSize += slideSizeValue + (spaceBetween || 0); 3966 }); 3967 allSlidesSize -= spaceBetween; 3968 if (allSlidesSize < swiperSize) { 3969 const allSlidesOffset = (swiperSize - allSlidesSize) / 2; 3970 snapGrid.forEach((snap, snapIndex) => { 3971 snapGrid[snapIndex] = snap - allSlidesOffset; 3972 }); 3973 slidesGrid.forEach((snap, snapIndex) => { 3974 slidesGrid[snapIndex] = snap + allSlidesOffset; 3975 }); 3976 } 3977 } 3978 Object.assign(swiper, { 3979 slides, 3980 snapGrid, 3981 slidesGrid, 3982 slidesSizesGrid 3983 }); 3984 if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { 3985 setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`); 3986 setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); 3987 const addToSnapGrid = -swiper.snapGrid[0]; 3988 const addToSlidesGrid = -swiper.slidesGrid[0]; 3989 swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid); 3990 swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid); 3991 } 3992 if (slidesLength !== previousSlidesLength) { 3993 swiper.emit('slidesLengthChange'); 3994 } 3995 if (snapGrid.length !== previousSnapGridLength) { 3996 if (swiper.params.watchOverflow) swiper.checkOverflow(); 3997 swiper.emit('snapGridLengthChange'); 3998 } 3999 if (slidesGrid.length !== previousSlidesGridLength) { 4000 swiper.emit('slidesGridLengthChange'); 4001 } 4002 if (params.watchSlidesProgress) { 4003 swiper.updateSlidesOffset(); 4004 } 4005 swiper.emit('slidesUpdated'); 4006 if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) { 4007 const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`; 4008 const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass); 4009 if (slidesLength <= params.maxBackfaceHiddenSlides) { 4010 if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass); 4011 } else if (hasClassBackfaceClassAdded) { 4012 swiper.el.classList.remove(backFaceHiddenClass); 4013 } 4014 } 4015 } 4016 4017 function updateAutoHeight(speed) { 4018 const swiper = this; 4019 const activeSlides = []; 4020 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 4021 let newHeight = 0; 4022 let i; 4023 if (typeof speed === 'number') { 4024 swiper.setTransition(speed); 4025 } else if (speed === true) { 4026 swiper.setTransition(swiper.params.speed); 4027 } 4028 const getSlideByIndex = index => { 4029 if (isVirtual) { 4030 return swiper.slides[swiper.getSlideIndexByData(index)]; 4031 } 4032 return swiper.slides[index]; 4033 }; 4034 // Find slides currently in view 4035 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 4036 if (swiper.params.centeredSlides) {
vendor: 1,816 bytes, lines 4037-4089
4037 (swiper.visibleSlides || []).forEach(slide => { 4038 activeSlides.push(slide); 4039 }); 4040 } else { 4041 for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 4042 const index = swiper.activeIndex + i; 4043 if (index > swiper.slides.length && !isVirtual) break; 4044 activeSlides.push(getSlideByIndex(index)); 4045 } 4046 } 4047 } else { 4048 activeSlides.push(getSlideByIndex(swiper.activeIndex)); 4049 } 4050 4051 // Find new height from highest slide in view 4052 for (i = 0; i < activeSlides.length; i += 1) { 4053 if (typeof activeSlides[i] !== 'undefined') { 4054 const height = activeSlides[i].offsetHeight; 4055 newHeight = height > newHeight ? height : newHeight; 4056 } 4057 } 4058 4059 // Update Height 4060 if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`; 4061 } 4062 4063 function updateSlidesOffset() { 4064 const swiper = this; 4065 const slides = swiper.slides; 4066 // eslint-disable-next-line 4067 const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0; 4068 for (let i = 0; i < slides.length; i += 1) { 4069 slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment(); 4070 } 4071 } 4072 4073 function updateSlidesProgress(translate) { 4074 if (translate === void 0) { 4075 translate = this && this.translate || 0; 4076 } 4077 const swiper = this; 4078 const params = swiper.params; 4079 const { 4080 slides, 4081 rtlTranslate: rtl, 4082 snapGrid 4083 } = swiper; 4084 if (slides.length === 0) return; 4085 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 4086 let offsetCenter = -translate; 4087 if (rtl) offsetCenter = translate; 4088 4089 // Visible Slides
vendor: 4,685 bytes, lines 4090-4201
4090 slides.forEach(slideEl => { 4091 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass); 4092 }); 4093 swiper.visibleSlidesIndexes = []; 4094 swiper.visibleSlides = []; 4095 let spaceBetween = params.spaceBetween; 4096 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 4097 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 4098 } else if (typeof spaceBetween === 'string') { 4099 spaceBetween = parseFloat(spaceBetween); 4100 } 4101 for (let i = 0; i < slides.length; i += 1) { 4102 const slide = slides[i]; 4103 let slideOffset = slide.swiperSlideOffset; 4104 if (params.cssMode && params.centeredSlides) { 4105 slideOffset -= slides[0].swiperSlideOffset; 4106 } 4107 const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 4108 const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 4109 const slideBefore = -(offsetCenter - slideOffset); 4110 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 4111 const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i]; 4112 const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 4113 if (isVisible) { 4114 swiper.visibleSlides.push(slide); 4115 swiper.visibleSlidesIndexes.push(i); 4116 slides[i].classList.add(params.slideVisibleClass); 4117 } 4118 if (isFullyVisible) { 4119 slides[i].classList.add(params.slideFullyVisibleClass); 4120 } 4121 slide.progress = rtl ? -slideProgress : slideProgress; 4122 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; 4123 } 4124 } 4125 4126 function updateProgress(translate) { 4127 const swiper = this; 4128 if (typeof translate === 'undefined') { 4129 const multiplier = swiper.rtlTranslate ? -1 : 1; 4130 // eslint-disable-next-line 4131 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 4132 } 4133 const params = swiper.params; 4134 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 4135 let { 4136 progress, 4137 isBeginning, 4138 isEnd, 4139 progressLoop 4140 } = swiper; 4141 const wasBeginning = isBeginning; 4142 const wasEnd = isEnd; 4143 if (translatesDiff === 0) { 4144 progress = 0; 4145 isBeginning = true; 4146 isEnd = true; 4147 } else { 4148 progress = (translate - swiper.minTranslate()) / translatesDiff; 4149 const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1; 4150 const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1; 4151 isBeginning = isBeginningRounded || progress <= 0; 4152 isEnd = isEndRounded || progress >= 1; 4153 if (isBeginningRounded) progress = 0; 4154 if (isEndRounded) progress = 1; 4155 } 4156 if (params.loop) { 4157 const firstSlideIndex = swiper.getSlideIndexByData(0); 4158 const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1); 4159 const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex]; 4160 const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex]; 4161 const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1]; 4162 const translateAbs = Math.abs(translate); 4163 if (translateAbs >= firstSlideTranslate) { 4164 progressLoop = (translateAbs - firstSlideTranslate) / translateMax; 4165 } else { 4166 progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax; 4167 } 4168 if (progressLoop > 1) progressLoop -= 1; 4169 } 4170 Object.assign(swiper, { 4171 progress, 4172 progressLoop, 4173 isBeginning, 4174 isEnd 4175 }); 4176 if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 4177 if (isBeginning && !wasBeginning) { 4178 swiper.emit('reachBeginning toEdge'); 4179 } 4180 if (isEnd && !wasEnd) { 4181 swiper.emit('reachEnd toEdge'); 4182 } 4183 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 4184 swiper.emit('fromEdge'); 4185 } 4186 swiper.emit('progress', progress); 4187 } 4188 4189 function updateSlidesClasses() { 4190 const swiper = this; 4191 const { 4192 slides, 4193 params, 4194 slidesEl, 4195 activeIndex 4196 } = swiper; 4197 const isVirtual = swiper.virtual && params.virtual.enabled; 4198 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 4199 const getFilteredSlide = selector => { 4200 return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0]; 4201 };
4202 slides.forEach(slideEl => { 4203 slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 4204 }); 4205 let activeSlide; 4206 let prevSlide; 4207 let nextSlide; 4208 if (isVirtual) { 4209 if (params.loop) { 4210 let slideIndex = activeIndex - swiper.virtual.slidesBefore; 4211 if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex; 4212 if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length; 4213 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`); 4214 } else { 4215 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`); 4216 } 4217 } else { 4218 if (gridEnabled) { 4219 activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0]; 4220 nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0]; 4221 prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0]; 4222 } else { 4223 activeSlide = slides[activeIndex]; 4224 } 4225 } 4226 if (activeSlide) { 4227 // Active classes 4228 activeSlide.classList.add(params.slideActiveClass); 4229 if (gridEnabled) { 4230 if (nextSlide) { 4231 nextSlide.classList.add(params.slideNextClass); 4232 } 4233 if (prevSlide) { 4234 prevSlide.classList.add(params.slidePrevClass); 4235 } 4236 } else { 4237 // Next Slide 4238 nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 4239 if (params.loop && !nextSlide) { 4240 nextSlide = slides[0]; 4241 } 4242 if (nextSlide) { 4243 nextSlide.classList.add(params.slideNextClass); 4244 } 4245 4246 // Prev Slide 4247 prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 4248 if (params.loop && !prevSlide === 0) { 4249 prevSlide = slides[slides.length - 1]; 4250 } 4251 if (prevSlide) { 4252 prevSlide.classList.add(params.slidePrevClass); 4253 } 4254 } 4255 } 4256 swiper.emitSlidesClasses(); 4257 } 4258 4259 const processLazyPreloader = (swiper, imageEl) => { 4260 if (!swiper || swiper.destroyed || !swiper.params) return; 4261 const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 4262 const slideEl = imageEl.closest(slideSelector()); 4263 if (slideEl) { 4264 let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`); 4265 if (!lazyEl && swiper.isElement) { 4266 if (slideEl.shadowRoot) { 4267 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 4268 } else { 4269 // init later 4270 requestAnimationFrame(() => { 4271 if (slideEl.shadowRoot) { 4272 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 4273 if (lazyEl) lazyEl.remove(); 4274 } 4275 }); 4276 } 4277 } 4278 if (lazyEl) lazyEl.remove(); 4279 } 4280 }; 4281 const unlazy = (swiper, index) => { 4282 if (!swiper.slides[index]) return; 4283 const imageEl = swiper.slides[index].querySelector('[loading="lazy"]'); 4284 if (imageEl) imageEl.removeAttribute('loading'); 4285 }; 4286 const preload = swiper => { 4287 if (!swiper || swiper.destroyed || !swiper.params) return; 4288 let amount = swiper.params.lazyPreloadPrevNext; 4289 const len = swiper.slides.length; 4290 if (!len || !amount || amount < 0) return; 4291 amount = Math.min(amount, len); 4292 const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView); 4293 const activeIndex = swiper.activeIndex; 4294 if (swiper.params.grid && swiper.params.grid.rows > 1) { 4295 const activeColumn = activeIndex; 4296 const preloadColumns = [activeColumn - amount]; 4297 preloadColumns.push(...Array.from({ 4298 length: amount 4299 }).map((_, i) => { 4300 return activeColumn + slidesPerView + i; 4301 })); 4302 swiper.slides.forEach((slideEl, i) => { 4303 if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i); 4304 }); 4305 return; 4306 } 4307 const slideIndexLastInView = activeIndex + slidesPerView - 1; 4308 if (swiper.params.rewind || swiper.params.loop) { 4309 for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) { 4310 const realIndex = (i % len + len) % len; 4311 if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex); 4312 } 4313 } else { 4314 for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) { 4315 if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) { 4316 unlazy(swiper, i); 4317 } 4318 } 4319 } 4320 }; 4321 4322 function getActiveIndexByTranslate(swiper) { 4323 const { 4324 slidesGrid, 4325 params 4326 } = swiper; 4327 const translate = swiper.rtlTranslate ? swiper.translate : -swi
vendor: 3,983 bytes, lines 4327-4437
4327per.translate; 4328 let activeIndex; 4329 for (let i = 0; i < slidesGrid.length; i += 1) { 4330 if (typeof slidesGrid[i + 1] !== 'undefined') { 4331 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 4332 activeIndex = i; 4333 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 4334 activeIndex = i + 1; 4335 } 4336 } else if (translate >= slidesGrid[i]) { 4337 activeIndex = i; 4338 } 4339 } 4340 // Normalize slideIndex 4341 if (params.normalizeSlideIndex) { 4342 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 4343 } 4344 return activeIndex; 4345 } 4346 function updateActiveIndex(newActiveIndex) { 4347 const swiper = this; 4348 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 4349 const { 4350 snapGrid, 4351 params, 4352 activeIndex: previousIndex, 4353 realIndex: previousRealIndex, 4354 snapIndex: previousSnapIndex 4355 } = swiper; 4356 let activeIndex = newActiveIndex; 4357 let snapIndex; 4358 const getVirtualRealIndex = aIndex => { 4359 let realIndex = aIndex - swiper.virtual.slidesBefore; 4360 if (realIndex < 0) { 4361 realIndex = swiper.virtual.slides.length + realIndex; 4362 } 4363 if (realIndex >= swiper.virtual.slides.length) { 4364 realIndex -= swiper.virtual.slides.length; 4365 } 4366 return realIndex; 4367 }; 4368 if (typeof activeIndex === 'undefined') { 4369 activeIndex = getActiveIndexByTranslate(swiper); 4370 } 4371 if (snapGrid.indexOf(translate) >= 0) { 4372 snapIndex = snapGrid.indexOf(translate); 4373 } else { 4374 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 4375 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 4376 } 4377 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 4378 if (activeIndex === previousIndex && !swiper.params.loop) { 4379 if (snapIndex !== previousSnapIndex) { 4380 swiper.snapIndex = snapIndex; 4381 swiper.emit('snapIndexChange'); 4382 } 4383 return; 4384 } 4385 if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 4386 swiper.realIndex = getVirtualRealIndex(activeIndex); 4387 return; 4388 } 4389 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 4390 4391 // Get real index 4392 let realIndex; 4393 if (swiper.virtual && params.virtual.enabled && params.loop) { 4394 realIndex = getVirtualRealIndex(activeIndex); 4395 } else if (gridEnabled) { 4396 const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0]; 4397 let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10); 4398 if (Number.isNaN(activeSlideIndex)) { 4399 activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0); 4400 } 4401 realIndex = Math.floor(activeSlideIndex / params.grid.rows); 4402 } else if (swiper.slides[activeIndex]) { 4403 const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index'); 4404 if (slideIndex) { 4405 realIndex = parseInt(slideIndex, 10); 4406 } else { 4407 realIndex = activeIndex; 4408 } 4409 } else { 4410 realIndex = activeIndex; 4411 } 4412 Object.assign(swiper, { 4413 previousSnapIndex, 4414 snapIndex, 4415 previousRealIndex, 4416 realIndex, 4417 previousIndex, 4418 activeIndex 4419 }); 4420 if (swiper.initialized) { 4421 preload(swiper); 4422 } 4423 swiper.emit('activeIndexChange'); 4424 swiper.emit('snapIndexChange'); 4425 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 4426 if (previousRealIndex !== realIndex) { 4427 swiper.emit('realIndexChange'); 4428 } 4429 swiper.emit('slideChange'); 4430 } 4431 } 4432 4433 function updateClickedSlide(el, path) { 4434 const swiper = this; 4435 const params = swiper.params; 4436 let slide = el.closest(`.${params.slideClass}, swiper-slide`); 4437 if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {
vendor: 7,901 bytes, lines 4438-4719
4438 [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => { 4439 if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) { 4440 slide = pathEl; 4441 } 4442 }); 4443 } 4444 let slideFound = false; 4445 let slideIndex; 4446 if (slide) { 4447 for (let i = 0; i < swiper.slides.length; i += 1) { 4448 if (swiper.slides[i] === slide) { 4449 slideFound = true; 4450 slideIndex = i; 4451 break; 4452 } 4453 } 4454 } 4455 if (slide && slideFound) { 4456 swiper.clickedSlide = slide; 4457 if (swiper.virtual && swiper.params.virtual.enabled) { 4458 swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10); 4459 } else { 4460 swiper.clickedIndex = slideIndex; 4461 } 4462 } else { 4463 swiper.clickedSlide = undefined; 4464 swiper.clickedIndex = undefined; 4465 return; 4466 } 4467 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 4468 swiper.slideToClickedSlide(); 4469 } 4470 } 4471 4472 var update = { 4473 updateSize, 4474 updateSlides, 4475 updateAutoHeight, 4476 updateSlidesOffset, 4477 updateSlidesProgress, 4478 updateProgress, 4479 updateSlidesClasses, 4480 updateActiveIndex, 4481 updateClickedSlide 4482 }; 4483 4484 function getSwiperTranslate(axis) { 4485 if (axis === void 0) { 4486 axis = this.isHorizontal() ? 'x' : 'y'; 4487 } 4488 const swiper = this; 4489 const { 4490 params, 4491 rtlTranslate: rtl, 4492 translate, 4493 wrapperEl 4494 } = swiper; 4495 if (params.virtualTranslate) { 4496 return rtl ? -translate : translate; 4497 } 4498 if (params.cssMode) { 4499 return translate; 4500 } 4501 let currentTranslate = getTranslate(wrapperEl, axis); 4502 currentTranslate += swiper.cssOverflowAdjustment(); 4503 if (rtl) currentTranslate = -currentTranslate; 4504 return currentTranslate || 0; 4505 } 4506 4507 function setTranslate(translate, byController) { 4508 const swiper = this; 4509 const { 4510 rtlTranslate: rtl, 4511 params, 4512 wrapperEl, 4513 progress 4514 } = swiper; 4515 let x = 0; 4516 let y = 0; 4517 const z = 0; 4518 if (swiper.isHorizontal()) { 4519 x = rtl ? -translate : translate; 4520 } else { 4521 y = translate; 4522 } 4523 if (params.roundLengths) { 4524 x = Math.floor(x); 4525 y = Math.floor(y); 4526 } 4527 swiper.previousTranslate = swiper.translate; 4528 swiper.translate = swiper.isHorizontal() ? x : y; 4529 if (params.cssMode) { 4530 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 4531 } else if (!params.virtualTranslate) { 4532 if (swiper.isHorizontal()) { 4533 x -= swiper.cssOverflowAdjustment(); 4534 } else { 4535 y -= swiper.cssOverflowAdjustment(); 4536 } 4537 wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`; 4538 } 4539 4540 // Check if we need to update progress 4541 let newProgress; 4542 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 4543 if (translatesDiff === 0) { 4544 newProgress = 0; 4545 } else { 4546 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 4547 } 4548 if (newProgress !== progress) { 4549 swiper.updateProgress(translate); 4550 } 4551 swiper.emit('setTranslate', swiper.translate, byController); 4552 } 4553 4554 function minTranslate() { 4555 return -this.snapGrid[0]; 4556 } 4557 4558 function maxTranslate() { 4559 return -this.snapGrid[this.snapGrid.length - 1]; 4560 } 4561 4562 function translateTo(translate, speed, runCallbacks, translateBounds, internal) { 4563 if (translate === void 0) { 4564 translate = 0; 4565 } 4566 if (speed === void 0) { 4567 speed = this.params.speed; 4568 } 4569 if (runCallbacks === void 0) { 4570 runCallbacks = true; 4571 } 4572 if (translateBounds === void 0) { 4573 translateBounds = true; 4574 } 4575 const swiper = this; 4576 const { 4577 params, 4578 wrapperEl 4579 } = swiper; 4580 if (swiper.animating && params.preventInteractionOnTransition) { 4581 return false; 4582 } 4583 const minTranslate = swiper.minTranslate(); 4584 const maxTranslate = swiper.maxTranslate(); 4585 let newTranslate; 4586 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; 4587 4588 // Update progress 4589 swiper.updateProgress(newTranslate); 4590 if (params.cssMode) { 4591 const isH = swiper.isHorizontal(); 4592 if (speed === 0) { 4593 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 4594 } else { 4595 if (!swiper.support.smoothScroll) { 4596 animateCSSModeScroll({ 4597 swiper, 4598 targetPosition: -newTranslate, 4599 side: isH ? 'left' : 'top' 4600 }); 4601 return true; 4602 } 4603 wrapperEl.scrollTo({ 4604 [isH ? 'left' : 'top']: -newTranslate, 4605 behavior: 'smooth' 4606 }); 4607 } 4608 return true; 4609 } 4610 if (speed === 0) { 4611 swiper.setTransition(0); 4612 swiper.setTranslate(newTranslate); 4613 if (runCallbacks) { 4614 swiper.emit('beforeTransitionStart', speed, internal); 4615 swiper.emit('transitionEnd'); 4616 } 4617 } else { 4618 swiper.setTransition(speed); 4619 swiper.setTranslate(newTranslate); 4620 if (runCallbacks) { 4621 swiper.emit('beforeTransitionStart', speed, internal); 4622 swiper.emit('transitionStart'); 4623 } 4624 if (!swiper.animating) { 4625 swiper.animating = true; 4626 if (!swiper.onTranslateToWrapperTransitionEnd) { 4627 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 4628 if (!swiper || swiper.destroyed) return; 4629 if (e.target !== this) return; 4630 swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 4631 swiper.onTranslateToWrapperTransitionEnd = null; 4632 delete swiper.onTranslateToWrapperTransitionEnd; 4633 if (runCallbacks) { 4634 swiper.emit('transitionEnd'); 4635 } 4636 }; 4637 } 4638 swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 4639 } 4640 } 4641 return true; 4642 } 4643 4644 var translate = { 4645 getTranslate: getSwiperTranslate, 4646 setTranslate, 4647 minTranslate, 4648 maxTranslate, 4649 translateTo 4650 }; 4651 4652 function setTransition(duration, byController) { 4653 const swiper = this; 4654 if (!swiper.params.cssMode) { 4655 swiper.wrapperEl.style.transitionDuration = `${duration}ms`; 4656 swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : ''; 4657 } 4658 swiper.emit('setTransition', duration, byController); 4659 } 4660 4661 function transitionEmit(_ref) { 4662 let { 4663 swiper, 4664 runCallbacks, 4665 direction, 4666 step 4667 } = _ref; 4668 const { 4669 activeIndex, 4670 previousIndex 4671 } = swiper; 4672 let dir = direction; 4673 if (!dir) { 4674 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 4675 } 4676 swiper.emit(`transition${step}`); 4677 if (runCallbacks && activeIndex !== previousIndex) { 4678 if (dir === 'reset') { 4679 swiper.emit(`slideResetTransition${step}`); 4680 return; 4681 } 4682 swiper.emit(`slideChangeTransition${step}`); 4683 if (dir === 'next') { 4684 swiper.emit(`slideNextTransition${step}`); 4685 } else { 4686 swiper.emit(`slidePrevTransition${step}`); 4687 } 4688 } 4689 } 4690 4691 function transitionStart(runCallbacks, direction) { 4692 if (runCallbacks === void 0) { 4693 runCallbacks = true; 4694 } 4695 const swiper = this; 4696 const { 4697 params 4698 } = swiper; 4699 if (params.cssMode) return; 4700 if (params.autoHeight) { 4701 swiper.updateAutoHeight(); 4702 } 4703 transitionEmit({ 4704 swiper, 4705 runCallbacks, 4706 direction, 4707 step: 'Start' 4708 }); 4709 } 4710 4711 function transitionEnd(runCallbacks, direction) { 4712 if (runCallbacks === void 0) { 4713 runCallbacks = true; 4714 } 4715 const swiper = this; 4716 const { 4717 params 4718 } = swiper; 4719 swiper.animating = false;
vendor: 4,334 bytes, lines 4720-4843
4720 if (params.cssMode) return; 4721 swiper.setTransition(0); 4722 transitionEmit({ 4723 swiper, 4724 runCallbacks, 4725 direction, 4726 step: 'End' 4727 }); 4728 } 4729 4730 var transition = { 4731 setTransition, 4732 transitionStart, 4733 transitionEnd 4734 }; 4735 4736 function slideTo(index, speed, runCallbacks, internal, initial) { 4737 if (index === void 0) { 4738 index = 0; 4739 } 4740 if (speed === void 0) { 4741 speed = this.params.speed; 4742 } 4743 if (runCallbacks === void 0) { 4744 runCallbacks = true; 4745 } 4746 if (typeof index === 'string') { 4747 index = parseInt(index, 10); 4748 } 4749 const swiper = this; 4750 let slideIndex = index; 4751 if (slideIndex < 0) slideIndex = 0; 4752 const { 4753 params, 4754 snapGrid, 4755 slidesGrid, 4756 previousIndex, 4757 activeIndex, 4758 rtlTranslate: rtl, 4759 wrapperEl, 4760 enabled 4761 } = swiper; 4762 if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial || swiper.destroyed) { 4763 return false; 4764 } 4765 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 4766 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 4767 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 4768 const translate = -snapGrid[snapIndex]; 4769 // Normalize slideIndex 4770 if (params.normalizeSlideIndex) { 4771 for (let i = 0; i < slidesGrid.length; i += 1) { 4772 const normalizedTranslate = -Math.floor(translate * 100); 4773 const normalizedGrid = Math.floor(slidesGrid[i] * 100); 4774 const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 4775 if (typeof slidesGrid[i + 1] !== 'undefined') { 4776 if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { 4777 slideIndex = i; 4778 } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { 4779 slideIndex = i + 1; 4780 } 4781 } else if (normalizedTranslate >= normalizedGrid) { 4782 slideIndex = i; 4783 } 4784 } 4785 } 4786 // Directions locks 4787 if (swiper.initialized && slideIndex !== activeIndex) { 4788 if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) { 4789 return false; 4790 } 4791 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 4792 if ((activeIndex || 0) !== slideIndex) { 4793 return false; 4794 } 4795 } 4796 } 4797 if (slideIndex !== (previousIndex || 0) && runCallbacks) { 4798 swiper.emit('beforeSlideChangeStart'); 4799 } 4800 4801 // Update progress 4802 swiper.updateProgress(translate); 4803 let direction; 4804 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; 4805 4806 // Update Index 4807 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 4808 swiper.updateActiveIndex(slideIndex); 4809 // Update Height 4810 if (params.autoHeight) { 4811 swiper.updateAutoHeight(); 4812 } 4813 swiper.updateSlidesClasses(); 4814 if (params.effect !== 'slide') { 4815 swiper.setTranslate(translate); 4816 } 4817 if (direction !== 'reset') { 4818 swiper.transitionStart(runCallbacks, direction); 4819 swiper.transitionEnd(runCallbacks, direction); 4820 } 4821 return false; 4822 } 4823 if (params.cssMode) { 4824 const isH = swiper.isHorizontal(); 4825 const t = rtl ? translate : -translate; 4826 if (speed === 0) { 4827 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 4828 if (isVirtual) { 4829 swiper.wrapperEl.style.scrollSnapType = 'none'; 4830 swiper._immediateVirtual = true; 4831 } 4832 if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) { 4833 swiper._cssModeVirtualInitialSet = true; 4834 requestAnimationFrame(() => { 4835 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 4836 }); 4837 } else { 4838 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 4839 } 4840 if (isVirtual) { 4841 requestAnimationFrame(() => { 4842 swiper.wrapperEl.style.scrollSnapType = ''; 4843 swiper._immediateVirtual = false;
vendor: 5,102 bytes, lines 4844-4979
4844 }); 4845 } 4846 } else { 4847 if (!swiper.support.smoothScroll) { 4848 animateCSSModeScroll({ 4849 swiper, 4850 targetPosition: t, 4851 side: isH ? 'left' : 'top' 4852 }); 4853 return true; 4854 } 4855 wrapperEl.scrollTo({ 4856 [isH ? 'left' : 'top']: t, 4857 behavior: 'smooth' 4858 }); 4859 } 4860 return true; 4861 } 4862 swiper.setTransition(speed); 4863 swiper.setTranslate(translate); 4864 swiper.updateActiveIndex(slideIndex); 4865 swiper.updateSlidesClasses(); 4866 swiper.emit('beforeTransitionStart', speed, internal); 4867 swiper.transitionStart(runCallbacks, direction); 4868 if (speed === 0) { 4869 swiper.transitionEnd(runCallbacks, direction); 4870 } else if (!swiper.animating) { 4871 swiper.animating = true; 4872 if (!swiper.onSlideToWrapperTransitionEnd) { 4873 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 4874 if (!swiper || swiper.destroyed) return; 4875 if (e.target !== this) return; 4876 swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 4877 swiper.onSlideToWrapperTransitionEnd = null; 4878 delete swiper.onSlideToWrapperTransitionEnd; 4879 swiper.transitionEnd(runCallbacks, direction); 4880 }; 4881 } 4882 swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 4883 } 4884 return true; 4885 } 4886 4887 function slideToLoop(index, speed, runCallbacks, internal) { 4888 if (index === void 0) { 4889 index = 0; 4890 } 4891 if (speed === void 0) { 4892 speed = this.params.speed; 4893 } 4894 if (runCallbacks === void 0) { 4895 runCallbacks = true; 4896 } 4897 if (typeof index === 'string') { 4898 const indexAsNumber = parseInt(index, 10); 4899 index = indexAsNumber; 4900 } 4901 const swiper = this; 4902 if (swiper.destroyed) return; 4903 const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1; 4904 let newIndex = index; 4905 if (swiper.params.loop) { 4906 if (swiper.virtual && swiper.params.virtual.enabled) { 4907 // eslint-disable-next-line 4908 newIndex = newIndex + swiper.virtual.slidesBefore; 4909 } else { 4910 let targetSlideIndex; 4911 if (gridEnabled) { 4912 const slideIndex = newIndex * swiper.params.grid.rows; 4913 targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column; 4914 } else { 4915 targetSlideIndex = swiper.getSlideIndexByData(newIndex); 4916 } 4917 const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length; 4918 const { 4919 centeredSlides 4920 } = swiper.params; 4921 let slidesPerView = swiper.params.slidesPerView; 4922 if (slidesPerView === 'auto') { 4923 slidesPerView = swiper.slidesPerViewDynamic(); 4924 } else { 4925 slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10)); 4926 if (centeredSlides && slidesPerView % 2 === 0) { 4927 slidesPerView = slidesPerView + 1; 4928 } 4929 } 4930 let needLoopFix = cols - targetSlideIndex < slidesPerView; 4931 if (centeredSlides) { 4932 needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2); 4933 } 4934 if (needLoopFix) { 4935 const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev'; 4936 swiper.loopFix({ 4937 direction, 4938 slideTo: true, 4939 activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1, 4940 slideRealIndex: direction === 'next' ? swiper.realIndex : undefined 4941 }); 4942 } 4943 if (gridEnabled) { 4944 const slideIndex = newIndex * swiper.params.grid.rows; 4945 newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column; 4946 } else { 4947 newIndex = swiper.getSlideIndexByData(newIndex); 4948 } 4949 } 4950 } 4951 requestAnimationFrame(() => { 4952 swiper.slideTo(newIndex, speed, runCallbacks, internal); 4953 }); 4954 return swiper; 4955 } 4956 4957 /* eslint no-unused-vars: "off" */ 4958 function slideNext(speed, runCallbacks, internal) { 4959 if (speed === void 0) { 4960 speed = this.params.speed; 4961 } 4962 if (runCallbacks === void 0) { 4963 runCallbacks = true; 4964 } 4965 const swiper = this; 4966 const { 4967 enabled, 4968 params, 4969 animating 4970 } = swiper; 4971 if (!enabled || swiper.destroyed) return swiper; 4972 let perGroup = params.slidesPerGroup; 4973 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 4974 perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); 4975 } 4976 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; 4977 const isVirtual = swiper.virtual && params.virtual.enabled; 4978 if (params.loop) { 4979 if (animating && !isVirtual && params.loopPreventsSliding) return false;
4980 swiper.loopFix({ 4981 direction: 'next' 4982 }); 4983 // eslint-disable-next-line 4984 swiper._clientLeft = swiper.wrapperEl.clientLeft; 4985 if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) { 4986 requestAnimationFrame(() => { 4987 swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 4988 }); 4989 return true; 4990 } 4991 } 4992 if (params.rewind && swiper.isEnd) { 4993 return swiper.slideTo(0, speed, runCallbacks, internal); 4994 } 4995 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 4996 } 4997 4998 /* eslint no-unused-vars: "off" */ 4999 function slidePrev(speed, runCallbacks, internal) { 5000 if (speed === void 0) { 5001 speed = this.params.speed; 5002 } 5003 if (runCallbacks === void 0) { 5004 runCallbacks = true; 5005 } 5006 const swiper = this; 5007 const { 5008 params, 5009 snapGrid, 5010 slidesGrid, 5011 rtlTranslate, 5012 enabled, 5013 animating 5014 } = swiper; 5015 if (!enabled || swiper.destroyed) return swiper; 5016 const isVirtual = swiper.virtual && params.virtual.enabled; 5017 if (params.loop) { 5018 if (animating && !isVirtual && params.loopPreventsSliding) return false; 5019 swiper.loopFix({ 5020 direction: 'prev' 5021 }); 5022 // eslint-disable-next-line 5023 swiper._clientLeft = swiper.wrapperEl.clientLeft; 5024 } 5025 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 5026 function normalize(val) { 5027 if (val < 0) return -Math.floor(Math.abs(val)); 5028 return Math.floor(val); 5029 } 5030 const normalizedTranslate = normalize(translate); 5031 const normalizedSnapGrid = snapGrid.map(val => normalize(val)); 5032 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 5033 if (typeof prevSnap === 'undefined' && params.cssMode) { 5034 let prevSnapIndex; 5035 snapGrid.forEach((snap, snapIndex) => { 5036 if (normalizedTranslate >= snap) { 5037 // prevSnap = snap; 5038 prevSnapIndex = snapIndex; 5039 } 5040 }); 5041 if (typeof prevSnapIndex !== 'undefined') { 5042 prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; 5043 } 5044 } 5045 let prevIndex = 0; 5046 if (typeof prevSnap !== 'undefined') { 5047 prevIndex = slidesGrid.indexOf(prevSnap); 5048 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 5049 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 5050 prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; 5051 prevIndex = Math.max(prevIndex, 0); 5052 } 5053 } 5054 if (params.rewind && swiper.isBeginning) { 5055 const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 5056 return swiper.slideTo(lastIndex, speed, runCallbacks, internal); 5057 } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) { 5058 requestAnimationFrame(() => { 5059 swiper.slideTo(prevIndex, speed, runCallbacks, internal); 5060 }); 5061 return true; 5062 } 5063 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 5064 } 5065 5066 /* eslint no-unused-vars: "off" */ 5067 function slideReset(speed, runCallbacks, internal) { 5068 if (speed === void 0) { 5069 speed = this.params.speed; 5070 } 5071 if (runCallbacks === void 0) { 5072 runCallbacks = true; 5073 } 5074 const swiper = this; 5075 if (swiper.destroyed) return; 5076 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 5077 } 5078 5079 /* eslint no-unused-vars: "off" */ 5080 function slideToClosest(speed, runCallbacks, internal, threshold) { 5081 if (speed === void 0) { 5082 speed = this.params.speed; 5083 } 5084 if (runCallbacks === void 0) { 5085 runCallbacks = true; 5086 } 5087 if (threshold === void 0) { 5088 threshold = 0.5; 5089 } 5090 const swiper = this; 5091 if (swiper.destroyed) return; 5092 let index = swiper.activeIndex; 5093 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 5094 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 5095 const translate = swiper.rtlTranslate ? swiper.translate : -swi
vendor: 4,106 bytes, lines 5095-5196
5095per.translate; 5096 if (translate >= swiper.snapGrid[snapIndex]) { 5097 // The current translate is on or after the current snap index, so the choice 5098 // is between the current index and the one after it. 5099 const currentSnap = swiper.snapGrid[snapIndex]; 5100 const nextSnap = swiper.snapGrid[snapIndex + 1]; 5101 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 5102 index += swiper.params.slidesPerGroup; 5103 } 5104 } else { 5105 // The current translate is before the current snap index, so the choice 5106 // is between the current index and the one before it. 5107 const prevSnap = swiper.snapGrid[snapIndex - 1]; 5108 const currentSnap = swiper.snapGrid[snapIndex]; 5109 if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { 5110 index -= swiper.params.slidesPerGroup; 5111 } 5112 } 5113 index = Math.max(index, 0); 5114 index = Math.min(index, swiper.slidesGrid.length - 1); 5115 return swiper.slideTo(index, speed, runCallbacks, internal); 5116 } 5117 5118 function slideToClickedSlide() { 5119 const swiper = this; 5120 if (swiper.destroyed) return; 5121 const { 5122 params, 5123 slidesEl 5124 } = swiper; 5125 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 5126 let slideToIndex = swiper.clickedIndex; 5127 let realIndex; 5128 const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`; 5129 if (params.loop) { 5130 if (swiper.animating) return; 5131 realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 5132 if (params.centeredSlides) { 5133 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 5134 swiper.loopFix(); 5135 slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 5136 nextTick(() => { 5137 swiper.slideTo(slideToIndex); 5138 }); 5139 } else { 5140 swiper.slideTo(slideToIndex); 5141 } 5142 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 5143 swiper.loopFix(); 5144 slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 5145 nextTick(() => { 5146 swiper.slideTo(slideToIndex); 5147 }); 5148 } else { 5149 swiper.slideTo(slideToIndex); 5150 } 5151 } else { 5152 swiper.slideTo(slideToIndex); 5153 } 5154 } 5155 5156 var slide = { 5157 slideTo, 5158 slideToLoop, 5159 slideNext, 5160 slidePrev, 5161 slideReset, 5162 slideToClosest, 5163 slideToClickedSlide 5164 }; 5165 5166 function loopCreate(slideRealIndex) { 5167 const swiper = this; 5168 const { 5169 params, 5170 slidesEl 5171 } = swiper; 5172 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 5173 const initSlides = () => { 5174 const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 5175 slides.forEach((el, index) => { 5176 el.setAttribute('data-swiper-slide-index', index); 5177 }); 5178 }; 5179 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 5180 const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1); 5181 const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0; 5182 const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0; 5183 const addBlankSlides = amountOfSlides => { 5184 for (let i = 0; i < amountOfSlides; i += 1) { 5185 const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]); 5186 swiper.slidesEl.append(slideEl); 5187 } 5188 }; 5189 if (shouldFillGroup) { 5190 if (params.loopAddBlankSlides) { 5191 const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup; 5192 addBlankSlides(slidesToAdd); 5193 swiper.recalcSlides(); 5194 swiper.updateSlides(); 5195 } else { 5196 showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may
5196not function properly. You need to add more slides (or make duplicates, or empty slides)'); 5197 } 5198 initSlides(); 5199 } else if (shouldFillGrid) { 5200 if (params.loopAddBlankSlides) { 5201 const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows; 5202 addBlankSlides(slidesToAdd); 5203 swiper.recalcSlides(); 5204 swiper.updateSlides(); 5205 } else { 5206 showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)'); 5207 } 5208 initSlides(); 5209 } else { 5210 initSlides(); 5211 } 5212 swiper.loopFix({ 5213 slideRealIndex, 5214 direction: params.centeredSlides ? undefined : 'next' 5215 }); 5216 } 5217 5218 function loopFix(_temp) { 5219 let { 5220 slideRealIndex, 5221 slideTo = true, 5222 direction, 5223 setTranslate, 5224 activeSlideIndex, 5225 byController, 5226 byMousewheel 5227 } = _temp === void 0 ? {} : _temp; 5228 const swiper = this; 5229 if (!swiper.params.loop) return; 5230 swiper.emit('beforeLoopFix'); 5231 const { 5232 slides, 5233 allowSlidePrev, 5234 allowSlideNext, 5235 slidesEl, 5236 params 5237 } = swiper; 5238 const { 5239 centeredSlides 5240 } = params; 5241 swiper.allowSlidePrev = true; 5242 swiper.allowSlideNext = true; 5243 if (swiper.virtual && params.virtual.enabled) { 5244 if (slideTo) { 5245 if (!params.centeredSlides && swiper.snapIndex === 0) { 5246 swiper.slideTo(swiper.virtual.slides.length, 0, false, true); 5247 } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) { 5248 swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true); 5249 } else if (swiper.snapIndex === swiper.snapGrid.length - 1) { 5250 swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true); 5251 } 5252 } 5253 swiper.allowSlidePrev = allowSlidePrev; 5254 swiper.allowSlideNext = allowSlideNext; 5255 swiper.emit('loopFix'); 5256 return; 5257 } 5258 let slidesPerView = params.slidesPerView; 5259 if (slidesPerView === 'auto') { 5260 slidesPerView = swiper.slidesPerViewDynamic(); 5261 } else { 5262 slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10)); 5263 if (centeredSlides && slidesPerView % 2 === 0) { 5264 slidesPerView = slidesPerView + 1; 5265 } 5266 } 5267 const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup; 5268 let loopedSlides = slidesPerGroup; 5269 if (loopedSlides % slidesPerGroup !== 0) { 5270 loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup; 5271 } 5272 loopedSlides += params.loopAdditionalSlides; 5273 swiper.loopedSlides = loopedSlides; 5274 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 5275 if (slides.length < slidesPerView + loopedSlides) { 5276 showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters'); 5277 } else if (gridEnabled && params.grid.fill === 'row') { 5278 showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`'); 5279 } 5280 const prependSlidesIndexes = []; 5281 const appendSlidesIndexes = []; 5282 let activeIndex = swiper.activeIndex; 5283 if (typeof activeSlideIndex === 'undefined') { 5284 activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]); 5285 } else { 5286 activeIndex = activeSlideIndex; 5287 } 5288 const isNext = direction === 'next' || !direction; 5289 const isPrev = direction === 'prev' || !direction; 5290 let slidesPrepended = 0; 5291 let slidesAppended = 0; 5292 const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length; 5293 const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex; 5294 const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0); 5295 // prepend last slides before start 5296 if (activeColIndexWithShift < loopedSlides) { 5297 slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup); 5298 for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
vendor: 5,443 bytes, lines 5299-5431
5299 const index = i - Math.floor(i / cols) * cols; 5300 if (gridEnabled) { 5301 const colIndexToPrepend = cols - index - 1; 5302 for (let i = slides.length - 1; i >= 0; i -= 1) { 5303 if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i); 5304 } 5305 // slides.forEach((slide, slideIndex) => { 5306 // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex); 5307 // }); 5308 } else { 5309 prependSlidesIndexes.push(cols - index - 1); 5310 } 5311 } 5312 } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) { 5313 slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup); 5314 for (let i = 0; i < slidesAppended; i += 1) { 5315 const index = i - Math.floor(i / cols) * cols; 5316 if (gridEnabled) { 5317 slides.forEach((slide, slideIndex) => { 5318 if (slide.column === index) appendSlidesIndexes.push(slideIndex); 5319 }); 5320 } else { 5321 appendSlidesIndexes.push(index); 5322 } 5323 } 5324 } 5325 swiper.__preventObserver__ = true; 5326 requestAnimationFrame(() => { 5327 swiper.__preventObserver__ = false; 5328 }); 5329 if (isPrev) { 5330 prependSlidesIndexes.forEach(index => { 5331 slides[index].swiperLoopMoveDOM = true; 5332 slidesEl.prepend(slides[index]); 5333 slides[index].swiperLoopMoveDOM = false; 5334 }); 5335 } 5336 if (isNext) { 5337 appendSlidesIndexes.forEach(index => { 5338 slides[index].swiperLoopMoveDOM = true; 5339 slidesEl.append(slides[index]); 5340 slides[index].swiperLoopMoveDOM = false; 5341 }); 5342 } 5343 swiper.recalcSlides(); 5344 if (params.slidesPerView === 'auto') { 5345 swiper.updateSlides(); 5346 } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) { 5347 swiper.slides.forEach((slide, slideIndex) => { 5348 swiper.grid.updateSlide(slideIndex, slide, swiper.slides); 5349 }); 5350 } 5351 if (params.watchSlidesProgress) { 5352 swiper.updateSlidesOffset(); 5353 } 5354 if (slideTo) { 5355 if (prependSlidesIndexes.length > 0 && isPrev) { 5356 if (typeof slideRealIndex === 'undefined') { 5357 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 5358 const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended]; 5359 const diff = newSlideTranslate - currentSlideTranslate; 5360 if (byMousewheel) { 5361 swiper.setTranslate(swiper.translate - diff); 5362 } else { 5363 swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true); 5364 if (setTranslate) { 5365 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 5366 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 5367 } 5368 } 5369 } else { 5370 if (setTranslate) { 5371 const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length; 5372 swiper.slideTo(swiper.activeIndex + shift, 0, false, true); 5373 swiper.touchEventsData.currentTranslate = swiper.translate; 5374 } 5375 } 5376 } else if (appendSlidesIndexes.length > 0 && isNext) { 5377 if (typeof slideRealIndex === 'undefined') { 5378 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 5379 const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended]; 5380 const diff = newSlideTranslate - currentSlideTranslate; 5381 if (byMousewheel) { 5382 swiper.setTranslate(swiper.translate - diff); 5383 } else { 5384 swiper.slideTo(activeIndex - slidesAppended, 0, false, true); 5385 if (setTranslate) { 5386 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 5387 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 5388 } 5389 } 5390 } else { 5391 const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length; 5392 swiper.slideTo(swiper.activeIndex - shift, 0, false, true); 5393 } 5394 } 5395 } 5396 swiper.allowSlidePrev = allowSlidePrev; 5397 swiper.allowSlideNext = allowSlideNext; 5398 if (swiper.controller && swiper.controller.control && !byController) { 5399 const loopParams = { 5400 slideRealIndex, 5401 direction, 5402 setTranslate, 5403 activeSlideIndex, 5404 byController: true 5405 }; 5406 if (Array.isArray(swiper.controller.control)) { 5407 swiper.controller.control.forEach(c => { 5408 if (!c.destroyed && c.params.loop) c.loopFix({ 5409 ...loopParams, 5410 slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false 5411 }); 5412 }); 5413 } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) { 5414 swiper.controller.control.loopFix({ 5415 ...loopParams, 5416 slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false 5417 }); 5418 } 5419 } 5420 swiper.emit('loopFix'); 5421 } 5422 5423 function loopDestroy() { 5424 const swiper = this; 5425 const { 5426 params, 5427 slidesEl 5428 } = swiper; 5429 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 5430 swiper.recalcSlides(); 5431 const newSlidesOrder = [];
vendor: 5,505 bytes, lines 5432-5597
5432 swiper.slides.forEach(slideEl => { 5433 const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex; 5434 newSlidesOrder[index] = slideEl; 5435 }); 5436 swiper.slides.forEach(slideEl => { 5437 slideEl.removeAttribute('data-swiper-slide-index'); 5438 }); 5439 newSlidesOrder.forEach(slideEl => { 5440 slidesEl.append(slideEl); 5441 }); 5442 swiper.recalcSlides(); 5443 swiper.slideTo(swiper.realIndex, 0); 5444 } 5445 5446 var loop = { 5447 loopCreate, 5448 loopFix, 5449 loopDestroy 5450 }; 5451 5452 function setGrabCursor(moving) { 5453 const swiper = this; 5454 if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 5455 const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl; 5456 if (swiper.isElement) { 5457 swiper.__preventObserver__ = true; 5458 } 5459 el.style.cursor = 'move'; 5460 el.style.cursor = moving ? 'grabbing' : 'grab'; 5461 if (swiper.isElement) { 5462 requestAnimationFrame(() => { 5463 swiper.__preventObserver__ = false; 5464 }); 5465 } 5466 } 5467 5468 function unsetGrabCursor() { 5469 const swiper = this; 5470 if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 5471 return; 5472 } 5473 if (swiper.isElement) { 5474 swiper.__preventObserver__ = true; 5475 } 5476 swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = ''; 5477 if (swiper.isElement) { 5478 requestAnimationFrame(() => { 5479 swiper.__preventObserver__ = false; 5480 }); 5481 } 5482 } 5483 5484 var grabCursor = { 5485 setGrabCursor, 5486 unsetGrabCursor 5487 }; 5488 5489 // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd 5490 function closestElement(selector, base) { 5491 if (base === void 0) { 5492 base = this; 5493 } 5494 function __closestFrom(el) { 5495 if (!el || el === getDocument() || el === getWindow()) return null; 5496 if (el.assignedSlot) el = el.assignedSlot; 5497 const found = el.closest(selector); 5498 if (!found && !el.getRootNode) { 5499 return null; 5500 } 5501 return found || __closestFrom(el.getRootNode().host); 5502 } 5503 return __closestFrom(base); 5504 } 5505 function preventEdgeSwipe(swiper, event, startX) { 5506 const window = getWindow(); 5507 const { 5508 params 5509 } = swiper; 5510 const edgeSwipeDetection = params.edgeSwipeDetection; 5511 const edgeSwipeThreshold = params.edgeSwipeThreshold; 5512 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 5513 if (edgeSwipeDetection === 'prevent') { 5514 event.preventDefault(); 5515 return true; 5516 } 5517 return false; 5518 } 5519 return true; 5520 } 5521 function onTouchStart(event) { 5522 const swiper = this; 5523 const document = getDocument(); 5524 let e = event; 5525 if (e.originalEvent) e = e.originalEvent; 5526 const data = swiper.touchEventsData; 5527 if (e.type === 'pointerdown') { 5528 if (data.pointerId !== null && data.pointerId !== e.pointerId) { 5529 return; 5530 } 5531 data.pointerId = e.pointerId; 5532 } else if (e.type === 'touchstart' && e.targetTouches.length === 1) { 5533 data.touchId = e.targetTouches[0].identifier; 5534 } 5535 if (e.type === 'touchstart') { 5536 // don't proceed touch event 5537 preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX); 5538 return; 5539 } 5540 const { 5541 params, 5542 touches, 5543 enabled 5544 } = swiper; 5545 if (!enabled) return; 5546 if (!params.simulateTouch && e.pointerType === 'mouse') return; 5547 if (swiper.animating && params.preventInteractionOnTransition) { 5548 return; 5549 } 5550 if (!swiper.animating && params.cssMode && params.loop) { 5551 swiper.loopFix(); 5552 } 5553 let targetEl = e.target; 5554 if (params.touchEventsTarget === 'wrapper') { 5555 if (!swiper.wrapperEl.contains(targetEl)) return; 5556 } 5557 if ('which' in e && e.which === 3) return; 5558 if ('button' in e && e.button > 0) return; 5559 if (data.isTouched && data.isMoved) return; 5560 5561 // change target el for shadow root component 5562 const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; 5563 // eslint-disable-next-line 5564 const eventPath = e.composedPath ? e.composedPath() : e.path; 5565 if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) { 5566 targetEl = eventPath[0]; 5567 } 5568 const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; 5569 const isTargetShadow = !!(e.target && e.target.shadowRoot); 5570 5571 // use closestElement for shadow root element to get the actual closest for nested shadow root element 5572 if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) { 5573 swiper.allowClick = true; 5574 return; 5575 } 5576 if (params.swipeHandler) { 5577 if (!targetEl.closest(params.swipeHandler)) return; 5578 } 5579 touches.currentX = e.pageX; 5580 touches.currentY = e.pageY; 5581 const startX = touches.currentX; 5582 const startY = touches.currentY; 5583 5584 // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 5585 5586 if (!preventEdgeSwipe(swiper, e, startX)) { 5587 return; 5588 } 5589 Object.assign(data, { 5590 isTouched: true, 5591 isMoved: false, 5592 allowTouchCallbacks: true, 5593 isScrolling: undefined, 5594 startMoving: undefined 5595 }); 5596 touches.startX = startX; 5597 touches.startY = startY;
vendor: 4,664 bytes, lines 5598-5727
5598 data.touchStartTime = now(); 5599 swiper.allowClick = true; 5600 swiper.updateSize(); 5601 swiper.swipeDirection = undefined; 5602 if (params.threshold > 0) data.allowThresholdMove = false; 5603 let preventDefault = true; 5604 if (targetEl.matches(data.focusableElements)) { 5605 preventDefault = false; 5606 if (targetEl.nodeName === 'SELECT') { 5607 data.isTouched = false; 5608 } 5609 } 5610 if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) { 5611 document.activeElement.blur(); 5612 } 5613 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 5614 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) { 5615 e.preventDefault(); 5616 } 5617 if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) { 5618 swiper.freeMode.onTouchStart(); 5619 } 5620 swiper.emit('touchStart', e); 5621 } 5622 5623 function onTouchMove(event) { 5624 const document = getDocument(); 5625 const swiper = this; 5626 const data = swiper.touchEventsData; 5627 const { 5628 params, 5629 touches, 5630 rtlTranslate: rtl, 5631 enabled 5632 } = swiper; 5633 if (!enabled) return; 5634 if (!params.simulateTouch && event.pointerType === 'mouse') return; 5635 let e = event; 5636 if (e.originalEvent) e = e.originalEvent; 5637 if (e.type === 'pointermove') { 5638 if (data.touchId !== null) return; // return from pointer if we use touch 5639 const id = e.pointerId; 5640 if (id !== data.pointerId) return; 5641 } 5642 let targetTouch; 5643 if (e.type === 'touchmove') { 5644 targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0]; 5645 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 5646 } else { 5647 targetTouch = e; 5648 } 5649 if (!data.isTouched) { 5650 if (data.startMoving && data.isScrolling) { 5651 swiper.emit('touchMoveOpposite', e); 5652 } 5653 return; 5654 } 5655 const pageX = targetTouch.pageX; 5656 const pageY = targetTouch.pageY; 5657 if (e.preventedByNestedSwiper) { 5658 touches.startX = pageX; 5659 touches.startY = pageY; 5660 return; 5661 } 5662 if (!swiper.allowTouchMove) { 5663 if (!e.target.matches(data.focusableElements)) { 5664 swiper.allowClick = false; 5665 } 5666 if (data.isTouched) { 5667 Object.assign(touches, { 5668 startX: pageX, 5669 startY: pageY, 5670 currentX: pageX, 5671 currentY: pageY 5672 }); 5673 data.touchStartTime = now(); 5674 } 5675 return; 5676 } 5677 if (params.touchReleaseOnEdges && !params.loop) { 5678 if (swiper.isVertical()) { 5679 // Vertical 5680 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 5681 data.isTouched = false; 5682 data.isMoved = false; 5683 return; 5684 } 5685 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 5686 return; 5687 } 5688 } 5689 if (document.activeElement) { 5690 if (e.target === document.activeElement && e.target.matches(data.focusableElements)) { 5691 data.isMoved = true; 5692 swiper.allowClick = false; 5693 return; 5694 } 5695 } 5696 if (data.allowTouchCallbacks) { 5697 swiper.emit('touchMove', e); 5698 } 5699 touches.previousX = touches.currentX; 5700 touches.previousY = touches.currentY; 5701 touches.currentX = pageX; 5702 touches.currentY = pageY; 5703 const diffX = touches.currentX - touches.startX; 5704 const diffY = touches.currentY - touches.startY; 5705 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; 5706 if (typeof data.isScrolling === 'undefined') { 5707 let touchAngle; 5708 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 5709 data.isScrolling = false; 5710 } else { 5711 // eslint-disable-next-line 5712 if (diffX * diffX + diffY * diffY >= 25) { 5713 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 5714 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 5715 } 5716 } 5717 } 5718 if (data.isScrolling) { 5719 swiper.emit('touchMoveOpposite', e); 5720 } 5721 if (typeof data.startMoving === 'undefined') { 5722 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 5723 data.startMoving = true; 5724 } 5725 } 5726 if (data.isScrolling) { 5727 data.isTouched = false;
vendor: 7,161 bytes, lines 5728-5917
5728 return; 5729 } 5730 if (!data.startMoving) { 5731 return; 5732 } 5733 swiper.allowClick = false; 5734 if (!params.cssMode && e.cancelable) { 5735 e.preventDefault(); 5736 } 5737 if (params.touchMoveStopPropagation && !params.nested) { 5738 e.stopPropagation(); 5739 } 5740 let diff = swiper.isHorizontal() ? diffX : diffY; 5741 let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY; 5742 if (params.oneWayMovement) { 5743 diff = Math.abs(diff) * (rtl ? 1 : -1); 5744 touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1); 5745 } 5746 touches.diff = diff; 5747 diff *= params.touchRatio; 5748 if (rtl) { 5749 diff = -diff; 5750 touchesDiff = -touchesDiff; 5751 } 5752 const prevTouchesDirection = swiper.touchesDirection; 5753 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 5754 swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next'; 5755 const isLoop = swiper.params.loop && !params.cssMode; 5756 const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev; 5757 if (!data.isMoved) { 5758 if (isLoop && allowLoopFix) { 5759 swiper.loopFix({ 5760 direction: swiper.swipeDirection 5761 }); 5762 } 5763 data.startTranslate = swiper.getTranslate(); 5764 swiper.setTransition(0); 5765 if (swiper.animating) { 5766 const evt = new window.CustomEvent('transitionend', { 5767 bubbles: true, 5768 cancelable: true 5769 }); 5770 swiper.wrapperEl.dispatchEvent(evt); 5771 } 5772 data.allowMomentumBounce = false; 5773 // Grab Cursor 5774 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 5775 swiper.setGrabCursor(true); 5776 } 5777 swiper.emit('sliderFirstMove', e); 5778 } 5779 let loopFixed; 5780 new Date().getTime(); 5781 if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) { 5782 Object.assign(touches, { 5783 startX: pageX, 5784 startY: pageY, 5785 currentX: pageX, 5786 currentY: pageY, 5787 startTranslate: data.currentTranslate 5788 }); 5789 data.loopSwapReset = true; 5790 data.startTranslate = data.currentTranslate; 5791 return; 5792 } 5793 swiper.emit('sliderMove', e); 5794 data.isMoved = true; 5795 data.currentTranslate = diff + data.startTranslate; 5796 let disableParentSwiper = true; 5797 let resistanceRatio = params.resistanceRatio; 5798 if (params.touchReleaseOnEdges) { 5799 resistanceRatio = 0; 5800 } 5801 if (diff > 0) { 5802 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) { 5803 swiper.loopFix({ 5804 direction: 'prev', 5805 setTranslate: true, 5806 activeSlideIndex: 0 5807 }); 5808 } 5809 if (data.currentTranslate > swiper.minTranslate()) { 5810 disableParentSwiper = false; 5811 if (params.resistance) { 5812 data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; 5813 } 5814 } 5815 } else if (diff < 0) { 5816 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) { 5817 swiper.loopFix({ 5818 direction: 'next', 5819 setTranslate: true, 5820 activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10))) 5821 }); 5822 } 5823 if (data.currentTranslate < swiper.maxTranslate()) { 5824 disableParentSwiper = false; 5825 if (params.resistance) { 5826 data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; 5827 } 5828 } 5829 } 5830 if (disableParentSwiper) { 5831 e.preventedByNestedSwiper = true; 5832 } 5833 5834 // Directions locks 5835 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 5836 data.currentTranslate = data.startTranslate; 5837 } 5838 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 5839 data.currentTranslate = data.startTranslate; 5840 } 5841 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { 5842 data.currentTranslate = data.startTranslate; 5843 } 5844 5845 // Threshold 5846 if (params.threshold > 0) { 5847 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 5848 if (!data.allowThresholdMove) { 5849 data.allowThresholdMove = true; 5850 touches.startX = touches.currentX; 5851 touches.startY = touches.currentY; 5852 data.currentTranslate = data.startTranslate; 5853 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 5854 return; 5855 } 5856 } else { 5857 data.currentTranslate = data.startTranslate; 5858 return; 5859 } 5860 } 5861 if (!params.followFinger || params.cssMode) return; 5862 5863 // Update active index in free mode 5864 if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { 5865 swiper.updateActiveIndex(); 5866 swiper.updateSlidesClasses(); 5867 } 5868 if (params.freeMode && params.freeMode.enabled && swiper.freeMode) { 5869 swiper.freeMode.onTouchMove(); 5870 } 5871 // Update progress 5872 swiper.updateProgress(data.currentTranslate); 5873 // Update translate 5874 swiper.setTranslate(data.currentTranslate); 5875 } 5876 5877 function onTouchEnd(event) { 5878 const swiper = this; 5879 const data = swiper.touchEventsData; 5880 let e = event; 5881 if (e.originalEvent) e = e.originalEvent; 5882 let targetTouch; 5883 const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel'; 5884 if (!isTouchEvent) { 5885 if (data.touchId !== null) return; // return from pointer if we use touch 5886 if (e.pointerId !== data.pointerId) return; 5887 targetTouch = e; 5888 } else { 5889 targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0]; 5890 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 5891 } 5892 if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) { 5893 const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView); 5894 if (!proceed) { 5895 return; 5896 } 5897 } 5898 data.pointerId = null; 5899 data.touchId = null; 5900 const { 5901 params, 5902 touches, 5903 rtlTranslate: rtl, 5904 slidesGrid, 5905 enabled 5906 } = swiper; 5907 if (!enabled) return; 5908 if (!params.simulateTouch && e.pointerType === 'mouse') return; 5909 if (data.allowTouchCallbacks) { 5910 swiper.emit('touchEnd', e); 5911 } 5912 data.allowTouchCallbacks = false; 5913 if (!data.isTouched) { 5914 if (data.isMoved && params.grabCursor) { 5915 swiper.setGrabCursor(false); 5916 } 5917 data.isMoved = false;
vendor: 4,628 bytes, lines 5918-6044
5918 data.startMoving = false; 5919 return; 5920 } 5921 5922 // Return Grab Cursor 5923 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 5924 swiper.setGrabCursor(false); 5925 } 5926 5927 // Time diff 5928 const touchEndTime = now(); 5929 const timeDiff = touchEndTime - data.touchStartTime; 5930 5931 // Tap, doubleTap, Click 5932 if (swiper.allowClick) { 5933 const pathTree = e.path || e.composedPath && e.composedPath(); 5934 swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree); 5935 swiper.emit('tap click', e); 5936 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 5937 swiper.emit('doubleTap doubleClick', e); 5938 } 5939 } 5940 data.lastClickTime = now(); 5941 nextTick(() => { 5942 if (!swiper.destroyed) swiper.allowClick = true; 5943 }); 5944 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) { 5945 data.isTouched = false; 5946 data.isMoved = false; 5947 data.startMoving = false; 5948 return; 5949 } 5950 data.isTouched = false; 5951 data.isMoved = false; 5952 data.startMoving = false; 5953 let currentPos; 5954 if (params.followFinger) { 5955 currentPos = rtl ? swiper.translate : -swiper.translate; 5956 } else { 5957 currentPos = -data.currentTranslate; 5958 } 5959 if (params.cssMode) { 5960 return; 5961 } 5962 if (params.freeMode && params.freeMode.enabled) { 5963 swiper.freeMode.onTouchEnd({ 5964 currentPos 5965 }); 5966 return; 5967 } 5968 5969 // Find current slide 5970 const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop; 5971 let stopIndex = 0; 5972 let groupSize = swiper.slidesSizesGrid[0]; 5973 for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 5974 const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 5975 if (typeof slidesGrid[i + increment] !== 'undefined') { 5976 if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 5977 stopIndex = i; 5978 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 5979 } 5980 } else if (swipeToLast || currentPos >= slidesGrid[i]) { 5981 stopIndex = i; 5982 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 5983 } 5984 } 5985 let rewindFirstIndex = null; 5986 let rewindLastIndex = null; 5987 if (params.rewind) { 5988 if (swiper.isBeginning) { 5989 rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 5990 } else if (swiper.isEnd) { 5991 rewindFirstIndex = 0; 5992 } 5993 } 5994 // Find current slide size 5995 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 5996 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 5997 if (timeDiff > params.longSwipesMs) { 5998 // Long touches 5999 if (!params.longSwipes) { 6000 swiper.slideTo(swiper.activeIndex); 6001 return; 6002 } 6003 if (swiper.swipeDirection === 'next') { 6004 if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex); 6005 } 6006 if (swiper.swipeDirection === 'prev') { 6007 if (ratio > 1 - params.longSwipesRatio) { 6008 swiper.slideTo(stopIndex + increment); 6009 } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) { 6010 swiper.slideTo(rewindLastIndex); 6011 } else { 6012 swiper.slideTo(stopIndex); 6013 } 6014 } 6015 } else { 6016 // Short swipes 6017 if (!params.shortSwipes) { 6018 swiper.slideTo(swiper.activeIndex); 6019 return; 6020 } 6021 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 6022 if (!isNavButtonTarget) { 6023 if (swiper.swipeDirection === 'next') { 6024 swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment); 6025 } 6026 if (swiper.swipeDirection === 'prev') { 6027 swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex); 6028 } 6029 } else if (e.target === swiper.navigation.nextEl) { 6030 swiper.slideTo(stopIndex + increment); 6031 } else { 6032 swiper.slideTo(stopIndex); 6033 } 6034 } 6035 } 6036 6037 function onResize() { 6038 const swiper = this; 6039 const { 6040 params, 6041 el 6042 } = swiper; 6043 if (el && el.offsetWidth === 0) return; 6044
vendor: 6,451 bytes, lines 6045-6263
6045 // Breakpoints 6046 if (params.breakpoints) { 6047 swiper.setBreakpoint(); 6048 } 6049 6050 // Save locks 6051 const { 6052 allowSlideNext, 6053 allowSlidePrev, 6054 snapGrid 6055 } = swiper; 6056 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 6057 6058 // Disable locks on resize 6059 swiper.allowSlideNext = true; 6060 swiper.allowSlidePrev = true; 6061 swiper.updateSize(); 6062 swiper.updateSlides(); 6063 swiper.updateSlidesClasses(); 6064 const isVirtualLoop = isVirtual && params.loop; 6065 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) { 6066 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 6067 } else { 6068 if (swiper.params.loop && !isVirtual) { 6069 swiper.slideToLoop(swiper.realIndex, 0, false, true); 6070 } else { 6071 swiper.slideTo(swiper.activeIndex, 0, false, true); 6072 } 6073 } 6074 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 6075 clearTimeout(swiper.autoplay.resizeTimeout); 6076 swiper.autoplay.resizeTimeout = setTimeout(() => { 6077 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 6078 swiper.autoplay.resume(); 6079 } 6080 }, 500); 6081 } 6082 // Return locks after resize 6083 swiper.allowSlidePrev = allowSlidePrev; 6084 swiper.allowSlideNext = allowSlideNext; 6085 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 6086 swiper.checkOverflow(); 6087 } 6088 } 6089 6090 function onClick(e) { 6091 const swiper = this; 6092 if (!swiper.enabled) return; 6093 if (!swiper.allowClick) { 6094 if (swiper.params.preventClicks) e.preventDefault(); 6095 if (swiper.params.preventClicksPropagation && swiper.animating) { 6096 e.stopPropagation(); 6097 e.stopImmediatePropagation(); 6098 } 6099 } 6100 } 6101 6102 function onScroll() { 6103 const swiper = this; 6104 const { 6105 wrapperEl, 6106 rtlTranslate, 6107 enabled 6108 } = swiper; 6109 if (!enabled) return; 6110 swiper.previousTranslate = swiper.translate; 6111 if (swiper.isHorizontal()) { 6112 swiper.translate = -wrapperEl.scrollLeft; 6113 } else { 6114 swiper.translate = -wrapperEl.scrollTop; 6115 } 6116 // eslint-disable-next-line 6117 if (swiper.translate === 0) swiper.translate = 0; 6118 swiper.updateActiveIndex(); 6119 swiper.updateSlidesClasses(); 6120 let newProgress; 6121 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 6122 if (translatesDiff === 0) { 6123 newProgress = 0; 6124 } else { 6125 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 6126 } 6127 if (newProgress !== swiper.progress) { 6128 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 6129 } 6130 swiper.emit('setTranslate', swiper.translate, false); 6131 } 6132 6133 function onLoad(e) { 6134 const swiper = this; 6135 processLazyPreloader(swiper, e.target); 6136 if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) { 6137 return; 6138 } 6139 swiper.update(); 6140 } 6141 6142 function onDocumentTouchStart() { 6143 const swiper = this; 6144 if (swiper.documentTouchHandlerProceeded) return; 6145 swiper.documentTouchHandlerProceeded = true; 6146 if (swiper.params.touchReleaseOnEdges) { 6147 swiper.el.style.touchAction = 'auto'; 6148 } 6149 } 6150 6151 const events = (swiper, method) => { 6152 const document = getDocument(); 6153 const { 6154 params, 6155 el, 6156 wrapperEl, 6157 device 6158 } = swiper; 6159 const capture = !!params.nested; 6160 const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 6161 const swiperMethod = method; 6162 6163 // Touch Events 6164 document[domMethod]('touchstart', swiper.onDocumentTouchStart, { 6165 passive: false, 6166 capture 6167 }); 6168 el[domMethod]('touchstart', swiper.onTouchStart, { 6169 passive: false 6170 }); 6171 el[domMethod]('pointerdown', swiper.onTouchStart, { 6172 passive: false 6173 }); 6174 document[domMethod]('touchmove', swiper.onTouchMove, { 6175 passive: false, 6176 capture 6177 }); 6178 document[domMethod]('pointermove', swiper.onTouchMove, { 6179 passive: false, 6180 capture 6181 }); 6182 document[domMethod]('touchend', swiper.onTouchEnd, { 6183 passive: true 6184 }); 6185 document[domMethod]('pointerup', swiper.onTouchEnd, { 6186 passive: true 6187 }); 6188 document[domMethod]('pointercancel', swiper.onTouchEnd, { 6189 passive: true 6190 }); 6191 document[domMethod]('touchcancel', swiper.onTouchEnd, { 6192 passive: true 6193 }); 6194 document[domMethod]('pointerout', swiper.onTouchEnd, { 6195 passive: true 6196 }); 6197 document[domMethod]('pointerleave', swiper.onTouchEnd, { 6198 passive: true 6199 }); 6200 document[domMethod]('contextmenu', swiper.onTouchEnd, { 6201 passive: true 6202 }); 6203 6204 // Prevent Links Clicks 6205 if (params.preventClicks || params.preventClicksPropagation) { 6206 el[domMethod]('click', swiper.onClick, true); 6207 } 6208 if (params.cssMode) { 6209 wrapperEl[domMethod]('scroll', swiper.onScroll); 6210 } 6211 6212 // Resize handler 6213 if (params.updateOnWindowResize) { 6214 swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); 6215 } else { 6216 swiper[swiperMethod]('observerUpdate', onResize, true); 6217 } 6218 6219 // Images loader 6220 el[domMethod]('load', swiper.onLoad, { 6221 capture: true 6222 }); 6223 }; 6224 function attachEvents() { 6225 const swiper = this; 6226 const { 6227 params 6228 } = swiper; 6229 swiper.onTouchStart = onTouchStart.bind(swiper); 6230 swiper.onTouchMove = onTouchMove.bind(swiper); 6231 swiper.onTouchEnd = onTouchEnd.bind(swiper); 6232 swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper); 6233 if (params.cssMode) { 6234 swiper.onScroll = onScroll.bind(swiper); 6235 } 6236 swiper.onClick = onClick.bind(swiper); 6237 swiper.onLoad = onLoad.bind(swiper); 6238 events(swiper, 'on'); 6239 } 6240 function detachEvents() { 6241 const swiper = this; 6242 events(swiper, 'off'); 6243 } 6244 var events$1 = { 6245 attachEvents, 6246 detachEvents 6247 }; 6248 6249 const isGridEnabled = (swiper, params) => { 6250 return swiper.grid && params.grid && params.grid.rows > 1; 6251 }; 6252 function setBreakpoint() { 6253 const swiper = this; 6254 const { 6255 realIndex, 6256 initialized, 6257 params, 6258 el 6259 } = swiper; 6260 const breakpoints = params.breakpoints; 6261 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; 6262 6263 // Get breakpoint for window width and update parameters
vendor: 3,132 bytes, lines 6264-6336
6264 const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); 6265 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 6266 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 6267 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 6268 const wasMultiRow = isGridEnabled(swiper, params); 6269 const isMultiRow = isGridEnabled(swiper, breakpointParams); 6270 const wasEnabled = params.enabled; 6271 if (wasMultiRow && !isMultiRow) { 6272 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 6273 swiper.emitContainerClasses(); 6274 } else if (!wasMultiRow && isMultiRow) { 6275 el.classList.add(`${params.containerModifierClass}grid`); 6276 if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') { 6277 el.classList.add(`${params.containerModifierClass}grid-column`); 6278 } 6279 swiper.emitContainerClasses(); 6280 } 6281 6282 // Toggle navigation, pagination, scrollbar 6283 ['navigation', 'pagination', 'scrollbar'].forEach(prop => { 6284 if (typeof breakpointParams[prop] === 'undefined') return; 6285 const wasModuleEnabled = params[prop] && params[prop].enabled; 6286 const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled; 6287 if (wasModuleEnabled && !isModuleEnabled) { 6288 swiper[prop].disable(); 6289 } 6290 if (!wasModuleEnabled && isModuleEnabled) { 6291 swiper[prop].enable(); 6292 } 6293 }); 6294 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 6295 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 6296 const wasLoop = params.loop; 6297 if (directionChanged && initialized) { 6298 swiper.changeDirection(); 6299 } 6300 extend(swiper.params, breakpointParams); 6301 const isEnabled = swiper.params.enabled; 6302 const hasLoop = swiper.params.loop; 6303 Object.assign(swiper, { 6304 allowTouchMove: swiper.params.allowTouchMove, 6305 allowSlideNext: swiper.params.allowSlideNext, 6306 allowSlidePrev: swiper.params.allowSlidePrev 6307 }); 6308 if (wasEnabled && !isEnabled) { 6309 swiper.disable(); 6310 } else if (!wasEnabled && isEnabled) { 6311 swiper.enable(); 6312 } 6313 swiper.currentBreakpoint = breakpoint; 6314 swiper.emit('_beforeBreakpoint', breakpointParams); 6315 if (initialized) { 6316 if (needsReLoop) { 6317 swiper.loopDestroy(); 6318 swiper.loopCreate(realIndex); 6319 swiper.updateSlides(); 6320 } else if (!wasLoop && hasLoop) { 6321 swiper.loopCreate(realIndex); 6322 swiper.updateSlides(); 6323 } else if (wasLoop && !hasLoop) { 6324 swiper.loopDestroy(); 6325 } 6326 } 6327 swiper.emit('breakpoint', breakpointParams); 6328 } 6329 6330 function getBreakpoint(breakpoints, base, containerEl) { 6331 if (base === void 0) { 6332 base = 'window'; 6333 } 6334 if (!breakpoints || base === 'container' && !containerEl) return undefined; 6335 let breakpoint = false; 6336 const window = getWindow
vendor: 2,470 bytes, lines 6336-6431
6336(); 6337 const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; 6338 const points = Object.keys(breakpoints).map(point => { 6339 if (typeof point === 'string' && point.indexOf('@') === 0) { 6340 const minRatio = parseFloat(point.substr(1)); 6341 const value = currentHeight * minRatio; 6342 return { 6343 value, 6344 point 6345 }; 6346 } 6347 return { 6348 value: point, 6349 point 6350 }; 6351 }); 6352 points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); 6353 for (let i = 0; i < points.length; i += 1) { 6354 const { 6355 point, 6356 value 6357 } = points[i]; 6358 if (base === 'window') { 6359 if (window.matchMedia(`(min-width: ${value}px)`).matches) { 6360 breakpoint = point; 6361 } 6362 } else if (value <= containerEl.clientWidth) { 6363 breakpoint = point; 6364 } 6365 } 6366 return breakpoint || 'max'; 6367 } 6368 6369 var breakpoints = { 6370 setBreakpoint, 6371 getBreakpoint 6372 }; 6373 6374 function prepareClasses(entries, prefix) { 6375 const resultClasses = []; 6376 entries.forEach(item => { 6377 if (typeof item === 'object') { 6378 Object.keys(item).forEach(classNames => { 6379 if (item[classNames]) { 6380 resultClasses.push(prefix + classNames); 6381 } 6382 }); 6383 } else if (typeof item === 'string') { 6384 resultClasses.push(prefix + item); 6385 } 6386 }); 6387 return resultClasses; 6388 } 6389 function addClasses() { 6390 const swiper = this; 6391 const { 6392 classNames, 6393 params, 6394 rtl, 6395 el, 6396 device 6397 } = swiper; 6398 // prettier-ignore 6399 const suffixes = prepareClasses(['initialized', params.direction, { 6400 'free-mode': swiper.params.freeMode && params.freeMode.enabled 6401 }, { 6402 'autoheight': params.autoHeight 6403 }, { 6404 'rtl': rtl 6405 }, { 6406 'grid': params.grid && params.grid.rows > 1 6407 }, { 6408 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' 6409 }, { 6410 'android': device.android 6411 }, { 6412 'ios': device.ios 6413 }, { 6414 'css-mode': params.cssMode 6415 }, { 6416 'centered': params.cssMode && params.centeredSlides 6417 }, { 6418 'watch-progress': params.watchSlidesProgress 6419 }], params.containerModifierClass); 6420 classNames.push(...suffixes); 6421 el.classList.add(...classNames); 6422 swiper.emitContainerClasses(); 6423 } 6424 6425 function removeClasses() { 6426 const swiper = this; 6427 const { 6428 el, 6429 classNames 6430 } = swiper; 6431
vendor: 2,083 bytes, lines 6431-6509
6431el.classList.remove(...classNames); 6432 swiper.emitContainerClasses(); 6433 } 6434 6435 var classes = { 6436 addClasses, 6437 removeClasses 6438 }; 6439 6440 function checkOverflow() { 6441 const swiper = this; 6442 const { 6443 isLocked: wasLocked, 6444 params 6445 } = swiper; 6446 const { 6447 slidesOffsetBefore 6448 } = params; 6449 if (slidesOffsetBefore) { 6450 const lastSlideIndex = swiper.slides.length - 1; 6451 const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; 6452 swiper.isLocked = swiper.size > lastSlideRightEdge; 6453 } else { 6454 swiper.isLocked = swiper.snapGrid.length === 1; 6455 } 6456 if (params.allowSlideNext === true) { 6457 swiper.allowSlideNext = !swiper.isLocked; 6458 } 6459 if (params.allowSlidePrev === true) { 6460 swiper.allowSlidePrev = !swiper.isLocked; 6461 } 6462 if (wasLocked && wasLocked !== swiper.isLocked) { 6463 swiper.isEnd = false; 6464 } 6465 if (wasLocked !== swiper.isLocked) { 6466 swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 6467 } 6468 } 6469 var checkOverflow$1 = { 6470 checkOverflow 6471 }; 6472 6473 var defaults = { 6474 init: true, 6475 direction: 'horizontal', 6476 oneWayMovement: false, 6477 swiperElementNodeName: 'SWIPER-CONTAINER', 6478 touchEventsTarget: 'wrapper', 6479 initialSlide: 0, 6480 speed: 300, 6481 cssMode: false, 6482 updateOnWindowResize: true, 6483 resizeObserver: true, 6484 nested: false, 6485 createElements: false, 6486 eventsPrefix: 'swiper', 6487 enabled: true, 6488 focusableElements: 'input, select, option, textarea, button, video, label', 6489 // Overrides 6490 width: null, 6491 height: null, 6492 // 6493 preventInteractionOnTransition: false, 6494 // ssr 6495 userAgent: null, 6496 url: null, 6497 // To support iOS's swipe-to-go-back gesture (when being used in-app). 6498 edgeSwipeDetection: false, 6499 edgeSwipeThreshold: 20, 6500 // Autoheight 6501 autoHeight: false, 6502 // Set wrapper width 6503 setWrapperSize: false, 6504 // Virtual Translate 6505 virtualTranslate: false, 6506 // Effects 6507 effect: 'slide', 6508 // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' 6509
vendor: 4,199 bytes, lines 6510-6653
6510 // Breakpoints 6511 breakpoints: undefined, 6512 breakpointsBase: 'window', 6513 // Slides grid 6514 spaceBetween: 0, 6515 slidesPerView: 1, 6516 slidesPerGroup: 1, 6517 slidesPerGroupSkip: 0, 6518 slidesPerGroupAuto: false, 6519 centeredSlides: false, 6520 centeredSlidesBounds: false, 6521 slidesOffsetBefore: 0, 6522 // in px 6523 slidesOffsetAfter: 0, 6524 // in px 6525 normalizeSlideIndex: true, 6526 centerInsufficientSlides: false, 6527 // Disable swiper and hide navigation when container not overflow 6528 watchOverflow: true, 6529 // Round length 6530 roundLengths: false, 6531 // Touches 6532 touchRatio: 1, 6533 touchAngle: 45, 6534 simulateTouch: true, 6535 shortSwipes: true, 6536 longSwipes: true, 6537 longSwipesRatio: 0.5, 6538 longSwipesMs: 300, 6539 followFinger: true, 6540 allowTouchMove: true, 6541 threshold: 5, 6542 touchMoveStopPropagation: false, 6543 touchStartPreventDefault: true, 6544 touchStartForcePreventDefault: false, 6545 touchReleaseOnEdges: false, 6546 // Unique Navigation Elements 6547 uniqueNavElements: true, 6548 // Resistance 6549 resistance: true, 6550 resistanceRatio: 0.85, 6551 // Progress 6552 watchSlidesProgress: false, 6553 // Cursor 6554 grabCursor: false, 6555 // Clicks 6556 preventClicks: true, 6557 preventClicksPropagation: true, 6558 slideToClickedSlide: false, 6559 // loop 6560 loop: false, 6561 loopAddBlankSlides: true, 6562 loopAdditionalSlides: 0, 6563 loopPreventsSliding: true, 6564 // rewind 6565 rewind: false, 6566 // Swiping/no swiping 6567 allowSlidePrev: true, 6568 allowSlideNext: true, 6569 swipeHandler: null, 6570 // '.swipe-handler', 6571 noSwiping: true, 6572 noSwipingClass: 'swiper-no-swiping', 6573 noSwipingSelector: null, 6574 // Passive Listeners 6575 passiveListeners: true, 6576 maxBackfaceHiddenSlides: 10, 6577 // NS 6578 containerModifierClass: 'swiper-', 6579 // NEW 6580 slideClass: 'swiper-slide', 6581 slideBlankClass: 'swiper-slide-blank', 6582 slideActiveClass: 'swiper-slide-active', 6583 slideVisibleClass: 'swiper-slide-visible', 6584 slideFullyVisibleClass: 'swiper-slide-fully-visible', 6585 slideNextClass: 'swiper-slide-next', 6586 slidePrevClass: 'swiper-slide-prev', 6587 wrapperClass: 'swiper-wrapper', 6588 lazyPreloaderClass: 'swiper-lazy-preloader', 6589 lazyPreloadPrevNext: 0, 6590 // Callbacks 6591 runCallbacksOnInit: true, 6592 // Internals 6593 _emitClasses: false 6594 }; 6595 6596 function moduleExtendParams(params, allModulesParams) { 6597 return function extendParams(obj) { 6598 if (obj === void 0) { 6599 obj = {}; 6600 } 6601 const moduleParamName = Object.keys(obj)[0]; 6602 const moduleParams = obj[moduleParamName]; 6603 if (typeof moduleParams !== 'object' || moduleParams === null) { 6604 extend(allModulesParams, obj); 6605 return; 6606 } 6607 if (params[moduleParamName] === true) { 6608 params[moduleParamName] = { 6609 enabled: true 6610 }; 6611 } 6612 if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) { 6613 params[moduleParamName].auto = true; 6614 } 6615 if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) { 6616 params[moduleParamName].auto = true; 6617 } 6618 if (!(moduleParamName in params && 'enabled' in moduleParams)) { 6619 extend(allModulesParams, obj); 6620 return; 6621 } 6622 if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { 6623 params[moduleParamName].enabled = true; 6624 } 6625 if (!params[moduleParamName]) params[moduleParamName] = { 6626 enabled: false 6627 }; 6628 extend(allModulesParams, obj); 6629 }; 6630 } 6631 6632 /* eslint no-param-reassign: "off" */ 6633 const prototypes = { 6634 eventsEmitter, 6635 update, 6636 translate, 6637 transition, 6638 slide, 6639 loop, 6640 grabCursor, 6641 events: events$1, 6642 breakpoints, 6643 checkOverflow: checkOverflow$1, 6644 classes 6645 }; 6646 const extendedDefaults = {}; 6647 class Swiper { 6648 constructor() { 6649 let el; 6650 let params; 6651 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 6652 args[_key] = arguments[_key]; 6653 }
vendor: 2,062 bytes, lines 6654-6711
6654 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { 6655 params = args[0]; 6656 } else { 6657 [el, params] = args; 6658 } 6659 if (!params) params = {}; 6660 params = extend({}, params); 6661 if (el && !params.el) params.el = el; 6662 const document = getDocument(); 6663 if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) { 6664 const swipers = []; 6665 document.querySelectorAll(params.el).forEach(containerEl => { 6666 const newParams = extend({}, params, { 6667 el: containerEl 6668 }); 6669 swipers.push(new Swiper(newParams)); 6670 }); 6671 // eslint-disable-next-line no-constructor-return 6672 return swipers; 6673 } 6674 6675 // Swiper Instance 6676 const swiper = this; 6677 swiper.__swiper__ = true; 6678 swiper.support = getSupport(); 6679 swiper.device = getDevice({ 6680 userAgent: params.userAgent 6681 }); 6682 swiper.browser = getBrowser(); 6683 swiper.eventsListeners = {}; 6684 swiper.eventsAnyListeners = []; 6685 swiper.modules = [...swiper.__modules__]; 6686 if (params.modules && Array.isArray(params.modules)) { 6687 swiper.modules.push(...params.modules); 6688 } 6689 const allModulesParams = {}; 6690 swiper.modules.forEach(mod => { 6691 mod({ 6692 params, 6693 swiper, 6694 extendParams: moduleExtendParams(params, allModulesParams), 6695 on: swiper.on.bind(swiper), 6696 once: swiper.once.bind(swiper), 6697 off: swiper.off.bind(swiper), 6698 emit: swiper.emit.bind(swiper) 6699 }); 6700 }); 6701 6702 // Extend defaults with modules params 6703 const swiperParams = extend({}, defaults, allModulesParams); 6704 6705 // Extend defaults with passed params 6706 swiper.params = extend({}, swiperParams, extendedDefaults, params); 6707 swiper.originalParams = extend({}, swiper.params); 6708 swiper.passedParams = extend({}, params); 6709 6710 // add event listeners 6711 if (swiper.params && swiper.params.on) {
vendor: 3,531 bytes, lines 6712-6832
6712 Object.keys(swiper.params.on).forEach(eventName => { 6713 swiper.on(eventName, swiper.params.on[eventName]); 6714 }); 6715 } 6716 if (swiper.params && swiper.params.onAny) { 6717 swiper.onAny(swiper.params.onAny); 6718 } 6719 6720 // Extend Swiper 6721 Object.assign(swiper, { 6722 enabled: swiper.params.enabled, 6723 el, 6724 // Classes 6725 classNames: [], 6726 // Slides 6727 slides: [], 6728 slidesGrid: [], 6729 snapGrid: [], 6730 slidesSizesGrid: [], 6731 // isDirection 6732 isHorizontal() { 6733 return swiper.params.direction === 'horizontal'; 6734 }, 6735 isVertical() { 6736 return swiper.params.direction === 'vertical'; 6737 }, 6738 // Indexes 6739 activeIndex: 0, 6740 realIndex: 0, 6741 // 6742 isBeginning: true, 6743 isEnd: false, 6744 // Props 6745 translate: 0, 6746 previousTranslate: 0, 6747 progress: 0, 6748 velocity: 0, 6749 animating: false, 6750 cssOverflowAdjustment() { 6751 // Returns 0 unless `translate` is > 2**23 6752 // Should be subtracted from css values to prevent overflow 6753 return Math.trunc(this.translate / 2 ** 23) * 2 ** 23; 6754 }, 6755 // Locks 6756 allowSlideNext: swiper.params.allowSlideNext, 6757 allowSlidePrev: swiper.params.allowSlidePrev, 6758 // Touch Events 6759 touchEventsData: { 6760 isTouched: undefined, 6761 isMoved: undefined, 6762 allowTouchCallbacks: undefined, 6763 touchStartTime: undefined, 6764 isScrolling: undefined, 6765 currentTranslate: undefined, 6766 startTranslate: undefined, 6767 allowThresholdMove: undefined, 6768 // Form elements to match 6769 focusableElements: swiper.params.focusableElements, 6770 // Last click time 6771 lastClickTime: 0, 6772 clickTimeout: undefined, 6773 // Velocities 6774 velocities: [], 6775 allowMomentumBounce: undefined, 6776 startMoving: undefined, 6777 pointerId: null, 6778 touchId: null 6779 }, 6780 // Clicks 6781 allowClick: true, 6782 // Touches 6783 allowTouchMove: swiper.params.allowTouchMove, 6784 touches: { 6785 startX: 0, 6786 startY: 0, 6787 currentX: 0, 6788 currentY: 0, 6789 diff: 0 6790 }, 6791 // Images 6792 imagesToLoad: [], 6793 imagesLoaded: 0 6794 }); 6795 swiper.emit('_swiper'); 6796 6797 // Init 6798 if (swiper.params.init) { 6799 swiper.init(); 6800 } 6801 6802 // Return app instance 6803 // eslint-disable-next-line no-constructor-return 6804 return swiper; 6805 } 6806 getDirectionLabel(property) { 6807 if (this.isHorizontal()) { 6808 return property; 6809 } 6810 // prettier-ignore 6811 return { 6812 'width': 'height', 6813 'margin-top': 'margin-left', 6814 'margin-bottom ': 'margin-right', 6815 'margin-left': 'margin-top', 6816 'margin-right': 'margin-bottom', 6817 'padding-left': 'padding-top', 6818 'padding-right': 'padding-bottom', 6819 'marginRight': 'marginBottom' 6820 }[property]; 6821 } 6822 getSlideIndex(slideEl) { 6823 const { 6824 slidesEl, 6825 params 6826 } = this; 6827 const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 6828 const firstSlideIndex = elementIndex(slides[0]); 6829 return elementIndex(slideEl) - firstSlideIndex; 6830 } 6831 getSlideIndexByData(index) { 6832 return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0])
vendor: 8,478 bytes, lines 6832-7076
6832; 6833 } 6834 recalcSlides() { 6835 const swiper = this; 6836 const { 6837 slidesEl, 6838 params 6839 } = swiper; 6840 swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 6841 } 6842 enable() { 6843 const swiper = this; 6844 if (swiper.enabled) return; 6845 swiper.enabled = true; 6846 if (swiper.params.grabCursor) { 6847 swiper.setGrabCursor(); 6848 } 6849 swiper.emit('enable'); 6850 } 6851 disable() { 6852 const swiper = this; 6853 if (!swiper.enabled) return; 6854 swiper.enabled = false; 6855 if (swiper.params.grabCursor) { 6856 swiper.unsetGrabCursor(); 6857 } 6858 swiper.emit('disable'); 6859 } 6860 setProgress(progress, speed) { 6861 const swiper = this; 6862 progress = Math.min(Math.max(progress, 0), 1); 6863 const min = swiper.minTranslate(); 6864 const max = swiper.maxTranslate(); 6865 const current = (max - min) * progress + min; 6866 swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); 6867 swiper.updateActiveIndex(); 6868 swiper.updateSlidesClasses(); 6869 } 6870 emitContainerClasses() { 6871 const swiper = this; 6872 if (!swiper.params._emitClasses || !swiper.el) return; 6873 const cls = swiper.el.className.split(' ').filter(className => { 6874 return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 6875 }); 6876 swiper.emit('_containerClasses', cls.join(' ')); 6877 } 6878 getSlideClasses(slideEl) { 6879 const swiper = this; 6880 if (swiper.destroyed) return ''; 6881 return slideEl.className.split(' ').filter(className => { 6882 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 6883 }).join(' '); 6884 } 6885 emitSlidesClasses() { 6886 const swiper = this; 6887 if (!swiper.params._emitClasses || !swiper.el) return; 6888 const updates = []; 6889 swiper.slides.forEach(slideEl => { 6890 const classNames = swiper.getSlideClasses(slideEl); 6891 updates.push({ 6892 slideEl, 6893 classNames 6894 }); 6895 swiper.emit('_slideClass', slideEl, classNames); 6896 }); 6897 swiper.emit('_slideClasses', updates); 6898 } 6899 slidesPerViewDynamic(view, exact) { 6900 if (view === void 0) { 6901 view = 'current'; 6902 } 6903 if (exact === void 0) { 6904 exact = false; 6905 } 6906 const swiper = this; 6907 const { 6908 params, 6909 slides, 6910 slidesGrid, 6911 slidesSizesGrid, 6912 size: swiperSize, 6913 activeIndex 6914 } = swiper; 6915 let spv = 1; 6916 if (typeof params.slidesPerView === 'number') return params.slidesPerView; 6917 if (params.centeredSlides) { 6918 let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0; 6919 let breakLoop; 6920 for (let i = activeIndex + 1; i < slides.length; i += 1) { 6921 if (slides[i] && !breakLoop) { 6922 slideSize += Math.ceil(slides[i].swiperSlideSize); 6923 spv += 1; 6924 if (slideSize > swiperSize) breakLoop = true; 6925 } 6926 } 6927 for (let i = activeIndex - 1; i >= 0; i -= 1) { 6928 if (slides[i] && !breakLoop) { 6929 slideSize += slides[i].swiperSlideSize; 6930 spv += 1; 6931 if (slideSize > swiperSize) breakLoop = true; 6932 } 6933 } 6934 } else { 6935 // eslint-disable-next-line 6936 if (view === 'current') { 6937 for (let i = activeIndex + 1; i < slides.length; i += 1) { 6938 const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; 6939 if (slideInView) { 6940 spv += 1; 6941 } 6942 } 6943 } else { 6944 // previous 6945 for (let i = activeIndex - 1; i >= 0; i -= 1) { 6946 const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; 6947 if (slideInView) { 6948 spv += 1; 6949 } 6950 } 6951 } 6952 } 6953 return spv; 6954 } 6955 update() { 6956 const swiper = this; 6957 if (!swiper || swiper.destroyed) return; 6958 const { 6959 snapGrid, 6960 params 6961 } = swiper; 6962 // Breakpoints 6963 if (params.breakpoints) { 6964 swiper.setBreakpoint(); 6965 } 6966 [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => { 6967 if (imageEl.complete) { 6968 processLazyPreloader(swiper, imageEl); 6969 } 6970 }); 6971 swiper.updateSize(); 6972 swiper.updateSlides(); 6973 swiper.updateProgress(); 6974 swiper.updateSlidesClasses(); 6975 function setTranslate() { 6976 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 6977 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 6978 swiper.setTranslate(newTranslate); 6979 swiper.updateActiveIndex(); 6980 swiper.updateSlidesClasses(); 6981 } 6982 let translated; 6983 if (params.freeMode && params.freeMode.enabled && !params.cssMode) { 6984 setTranslate(); 6985 if (params.autoHeight) { 6986 swiper.updateAutoHeight(); 6987 } 6988 } else { 6989 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) { 6990 const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides; 6991 translated = swiper.slideTo(slides.length - 1, 0, false, true); 6992 } else { 6993 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 6994 } 6995 if (!translated) { 6996 setTranslate(); 6997 } 6998 } 6999 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 7000 swiper.checkOverflow(); 7001 } 7002 swiper.emit('update'); 7003 } 7004 changeDirection(newDirection, needUpdate) { 7005 if (needUpdate === void 0) { 7006 needUpdate = true; 7007 } 7008 const swiper = this; 7009 const currentDirection = swiper.params.direction; 7010 if (!newDirection) { 7011 // eslint-disable-next-line 7012 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 7013 } 7014 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 7015 return swiper; 7016 } 7017 swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`); 7018 swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`); 7019 swiper.emitContainerClasses(); 7020 swiper.params.direction = newDirection; 7021 swiper.slides.forEach(slideEl => { 7022 if (newDirection === 'vertical') { 7023 slideEl.style.width = ''; 7024 } else { 7025 slideEl.style.height = ''; 7026 } 7027 }); 7028 swiper.emit('changeDirection'); 7029 if (needUpdate) swiper.update(); 7030 return swiper; 7031 } 7032 changeLanguageDirection(direction) { 7033 const swiper = this; 7034 if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return; 7035 swiper.rtl = direction === 'rtl'; 7036 swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl; 7037 if (swiper.rtl) { 7038 swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`); 7039 swiper.el.dir = 'rtl'; 7040 } else { 7041 swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`); 7042 swiper.el.dir = 'ltr'; 7043 } 7044 swiper.update(); 7045 } 7046 mount(element) { 7047 const swiper = this; 7048 if (swiper.mounted) return true; 7049 7050 // Find el 7051 let el = element || swiper.params.el; 7052 if (typeof el === 'string') { 7053 el = document.querySelector(el); 7054 } 7055 if (!el) { 7056 return false; 7057 } 7058 el.swiper = swiper; 7059 if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) { 7060 swiper.isElement = true; 7061 } 7062 const getWrapperSelector = () => { 7063 return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`; 7064 }; 7065 const getWrapper = () => { 7066 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 7067 const res = el.shadowRoot.querySelector(getWrapperSelector()); 7068 // Children needs to return slot items 7069 return res; 7070 } 7071 return elementChildren(el, getWrapperSelector())[0]; 7072 }; 7073 // Find Wrapper 7074 let wrapperEl = getWrapper(); 7075 if (!wrapperEl && swiper.params.createElements) { 7076 wrapperEl = createElement
7076('div', swiper.params.wrapperClass); 7077 el.append(wrapperEl); 7078 elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => { 7079 wrapperEl.append(slideEl); 7080 }); 7081 } 7082 Object.assign(swiper, { 7083 el, 7084 wrapperEl, 7085 slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl, 7086 hostEl: swiper.isElement ? el.parentNode.host : el, 7087 mounted: true, 7088 // RTL 7089 rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl', 7090 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'), 7091 wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box' 7092 }); 7093 return true; 7094 } 7095 init(el) { 7096 const swiper = this; 7097 if (swiper.initialized) return swiper; 7098 const mounted = swiper.mount(el); 7099 if (mounted === false) return swiper; 7100 swiper.emit('beforeInit'); 7101 7102 // Set breakpoint 7103 if (swiper.params.breakpoints) { 7104 swiper.setBreakpoint(); 7105 } 7106 7107 // Add Classes 7108 swiper.addClasses(); 7109 7110 // Update size 7111 swiper.updateSize(); 7112 7113 // Update slides 7114 swiper.updateSlides(); 7115 if (swiper.params.watchOverflow) { 7116 swiper.checkOverflow(); 7117 } 7118 7119 // Set Grab Cursor 7120 if (swiper.params.grabCursor && swiper.enabled) { 7121 swiper.setGrabCursor(); 7122 } 7123 7124 // Slide To Initial Slide 7125 if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 7126 swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true); 7127 } else { 7128 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 7129 } 7130 7131 // Create loop 7132 if (swiper.params.loop) { 7133 swiper.loopCreate(); 7134 } 7135 7136 // Attach events 7137 swiper.attachEvents(); 7138 const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')]; 7139 if (swiper.isElement) { 7140 lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]')); 7141 } 7142 lazyElements.forEach(imageEl => { 7143 if (imageEl.complete) { 7144 processLazyPreloader(swiper, imageEl); 7145 } else { 7146 imageEl.addEventListener('load', e => { 7147 processLazyPreloader(swiper, e.target); 7148 }); 7149 } 7150 }); 7151 preload(swiper); 7152 7153 // Init Flag 7154 swiper.initialized = true; 7155 preload(swiper); 7156 7157 // Emit 7158 swiper.emit('init'); 7159 swiper.emit('afterInit'); 7160 return swiper; 7161 } 7162 destroy(deleteInstance, cleanStyles) { 7163 if (deleteInstance === void 0) { 7164 deleteInstance = true; 7165 } 7166 if (cleanStyles === void 0) { 7167 cleanStyles = true; 7168 } 7169 const swiper = this; 7170 const { 7171 params, 7172 el, 7173 wrapperEl, 7174 slides 7175 } = swiper; 7176 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 7177 return null; 7178 } 7179 swiper.emit('beforeDestroy'); 7180 7181 // Init Flag 7182 swiper.initialized = false; 7183 7184 // Detach events 7185 swiper.detachEvents(); 7186 7187 // Destroy loop 7188 if (params.loop) { 7189 swiper.loopDestroy(); 7190 } 7191 7192 // Cleanup styles 7193 if (cleanStyles) { 7194 swiper.removeClasses(); 7195 el.removeAttribute('style'); 7196 wrapperEl.removeAttribute('style'); 7197 if (slides && slides.length) {
7198 slides.forEach(slideEl => { 7199 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 7200 slideEl.removeAttribute('style'); 7201 slideEl.removeAttribute('data-swiper-slide-index'); 7202 }); 7203 } 7204 } 7205 swiper.emit('destroy'); 7206 7207 // Detach emitter events 7208 Object.keys(swiper.eventsListeners).forEach(eventName => { 7209 swiper.off(eventName); 7210 }); 7211 if (deleteInstance !== false) { 7212 swiper.el.swiper = null; 7213 deleteProps(swiper); 7214 } 7215 swiper.destroyed = true; 7216 return null; 7217 } 7218 static extendDefaults(newDefaults) { 7219 extend(extendedDefaults, newDefaults); 7220 } 7221 static get extendedDefaults() { 7222 return extendedDefaults; 7223 } 7224 static get defaults() { 7225 return defaults; 7226 } 7227 static installModule(mod) { 7228 if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; 7229 const modules = Swiper.prototype.__modules__; 7230 if (typeof mod === 'function' && modules.indexOf(mod) < 0) { 7231 modules.push(mod); 7232 } 7233 } 7234 static use(module) { 7235 if (Array.isArray(module)) { 7236 module.forEach(m => Swiper.installModule(m)); 7237 return Swiper; 7238 } 7239 Swiper.installModule(module); 7240 return Swiper; 7241 } 7242 } 7243 Object.keys(prototypes).forEach(prototypeGroup => { 7244 Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => { 7245 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 7246 }); 7247 }); 7248 Swiper.use([Resize, Observer]); 7249 7250 function Virtual(_ref) { 7251 let { 7252 swiper, 7253 extendParams, 7254 on, 7255 emit 7256 } = _ref; 7257 extendParams({ 7258 virtual: { 7259 enabled: false, 7260 slides: [], 7261 cache: true, 7262 renderSlide: null, 7263 renderExternal: null, 7264 renderExternalUpdate: true, 7265 addSlidesBefore: 0, 7266 addSlidesAfter: 0 7267 } 7268 }); 7269 let cssModeTimeout; 7270 const document = getDocument(); 7271 swiper.virtual = { 7272 cache: {}, 7273 from: undefined, 7274 to: undefined, 7275 slides: [], 7276 offset: 0, 7277 slidesGrid: [] 7278 }; 7279 const tempDOM = document.createElement('div');
7280 function renderSlide(slide, index) { 7281 const params = swiper.params.virtual; 7282 if (params.cache && swiper.virtual.cache[index]) { 7283 return swiper.virtual.cache[index]; 7284 } 7285 // eslint-disable-next-line 7286 let slideEl; 7287 if (params.renderSlide) { 7288 slideEl = params.renderSlide.call(swiper, slide, index); 7289 if (typeof slideEl === 'string') { 7290 tempDOM.innerHTML = slideEl; 7291 slideEl = tempDOM.children[0]; 7292 } 7293 } else if (swiper.isElement) { 7294 slideEl = createElement('swiper-slide'); 7295 } else { 7296 slideEl = createElement('div', swiper.params.slideClass); 7297 } 7298 slideEl.setAttribute('data-swiper-slide-index', index); 7299 if (!params.renderSlide) { 7300 slideEl.innerHTML = slide; 7301 } 7302 if (params.cache) { 7303 swiper.virtual.cache[index] = slideEl; 7304 } 7305 return slideEl; 7306 } 7307 function update(force) { 7308 const { 7309 slidesPerView, 7310 slidesPerGroup, 7311 centeredSlides, 7312 loop: isLoop 7313 } = swiper.params; 7314 const { 7315 addSlidesBefore, 7316 addSlidesAfter 7317 } = swiper.params.virtual; 7318 const { 7319 from: previousFrom, 7320 to: previousTo, 7321 slides, 7322 slidesGrid: previousSlidesGrid, 7323 offset: previousOffset 7324 } = swiper.virtual; 7325 if (!swiper.params.cssMode) { 7326 swiper.updateActiveIndex(); 7327 } 7328 const activeIndex = swiper.activeIndex || 0; 7329 let offsetProp; 7330 if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 7331 let slidesAfter; 7332 let slidesBefore; 7333 if (centeredSlides) { 7334 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 7335 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 7336 } else { 7337 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; 7338 slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore; 7339 } 7340 let from = activeIndex - slidesBefore; 7341 let to = activeIndex + slidesAfter; 7342 if (!isLoop) { 7343 from = Math.max(from, 0); 7344 to = Math.min(to, slides.length - 1); 7345 } 7346 let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 7347 if (isLoop && activeIndex >= slidesBefore) { 7348 from -= slidesBefore; 7349 if (!centeredSlides) offset += swiper.slidesGrid[0]; 7350 } else if (isLoop && activeIndex < slidesBefore) { 7351 from = -slidesBefore; 7352 if (centeredSlides) offset += swiper.slidesGrid[0]; 7353 } 7354 Object.assign(swiper.virtual, { 7355 from, 7356 to, 7357 offset, 7358 slidesGrid: swiper.slidesGrid, 7359 slidesBefore, 7360 slidesAfter 7361 }); 7362 function onRendered() { 7363 swiper.updateSlides(); 7364 swiper.updateProgress(); 7365 swiper.updateSlidesClasses(); 7366 emit('virtualUpdate'); 7367 } 7368 if (previousFrom === from && previousTo === to && !force) { 7369 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
vendor: 1,316 bytes, lines 7370-7411
7370 swiper.slides.forEach(slideEl => { 7371 slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`; 7372 }); 7373 } 7374 swiper.updateProgress(); 7375 emit('virtualUpdate'); 7376 return; 7377 } 7378 if (swiper.params.virtual.renderExternal) { 7379 swiper.params.virtual.renderExternal.call(swiper, { 7380 offset, 7381 from, 7382 to, 7383 slides: function getSlides() { 7384 const slidesToRender = []; 7385 for (let i = from; i <= to; i += 1) { 7386 slidesToRender.push(slides[i]); 7387 } 7388 return slidesToRender; 7389 }() 7390 }); 7391 if (swiper.params.virtual.renderExternalUpdate) { 7392 onRendered(); 7393 } else { 7394 emit('virtualUpdate'); 7395 } 7396 return; 7397 } 7398 const prependIndexes = []; 7399 const appendIndexes = []; 7400 const getSlideIndex = index => { 7401 let slideIndex = index; 7402 if (index < 0) { 7403 slideIndex = slides.length + index; 7404 } else if (slideIndex >= slides.length) { 7405 // eslint-disable-next-line 7406 slideIndex = slideIndex - slides.length; 7407 } 7408 return slideIndex; 7409 }; 7410 if (force) { 7411 swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}
7411, swiper-slide`)).forEach(slideEl => { 7412 slideEl.remove(); 7413 }); 7414 } else { 7415 for (let i = previousFrom; i <= previousTo; i += 1) { 7416 if (i < from || i > to) { 7417 const slideIndex = getSlideIndex(i); 7418 swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`)).forEach(slideEl => { 7419 slideEl.remove(); 7420 }); 7421 } 7422 } 7423 } 7424 const loopFrom = isLoop ? -slides.length : 0; 7425 const loopTo = isLoop ? slides.length * 2 : slides.length; 7426 for (let i = loopFrom; i < loopTo; i += 1) { 7427 if (i >= from && i <= to) { 7428 const slideIndex = getSlideIndex(i); 7429 if (typeof previousTo === 'undefined' || force) { 7430 appendIndexes.push(slideIndex); 7431 } else { 7432 if (i > previousTo) appendIndexes.push(slideIndex); 7433 if (i < previousFrom) prependIndexes.push(slideIndex); 7434 } 7435 } 7436 } 7437 appendIndexes.forEach(index => { 7438 swiper.slidesEl.append(renderSlide(slides[index], index)); 7439 }); 7440 if (isLoop) { 7441 for (let i = prependIndexes.length - 1; i >= 0; i -= 1) { 7442 const index = prependIndexes[i]; 7443 swiper.slidesEl.prepend(renderSlide(slides[index], index)); 7444 } 7445 } else { 7446 prependIndexes.sort((a, b) => b - a); 7447 prependIndexes.forEach(index => { 7448 swiper.slidesEl.prepend(renderSlide(slides[index], index)); 7449 }); 7450 } 7451 elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(sli
vendor: 5,033 bytes, lines 7451-7581
7451deEl => { 7452 slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`; 7453 }); 7454 onRendered(); 7455 } 7456 function appendSlide(slides) { 7457 if (typeof slides === 'object' && 'length' in slides) { 7458 for (let i = 0; i < slides.length; i += 1) { 7459 if (slides[i]) swiper.virtual.slides.push(slides[i]); 7460 } 7461 } else { 7462 swiper.virtual.slides.push(slides); 7463 } 7464 update(true); 7465 } 7466 function prependSlide(slides) { 7467 const activeIndex = swiper.activeIndex; 7468 let newActiveIndex = activeIndex + 1; 7469 let numberOfNewSlides = 1; 7470 if (Array.isArray(slides)) { 7471 for (let i = 0; i < slides.length; i += 1) { 7472 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 7473 } 7474 newActiveIndex = activeIndex + slides.length; 7475 numberOfNewSlides = slides.length; 7476 } else { 7477 swiper.virtual.slides.unshift(slides); 7478 } 7479 if (swiper.params.virtual.cache) { 7480 const cache = swiper.virtual.cache; 7481 const newCache = {}; 7482 Object.keys(cache).forEach(cachedIndex => { 7483 const cachedEl = cache[cachedIndex]; 7484 const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index'); 7485 if (cachedElIndex) { 7486 cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides); 7487 } 7488 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl; 7489 }); 7490 swiper.virtual.cache = newCache; 7491 } 7492 update(true); 7493 swiper.slideTo(newActiveIndex, 0); 7494 } 7495 function removeSlide(slidesIndexes) { 7496 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 7497 let activeIndex = swiper.activeIndex; 7498 if (Array.isArray(slidesIndexes)) { 7499 for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) { 7500 if (swiper.params.virtual.cache) { 7501 delete swiper.virtual.cache[slidesIndexes[i]]; 7502 // shift cache indexes 7503 Object.keys(swiper.virtual.cache).forEach(key => { 7504 if (key > slidesIndexes) { 7505 swiper.virtual.cache[key - 1] = swiper.virtual.cache[key]; 7506 swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1); 7507 delete swiper.virtual.cache[key]; 7508 } 7509 }); 7510 } 7511 swiper.virtual.slides.splice(slidesIndexes[i], 1); 7512 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 7513 activeIndex = Math.max(activeIndex, 0); 7514 } 7515 } else { 7516 if (swiper.params.virtual.cache) { 7517 delete swiper.virtual.cache[slidesIndexes]; 7518 // shift cache indexes 7519 Object.keys(swiper.virtual.cache).forEach(key => { 7520 if (key > slidesIndexes) { 7521 swiper.virtual.cache[key - 1] = swiper.virtual.cache[key]; 7522 swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1); 7523 delete swiper.virtual.cache[key]; 7524 } 7525 }); 7526 } 7527 swiper.virtual.slides.splice(slidesIndexes, 1); 7528 if (slidesIndexes < activeIndex) activeIndex -= 1; 7529 activeIndex = Math.max(activeIndex, 0); 7530 } 7531 update(true); 7532 swiper.slideTo(activeIndex, 0); 7533 } 7534 function removeAllSlides() { 7535 swiper.virtual.slides = []; 7536 if (swiper.params.virtual.cache) { 7537 swiper.virtual.cache = {}; 7538 } 7539 update(true); 7540 swiper.slideTo(0, 0); 7541 } 7542 on('beforeInit', () => { 7543 if (!swiper.params.virtual.enabled) return; 7544 let domSlidesAssigned; 7545 if (typeof swiper.passedParams.virtual.slides === 'undefined') { 7546 const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)); 7547 if (slides && slides.length) { 7548 swiper.virtual.slides = [...slides]; 7549 domSlidesAssigned = true; 7550 slides.forEach((slideEl, slideIndex) => { 7551 slideEl.setAttribute('data-swiper-slide-index', slideIndex); 7552 swiper.virtual.cache[slideIndex] = slideEl; 7553 slideEl.remove(); 7554 }); 7555 } 7556 } 7557 if (!domSlidesAssigned) { 7558 swiper.virtual.slides = swiper.params.virtual.slides; 7559 } 7560 swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`); 7561 swiper.params.watchSlidesProgress = true; 7562 swiper.originalParams.watchSlidesProgress = true; 7563 update(); 7564 }); 7565 on('setTranslate', () => { 7566 if (!swiper.params.virtual.enabled) return; 7567 if (swiper.params.cssMode && !swiper._immediateVirtual) { 7568 clearTimeout(cssModeTimeout); 7569 cssModeTimeout = setTimeout(() => { 7570 update(); 7571 }, 100); 7572 } else { 7573 update(); 7574 } 7575 }); 7576 on('init update resize', () => { 7577 if (!swiper.params.virtual.enabled) return; 7578 if (swiper.params.cssMode) { 7579 setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`); 7580 } 7581 });
7582 Object.assign(swiper.virtual, { 7583 appendSlide, 7584 prependSlide, 7585 removeSlide, 7586 removeAllSlides, 7587 update 7588 }); 7589 } 7590 7591 /* eslint-disable consistent-return */ 7592 function Keyboard(_ref) { 7593 let { 7594 swiper, 7595 extendParams, 7596 on, 7597 emit 7598 } = _ref; 7599 const document = getDocument(); 7600 const window = getWindow(); 7601 swiper.keyboard = { 7602 enabled: false 7603 }; 7604 extendParams({ 7605 keyboard: { 7606 enabled: false, 7607 onlyInViewport: true, 7608 pageUpDown: true 7609 } 7610 }); 7611 function handle(event) { 7612 if (!swiper.enabled) return; 7613 const { 7614 rtlTranslate: rtl 7615 } = swiper; 7616 let e = event; 7617 if (e.originalEvent) e = e.originalEvent; // jquery fix 7618 const kc = e.keyCode || e.charCode; 7619 const pageUpDown = swiper.params.keyboard.pageUpDown; 7620 const isPageUp = pageUpDown && kc === 33; 7621 const isPageDown = pageUpDown && kc === 34; 7622 const isArrowLeft = kc === 37; 7623 const isArrowRight = kc === 39; 7624 const isArrowUp = kc === 38; 7625 const isArrowDown = kc === 40; 7626 // Directions locks 7627 if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { 7628 return false; 7629 } 7630 if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { 7631 return false; 7632 } 7633 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 7634 return undefined; 7635 } 7636 if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { 7637 return undefined; 7638 } 7639 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 7640 let inView = false; 7641 // Check that swiper should be inside of visible area of window 7642 if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) { 7643 return undefined; 7644 } 7645 const el = swiper.el; 7646 const swiperWidth = el.clientWidth; 7647 const swiperHeight = el.clientHeight; 7648 const windowWidth = window.innerWidth; 7649 const windowHeight = window.innerHeight; 7650 const swiperOffset = elementOffset(el); 7651 if (rtl) swiperOffset.left -= el.scrollLeft; 7652 const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]]; 7653 for (let i = 0; i < swiperCoord.length; i += 1) { 7654 const point = swiperCoord[i]; 7655 if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { 7656 if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line 7657 inView = true; 7658 } 7659 } 7660 if (!inView) return undefined; 7661 } 7662 if (swiper.isHorizontal()) { 7663 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 7664 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 7665 } 7666 if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); 7667 if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); 7668 } else { 7669 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 7670 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 7671 } 7672 if (isPageDown || isArrowDown) swiper.slideNext(); 7673 if (isPageUp || isArrowUp) swiper.slidePrev(); 7674 } 7675 emit('keyPress', kc); 7676 return undefined; 7677 } 7678 function enable() { 7679 if (swiper.keyboard.enabled) return; 7680 document.addEventListener('keydown', handle); 7681 swiper.keyboard.enabled = true; 7682 } 7683 function disable() { 7684 if (!swiper.keyboard.enabled) return; 7685 document.removeEventListener('keydown', handle); 7686 swiper.keyboard.enabled = false;
vendor: 27,355 bytes, lines 7687-8427
7687 } 7688 on('init', () => { 7689 if (swiper.params.keyboard.enabled) { 7690 enable(); 7691 } 7692 }); 7693 on('destroy', () => { 7694 if (swiper.keyboard.enabled) { 7695 disable(); 7696 } 7697 }); 7698 Object.assign(swiper.keyboard, { 7699 enable, 7700 disable 7701 }); 7702 } 7703 7704 /* eslint-disable consistent-return */ 7705 function Mousewheel(_ref) { 7706 let { 7707 swiper, 7708 extendParams, 7709 on, 7710 emit 7711 } = _ref; 7712 const window = getWindow(); 7713 extendParams({ 7714 mousewheel: { 7715 enabled: false, 7716 releaseOnEdges: false, 7717 invert: false, 7718 forceToAxis: false, 7719 sensitivity: 1, 7720 eventsTarget: 'container', 7721 thresholdDelta: null, 7722 thresholdTime: null, 7723 noMousewheelClass: 'swiper-no-mousewheel' 7724 } 7725 }); 7726 swiper.mousewheel = { 7727 enabled: false 7728 }; 7729 let timeout; 7730 let lastScrollTime = now(); 7731 let lastEventBeforeSnap; 7732 const recentWheelEvents = []; 7733 function normalize(e) { 7734 // Reasonable defaults 7735 const PIXEL_STEP = 10; 7736 const LINE_HEIGHT = 40; 7737 const PAGE_HEIGHT = 800; 7738 let sX = 0; 7739 let sY = 0; // spinX, spinY 7740 let pX = 0; 7741 let pY = 0; // pixelX, pixelY 7742 7743 // Legacy 7744 if ('detail' in e) { 7745 sY = e.detail; 7746 } 7747 if ('wheelDelta' in e) { 7748 sY = -e.wheelDelta / 120; 7749 } 7750 if ('wheelDeltaY' in e) { 7751 sY = -e.wheelDeltaY / 120; 7752 } 7753 if ('wheelDeltaX' in e) { 7754 sX = -e.wheelDeltaX / 120; 7755 } 7756 7757 // side scrolling on FF with DOMMouseScroll 7758 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 7759 sX = sY; 7760 sY = 0; 7761 } 7762 pX = sX * PIXEL_STEP; 7763 pY = sY * PIXEL_STEP; 7764 if ('deltaY' in e) { 7765 pY = e.deltaY; 7766 } 7767 if ('deltaX' in e) { 7768 pX = e.deltaX; 7769 } 7770 if (e.shiftKey && !pX) { 7771 // if user scrolls with shift he wants horizontal scroll 7772 pX = pY; 7773 pY = 0; 7774 } 7775 if ((pX || pY) && e.deltaMode) { 7776 if (e.deltaMode === 1) { 7777 // delta in LINE units 7778 pX *= LINE_HEIGHT; 7779 pY *= LINE_HEIGHT; 7780 } else { 7781 // delta in PAGE units 7782 pX *= PAGE_HEIGHT; 7783 pY *= PAGE_HEIGHT; 7784 } 7785 } 7786 7787 // Fall-back if spin cannot be determined 7788 if (pX && !sX) { 7789 sX = pX < 1 ? -1 : 1; 7790 } 7791 if (pY && !sY) { 7792 sY = pY < 1 ? -1 : 1; 7793 } 7794 return { 7795 spinX: sX, 7796 spinY: sY, 7797 pixelX: pX, 7798 pixelY: pY 7799 }; 7800 } 7801 function handleMouseEnter() { 7802 if (!swiper.enabled) return; 7803 swiper.mouseEntered = true; 7804 } 7805 function handleMouseLeave() { 7806 if (!swiper.enabled) return; 7807 swiper.mouseEntered = false; 7808 } 7809 function animateSlider(newEvent) { 7810 if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) { 7811 // Prevent if delta of wheel scroll delta is below configured threshold 7812 return false; 7813 } 7814 if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) { 7815 // Prevent if time between scrolls is below configured threshold 7816 return false; 7817 } 7818 7819 // If the movement is NOT big enough and 7820 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 7821 // Don't go any further (avoid insignificant scroll movement). 7822 if (newEvent.delta >= 6 && now() - lastScrollTime < 60) { 7823 // Return false as a default 7824 return true; 7825 } 7826 // If user is scrolling towards the end: 7827 // If the slider hasn't hit the latest slide or 7828 // if the slider is a loop and 7829 // if the slider isn't moving right now: 7830 // Go to next slide and 7831 // emit a scroll event. 7832 // Else (the user is scrolling towards the beginning) and 7833 // if the slider hasn't hit the first slide or 7834 // if the slider is a loop and 7835 // if the slider isn't moving right now: 7836 // Go to prev slide and 7837 // emit a scroll event. 7838 if (newEvent.direction < 0) { 7839 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 7840 swiper.slideNext(); 7841 emit('scroll', newEvent.raw); 7842 } 7843 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 7844 swiper.slidePrev(); 7845 emit('scroll', newEvent.raw); 7846 } 7847 // If you got here is because an animation has been triggered so store the current time 7848 lastScrollTime = new window.Date().getTime(); 7849 // Return false as a default 7850 return false; 7851 } 7852 function releaseScroll(newEvent) { 7853 const params = swiper.params.mousewheel; 7854 if (newEvent.direction < 0) { 7855 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 7856 // Return true to animate scroll on edges 7857 return true; 7858 } 7859 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 7860 // Return true to animate scroll on edges 7861 return true; 7862 } 7863 return false; 7864 } 7865 function handle(event) { 7866 let e = event; 7867 let disableParentSwiper = true; 7868 if (!swiper.enabled) return; 7869 7870 // Ignore event if the target or its parents have the swiper-no-mousewheel class 7871 if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return; 7872 const params = swiper.params.mousewheel; 7873 if (swiper.params.cssMode) { 7874 e.preventDefault(); 7875 } 7876 let targetEl = swiper.el; 7877 if (swiper.params.mousewheel.eventsTarget !== 'container') { 7878 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 7879 } 7880 const targetElContainsTarget = targetEl && targetEl.contains(e.target); 7881 if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true; 7882 if (e.originalEvent) e = e.originalEvent; // jquery fix 7883 let delta = 0; 7884 const rtlFactor = swiper.rtlTranslate ? -1 : 1; 7885 const data = normalize(e); 7886 if (params.forceToAxis) { 7887 if (swiper.isHorizontal()) { 7888 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 7889 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 7890 } else { 7891 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 7892 } 7893 if (delta === 0) return true; 7894 if (params.invert) delta = -delta; 7895 7896 // Get the scroll positions 7897 let positions = swiper.getTranslate() + delta * params.sensitivity; 7898 if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); 7899 if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); 7900 7901 // When loop is true: 7902 // the disableParentSwiper will be true. 7903 // When loop is false: 7904 // if the scroll positions is not on edge, 7905 // then the disableParentSwiper will be true. 7906 // if the scroll on edge positions, 7907 // then the disableParentSwiper will be false. 7908 disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); 7909 if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); 7910 if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) { 7911 // Register the new event in a variable which stores the relevant data 7912 const newEvent = { 7913 time: now(), 7914 delta: Math.abs(delta), 7915 direction: Math.sign(delta), 7916 raw: event 7917 }; 7918 7919 // Keep the most recent events 7920 if (recentWheelEvents.length >= 2) { 7921 recentWheelEvents.shift(); // only store the last N events 7922 } 7923 7924 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 7925 recentWheelEvents.push(newEvent); 7926 7927 // If there is at least one previous recorded event: 7928 // If direction has changed or 7929 // if the scroll is quicker than the previous one: 7930 // Animate the slider. 7931 // Else (this is the first time the wheel is moved): 7932 // Animate the slider. 7933 if (prevEvent) { 7934 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 7935 animateSlider(newEvent); 7936 } 7937 } else { 7938 animateSlider(newEvent); 7939 } 7940 7941 // If it's time to release the scroll: 7942 // Return now so you don't hit the preventDefault. 7943 if (releaseScroll(newEvent)) { 7944 return true; 7945 } 7946 } else { 7947 // Freemode or scrollContainer: 7948 7949 // If we recently snapped after a momentum scroll, then ignore wheel events 7950 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 7951 // or if it's a new scroll (larger delta or inverse sign as last event before 7952 // an end-of-momentum snap). 7953 const newEvent = { 7954 time: now(), 7955 delta: Math.abs(delta), 7956 direction: Math.sign(delta) 7957 }; 7958 const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction; 7959 if (!ignoreWheelEvents) { 7960 lastEventBeforeSnap = undefined; 7961 let position = swiper.getTranslate() + delta * params.sensitivity; 7962 const wasBeginning = swiper.isBeginning; 7963 const wasEnd = swiper.isEnd; 7964 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 7965 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 7966 swiper.setTransition(0); 7967 swiper.setTranslate(position); 7968 swiper.updateProgress(); 7969 swiper.updateActiveIndex(); 7970 swiper.updateSlidesClasses(); 7971 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 7972 swiper.updateSlidesClasses(); 7973 } 7974 if (swiper.params.loop) { 7975 swiper.loopFix({ 7976 direction: newEvent.direction < 0 ? 'next' : 'prev', 7977 byMousewheel: true 7978 }); 7979 } 7980 if (swiper.params.freeMode.sticky) { 7981 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 7982 // the end of a momentum scroll by storing recent (N=15?) wheel events. 7983 // 1. do all N events have decreasing or same (absolute value) delta? 7984 // 2. did all N events arrive in the last M (M=500?) msecs? 7985 // 3. does the earliest event have an (absolute value) delta that's 7986 // at least P (P=1?) larger than the most recent event's delta? 7987 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 7988 // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration. 7989 // Snap immediately and ignore remaining wheel events in this scroll. 7990 // See comment above for "remaining wheel events in this scroll" determination. 7991 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 7992 clearTimeout(timeout); 7993 timeout = undefined; 7994 if (recentWheelEvents.length >= 15) { 7995 recentWheelEvents.shift(); // only store the last N events 7996 } 7997 7998 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 7999 const firstEvent = recentWheelEvents[0]; 8000 recentWheelEvents.push(newEvent); 8001 if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { 8002 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 8003 recentWheelEvents.splice(0); 8004 } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) { 8005 // We're at the end of the deceleration of a momentum scroll, so there's no need 8006 // to wait for more events. Snap ASAP on the next tick. 8007 // Also, because there's some remaining momentum we'll bias the snap in the 8008 // direction of the ongoing scroll because it's better UX for the scroll to snap 8009 // in the same direction as the scroll instead of reversing to snap. Therefore, 8010 // if it's already scrolled more than 20% in the current direction, keep going. 8011 const snapToThreshold = delta > 0 ? 0.8 : 0.2; 8012 lastEventBeforeSnap = newEvent; 8013 recentWheelEvents.splice(0); 8014 timeout = nextTick(() => { 8015 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 8016 }, 0); // no delay; move on next tick 8017 } 8018 8019 if (!timeout) { 8020 // if we get here, then we haven't detected the end of a momentum scroll, so 8021 // we'll consider a scroll "complete" when there haven't been any wheel events 8022 // for 500ms. 8023 timeout = nextTick(() => { 8024 const snapToThreshold = 0.5; 8025 lastEventBeforeSnap = newEvent; 8026 recentWheelEvents.splice(0); 8027 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 8028 }, 500); 8029 } 8030 } 8031 8032 // Emit event 8033 if (!ignoreWheelEvents) emit('scroll', e); 8034 8035 // Stop autoplay 8036 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); 8037 // Return page scroll on edge positions 8038 if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) { 8039 return true; 8040 } 8041 } 8042 } 8043 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 8044 return false; 8045 } 8046 function events(method) { 8047 let targetEl = swiper.el; 8048 if (swiper.params.mousewheel.eventsTarget !== 'container') { 8049 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 8050 } 8051 targetEl[method]('mouseenter', handleMouseEnter); 8052 targetEl[method]('mouseleave', handleMouseLeave); 8053 targetEl[method]('wheel', handle); 8054 } 8055 function enable() { 8056 if (swiper.params.cssMode) { 8057 swiper.wrapperEl.removeEventListener('wheel', handle); 8058 return true; 8059 } 8060 if (swiper.mousewheel.enabled) return false; 8061 events('addEventListener'); 8062 swiper.mousewheel.enabled = true; 8063 return true; 8064 } 8065 function disable() { 8066 if (swiper.params.cssMode) { 8067 swiper.wrapperEl.addEventListener(event, handle); 8068 return true; 8069 } 8070 if (!swiper.mousewheel.enabled) return false; 8071 events('removeEventListener'); 8072 swiper.mousewheel.enabled = false; 8073 return true; 8074 } 8075 on('init', () => { 8076 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 8077 disable(); 8078 } 8079 if (swiper.params.mousewheel.enabled) enable(); 8080 }); 8081 on('destroy', () => { 8082 if (swiper.params.cssMode) { 8083 enable(); 8084 } 8085 if (swiper.mousewheel.enabled) disable(); 8086 }); 8087 Object.assign(swiper.mousewheel, { 8088 enable, 8089 disable 8090 }); 8091 } 8092 8093 function createElementIfNotDefined(swiper, originalParams, params, checkProps) { 8094 if (swiper.params.createElements) { 8095 Object.keys(checkProps).forEach(key => { 8096 if (!params[key] && params.auto === true) { 8097 let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0]; 8098 if (!element) { 8099 element = createElement('div', checkProps[key]); 8100 element.className = checkProps[key]; 8101 swiper.el.append(element); 8102 } 8103 params[key] = element; 8104 originalParams[key] = element; 8105 } 8106 }); 8107 } 8108 return params; 8109 } 8110 8111 function Navigation(_ref) { 8112 let { 8113 swiper, 8114 extendParams, 8115 on, 8116 emit 8117 } = _ref; 8118 extendParams({ 8119 navigation: { 8120 nextEl: null, 8121 prevEl: null, 8122 hideOnClick: false, 8123 disabledClass: 'swiper-button-disabled', 8124 hiddenClass: 'swiper-button-hidden', 8125 lockClass: 'swiper-button-lock', 8126 navigationDisabledClass: 'swiper-navigation-disabled' 8127 } 8128 }); 8129 swiper.navigation = { 8130 nextEl: null, 8131 prevEl: null 8132 }; 8133 function getEl(el) { 8134 let res; 8135 if (el && typeof el === 'string' && swiper.isElement) { 8136 res = swiper.el.querySelector(el); 8137 if (res) return res; 8138 } 8139 if (el) { 8140 if (typeof el === 'string') res = [...document.querySelectorAll(el)]; 8141 if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) { 8142 res = swiper.el.querySelector(el); 8143 } 8144 } 8145 if (el && !res) return el; 8146 // if (Array.isArray(res) && res.length === 1) res = res[0]; 8147 return res; 8148 } 8149 function toggleEl(el, disabled) { 8150 const params = swiper.params.navigation; 8151 el = makeElementsArray(el); 8152 el.forEach(subEl => { 8153 if (subEl) { 8154 subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' ')); 8155 if (subEl.tagName === 'BUTTON') subEl.disabled = disabled; 8156 if (swiper.params.watchOverflow && swiper.enabled) { 8157 subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass); 8158 } 8159 } 8160 }); 8161 } 8162 function update() { 8163 // Update Navigation Buttons 8164 const { 8165 nextEl, 8166 prevEl 8167 } = swiper.navigation; 8168 if (swiper.params.loop) { 8169 toggleEl(prevEl, false); 8170 toggleEl(nextEl, false); 8171 return; 8172 } 8173 toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind); 8174 toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind); 8175 } 8176 function onPrevClick(e) { 8177 e.preventDefault(); 8178 if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return; 8179 swiper.slidePrev(); 8180 emit('navigationPrev'); 8181 } 8182 function onNextClick(e) { 8183 e.preventDefault(); 8184 if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return; 8185 swiper.slideNext(); 8186 emit('navigationNext'); 8187 } 8188 function init() { 8189 const params = swiper.params.navigation; 8190 swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, { 8191 nextEl: 'swiper-button-next', 8192 prevEl: 'swiper-button-prev' 8193 }); 8194 if (!(params.nextEl || params.prevEl)) return; 8195 let nextEl = getEl(params.nextEl); 8196 let prevEl = getEl(params.prevEl); 8197 Object.assign(swiper.navigation, { 8198 nextEl, 8199 prevEl 8200 }); 8201 nextEl = makeElementsArray(nextEl); 8202 prevEl = makeElementsArray(prevEl); 8203 const initButton = (el, dir) => { 8204 if (el) { 8205 el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick); 8206 } 8207 if (!swiper.enabled && el) { 8208 el.classList.add(...params.lockClass.split(' ')); 8209 } 8210 }; 8211 nextEl.forEach(el => initButton(el, 'next')); 8212 prevEl.forEach(el => initButton(el, 'prev')); 8213 } 8214 function destroy() { 8215 let { 8216 nextEl, 8217 prevEl 8218 } = swiper.navigation; 8219 nextEl = makeElementsArray(nextEl); 8220 prevEl = makeElementsArray(prevEl); 8221 const destroyButton = (el, dir) => { 8222 el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick); 8223 el.classList.remove(...swiper.params.navigation.disabledClass.split(' ')); 8224 }; 8225 nextEl.forEach(el => destroyButton(el, 'next')); 8226 prevEl.forEach(el => destroyButton(el, 'prev')); 8227 } 8228 on('init', () => { 8229 if (swiper.params.navigation.enabled === false) { 8230 // eslint-disable-next-line 8231 disable(); 8232 } else { 8233 init(); 8234 update(); 8235 } 8236 }); 8237 on('toEdge fromEdge lock unlock', () => { 8238 update(); 8239 }); 8240 on('destroy', () => { 8241 destroy(); 8242 }); 8243 on('enable disable', () => { 8244 let { 8245 nextEl, 8246 prevEl 8247 } = swiper.navigation; 8248 nextEl = makeElementsArray(nextEl); 8249 prevEl = makeElementsArray(prevEl); 8250 if (swiper.enabled) { 8251 update(); 8252 return; 8253 } 8254 [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass)); 8255 }); 8256 on('click', (_s, e) => { 8257 let { 8258 nextEl, 8259 prevEl 8260 } = swiper.navigation; 8261 nextEl = makeElementsArray(nextEl); 8262 prevEl = makeElementsArray(prevEl); 8263 const targetEl = e.target; 8264 if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) { 8265 if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; 8266 let isHidden; 8267 if (nextEl.length) { 8268 isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass); 8269 } else if (prevEl.length) { 8270 isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass); 8271 } 8272 if (isHidden === true) { 8273 emit('navigationShow'); 8274 } else { 8275 emit('navigationHide'); 8276 } 8277 [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass)); 8278 } 8279 }); 8280 const enable = () => { 8281 swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' ')); 8282 init(); 8283 update(); 8284 }; 8285 const disable = () => { 8286 swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' ')); 8287 destroy(); 8288 }; 8289 Object.assign(swiper.navigation, { 8290 enable, 8291 disable, 8292 update, 8293 init, 8294 destroy 8295 }); 8296 } 8297 8298 function classesToSelector(classes) { 8299 if (classes === void 0) { 8300 classes = ''; 8301 } 8302 return `.${classes.trim().replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line 8303 .replace(/ /g, '.')}`; 8304 } 8305 8306 function Pagination(_ref) { 8307 let { 8308 swiper, 8309 extendParams, 8310 on, 8311 emit 8312 } = _ref; 8313 const pfx = 'swiper-pagination'; 8314 extendParams({ 8315 pagination: { 8316 el: null, 8317 bulletElement: 'span', 8318 clickable: false, 8319 hideOnClick: false, 8320 renderBullet: null, 8321 renderProgressbar: null, 8322 renderFraction: null, 8323 renderCustom: null, 8324 progressbarOpposite: false, 8325 type: 'bullets', 8326 // 'bullets' or 'progressbar' or 'fraction' or 'custom' 8327 dynamicBullets: false, 8328 dynamicMainBullets: 1, 8329 formatFractionCurrent: number => number, 8330 formatFractionTotal: number => number, 8331 bulletClass: `${pfx}-bullet`, 8332 bulletActiveClass: `${pfx}-bullet-active`, 8333 modifierClass: `${pfx}-`, 8334 currentClass: `${pfx}-current`, 8335 totalClass: `${pfx}-total`, 8336 hiddenClass: `${pfx}-hidden`, 8337 progressbarFillClass: `${pfx}-progressbar-fill`, 8338 progressbarOppositeClass: `${pfx}-progressbar-opposite`, 8339 clickableClass: `${pfx}-clickable`, 8340 lockClass: `${pfx}-lock`, 8341 horizontalClass: `${pfx}-horizontal`, 8342 verticalClass: `${pfx}-vertical`, 8343 paginationDisabledClass: `${pfx}-disabled` 8344 } 8345 }); 8346 swiper.pagination = { 8347 el: null, 8348 bullets: [] 8349 }; 8350 let bulletSize; 8351 let dynamicBulletIndex = 0; 8352 function isPaginationDisabled() { 8353 return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0; 8354 } 8355 function setSideBullets(bulletEl, position) { 8356 const { 8357 bulletActiveClass 8358 } = swiper.params.pagination; 8359 if (!bulletEl) return; 8360 bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`]; 8361 if (bulletEl) { 8362 bulletEl.classList.add(`${bulletActiveClass}-${position}`); 8363 bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`]; 8364 if (bulletEl) { 8365 bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`); 8366 } 8367 } 8368 } 8369 function onBulletClick(e) { 8370 const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass)); 8371 if (!bulletEl) { 8372 return; 8373 } 8374 e.preventDefault(); 8375 const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup; 8376 if (swiper.params.loop) { 8377 if (swiper.realIndex === index) return; 8378 swiper.slideToLoop(index); 8379 } else { 8380 swiper.slideTo(index); 8381 } 8382 } 8383 function update() { 8384 // Render || Update Pagination bullets/items 8385 const rtl = swiper.rtl; 8386 const params = swiper.params.pagination; 8387 if (isPaginationDisabled()) return; 8388 let el = swiper.pagination.el; 8389 el = makeElementsArray(el); 8390 // Current/Total 8391 let current; 8392 let previousIndex; 8393 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 8394 const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 8395 if (swiper.params.loop) { 8396 previousIndex = swiper.previousRealIndex || 0; 8397 current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex; 8398 } else if (typeof swiper.snapIndex !== 'undefined') { 8399 current = swiper.snapIndex; 8400 previousIndex = swiper.previousSnapIndex; 8401 } else { 8402 previousIndex = swiper.previousIndex || 0; 8403 current = swiper.activeIndex || 0; 8404 } 8405 // Types 8406 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 8407 const bullets = swiper.pagination.bullets; 8408 let firstIndex; 8409 let lastIndex; 8410 let midIndex; 8411 if (params.dynamicBullets) { 8412 bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true); 8413 el.forEach(subEl => { 8414 subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`; 8415 }); 8416 if (params.dynamicMainBullets > 1 && previousIndex !== undefined) { 8417 dynamicBulletIndex += current - (previousIndex || 0); 8418 if (dynamicBulletIndex > params.dynamicMainBullets - 1) { 8419 dynamicBulletIndex = params.dynamicMainBullets - 1; 8420 } else if (dynamicBulletIndex < 0) { 8421 dynamicBulletIndex = 0; 8422 } 8423 } 8424 firstIndex = Math.max(current - dynamicBulletIndex, 0); 8425 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 8426 midIndex = (lastIndex + firstIndex) / 2; 8427 }
vendor: 5,261 bytes, lines 8428-8538
8428 bullets.forEach(bulletEl => { 8429 const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat(); 8430 bulletEl.classList.remove(...classesToRemove); 8431 }); 8432 if (el.length > 1) { 8433 bullets.forEach(bullet => { 8434 const bulletIndex = elementIndex(bullet); 8435 if (bulletIndex === current) { 8436 bullet.classList.add(...params.bulletActiveClass.split(' ')); 8437 } else if (swiper.isElement) { 8438 bullet.setAttribute('part', 'bullet'); 8439 } 8440 if (params.dynamicBullets) { 8441 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 8442 bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' ')); 8443 } 8444 if (bulletIndex === firstIndex) { 8445 setSideBullets(bullet, 'prev'); 8446 } 8447 if (bulletIndex === lastIndex) { 8448 setSideBullets(bullet, 'next'); 8449 } 8450 } 8451 }); 8452 } else { 8453 const bullet = bullets[current]; 8454 if (bullet) { 8455 bullet.classList.add(...params.bulletActiveClass.split(' ')); 8456 } 8457 if (swiper.isElement) { 8458 bullets.forEach((bulletEl, bulletIndex) => { 8459 bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet'); 8460 }); 8461 } 8462 if (params.dynamicBullets) { 8463 const firstDisplayedBullet = bullets[firstIndex]; 8464 const lastDisplayedBullet = bullets[lastIndex]; 8465 for (let i = firstIndex; i <= lastIndex; i += 1) { 8466 if (bullets[i]) { 8467 bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' ')); 8468 } 8469 } 8470 setSideBullets(firstDisplayedBullet, 'prev'); 8471 setSideBullets(lastDisplayedBullet, 'next'); 8472 } 8473 } 8474 if (params.dynamicBullets) { 8475 const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 8476 const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize; 8477 const offsetProp = rtl ? 'right' : 'left'; 8478 bullets.forEach(bullet => { 8479 bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`; 8480 }); 8481 } 8482 } 8483 el.forEach((subEl, subElIndex) => { 8484 if (params.type === 'fraction') { 8485 subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => { 8486 fractionEl.textContent = params.formatFractionCurrent(current + 1); 8487 }); 8488 subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => { 8489 totalEl.textContent = params.formatFractionTotal(total); 8490 }); 8491 } 8492 if (params.type === 'progressbar') { 8493 let progressbarDirection; 8494 if (params.progressbarOpposite) { 8495 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 8496 } else { 8497 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 8498 } 8499 const scale = (current + 1) / total; 8500 let scaleX = 1; 8501 let scaleY = 1; 8502 if (progressbarDirection === 'horizontal') { 8503 scaleX = scale; 8504 } else { 8505 scaleY = scale; 8506 } 8507 subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => { 8508 progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`; 8509 progressEl.style.transitionDuration = `${swiper.params.speed}ms`; 8510 }); 8511 } 8512 if (params.type === 'custom' && params.renderCustom) { 8513 subEl.innerHTML = params.renderCustom(swiper, current + 1, total); 8514 if (subElIndex === 0) emit('paginationRender', subEl); 8515 } else { 8516 if (subElIndex === 0) emit('paginationRender', subEl); 8517 emit('paginationUpdate', subEl); 8518 } 8519 if (swiper.params.watchOverflow && swiper.enabled) { 8520 subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass); 8521 } 8522 }); 8523 } 8524 function render() { 8525 // Render Container 8526 const params = swiper.params.pagination; 8527 if (isPaginationDisabled()) return; 8528 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length; 8529 let el = swiper.pagination.el; 8530 el = makeElementsArray(el); 8531 let paginationHTML = ''; 8532 if (params.type === 'bullets') { 8533 let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 8534 if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) { 8535 numberOfBullets = slidesLength; 8536 } 8537 for (let i = 0; i < numberOfBullets; i += 1) { 8538 if (params.renderBullet) {
vendor: 18,542 bytes, lines 8539-9093
8539 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 8540 } else { 8541 // prettier-ignore 8542 paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part="bullet"' : ''} class="${params.bulletClass}"></${params.bulletElement}>`; 8543 } 8544 } 8545 } 8546 if (params.type === 'fraction') { 8547 if (params.renderFraction) { 8548 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 8549 } else { 8550 paginationHTML = `<span class="${params.currentClass}"></span>` + ' / ' + `<span class="${params.totalClass}"></span>`; 8551 } 8552 } 8553 if (params.type === 'progressbar') { 8554 if (params.renderProgressbar) { 8555 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 8556 } else { 8557 paginationHTML = `<span class="${params.progressbarFillClass}"></span>`; 8558 } 8559 } 8560 swiper.pagination.bullets = []; 8561 el.forEach(subEl => { 8562 if (params.type !== 'custom') { 8563 subEl.innerHTML = paginationHTML || ''; 8564 } 8565 if (params.type === 'bullets') { 8566 swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass))); 8567 } 8568 }); 8569 if (params.type !== 'custom') { 8570 emit('paginationRender', el[0]); 8571 } 8572 } 8573 function init() { 8574 swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, { 8575 el: 'swiper-pagination' 8576 }); 8577 const params = swiper.params.pagination; 8578 if (!params.el) return; 8579 let el; 8580 if (typeof params.el === 'string' && swiper.isElement) { 8581 el = swiper.el.querySelector(params.el); 8582 } 8583 if (!el && typeof params.el === 'string') { 8584 el = [...document.querySelectorAll(params.el)]; 8585 } 8586 if (!el) { 8587 el = params.el; 8588 } 8589 if (!el || el.length === 0) return; 8590 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) { 8591 el = [...swiper.el.querySelectorAll(params.el)]; 8592 // check if it belongs to another nested Swiper 8593 if (el.length > 1) { 8594 el = el.filter(subEl => { 8595 if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false; 8596 return true; 8597 })[0]; 8598 } 8599 } 8600 if (Array.isArray(el) && el.length === 1) el = el[0]; 8601 Object.assign(swiper.pagination, { 8602 el 8603 }); 8604 el = makeElementsArray(el); 8605 el.forEach(subEl => { 8606 if (params.type === 'bullets' && params.clickable) { 8607 subEl.classList.add(...(params.clickableClass || '').split(' ')); 8608 } 8609 subEl.classList.add(params.modifierClass + params.type); 8610 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 8611 if (params.type === 'bullets' && params.dynamicBullets) { 8612 subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`); 8613 dynamicBulletIndex = 0; 8614 if (params.dynamicMainBullets < 1) { 8615 params.dynamicMainBullets = 1; 8616 } 8617 } 8618 if (params.type === 'progressbar' && params.progressbarOpposite) { 8619 subEl.classList.add(params.progressbarOppositeClass); 8620 } 8621 if (params.clickable) { 8622 subEl.addEventListener('click', onBulletClick); 8623 } 8624 if (!swiper.enabled) { 8625 subEl.classList.add(params.lockClass); 8626 } 8627 }); 8628 } 8629 function destroy() { 8630 const params = swiper.params.pagination; 8631 if (isPaginationDisabled()) return; 8632 let el = swiper.pagination.el; 8633 if (el) { 8634 el = makeElementsArray(el); 8635 el.forEach(subEl => { 8636 subEl.classList.remove(params.hiddenClass); 8637 subEl.classList.remove(params.modifierClass + params.type); 8638 subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 8639 if (params.clickable) { 8640 subEl.classList.remove(...(params.clickableClass || '').split(' ')); 8641 subEl.removeEventListener('click', onBulletClick); 8642 } 8643 }); 8644 } 8645 if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' '))); 8646 } 8647 on('changeDirection', () => { 8648 if (!swiper.pagination || !swiper.pagination.el) return; 8649 const params = swiper.params.pagination; 8650 let { 8651 el 8652 } = swiper.pagination; 8653 el = makeElementsArray(el); 8654 el.forEach(subEl => { 8655 subEl.classList.remove(params.horizontalClass, params.verticalClass); 8656 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 8657 }); 8658 }); 8659 on('init', () => { 8660 if (swiper.params.pagination.enabled === false) { 8661 // eslint-disable-next-line 8662 disable(); 8663 } else { 8664 init(); 8665 render(); 8666 update(); 8667 } 8668 }); 8669 on('activeIndexChange', () => { 8670 if (typeof swiper.snapIndex === 'undefined') { 8671 update(); 8672 } 8673 }); 8674 on('snapIndexChange', () => { 8675 update(); 8676 }); 8677 on('snapGridLengthChange', () => { 8678 render(); 8679 update(); 8680 }); 8681 on('destroy', () => { 8682 destroy(); 8683 }); 8684 on('enable disable', () => { 8685 let { 8686 el 8687 } = swiper.pagination; 8688 if (el) { 8689 el = makeElementsArray(el); 8690 el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass)); 8691 } 8692 }); 8693 on('lock unlock', () => { 8694 update(); 8695 }); 8696 on('click', (_s, e) => { 8697 const targetEl = e.target; 8698 const el = makeElementsArray(swiper.pagination.el); 8699 if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) { 8700 if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return; 8701 const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass); 8702 if (isHidden === true) { 8703 emit('paginationShow'); 8704 } else { 8705 emit('paginationHide'); 8706 } 8707 el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass)); 8708 } 8709 }); 8710 const enable = () => { 8711 swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass); 8712 let { 8713 el 8714 } = swiper.pagination; 8715 if (el) { 8716 el = makeElementsArray(el); 8717 el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass)); 8718 } 8719 init(); 8720 render(); 8721 update(); 8722 }; 8723 const disable = () => { 8724 swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass); 8725 let { 8726 el 8727 } = swiper.pagination; 8728 if (el) { 8729 el = makeElementsArray(el); 8730 el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass)); 8731 } 8732 destroy(); 8733 }; 8734 Object.assign(swiper.pagination, { 8735 enable, 8736 disable, 8737 render, 8738 update, 8739 init, 8740 destroy 8741 }); 8742 } 8743 8744 function Scrollbar(_ref) { 8745 let { 8746 swiper, 8747 extendParams, 8748 on, 8749 emit 8750 } = _ref; 8751 const document = getDocument(); 8752 let isTouched = false; 8753 let timeout = null; 8754 let dragTimeout = null; 8755 let dragStartPos; 8756 let dragSize; 8757 let trackSize; 8758 let divider; 8759 extendParams({ 8760 scrollbar: { 8761 el: null, 8762 dragSize: 'auto', 8763 hide: false, 8764 draggable: false, 8765 snapOnRelease: true, 8766 lockClass: 'swiper-scrollbar-lock', 8767 dragClass: 'swiper-scrollbar-drag', 8768 scrollbarDisabledClass: 'swiper-scrollbar-disabled', 8769 horizontalClass: `swiper-scrollbar-horizontal`, 8770 verticalClass: `swiper-scrollbar-vertical` 8771 } 8772 }); 8773 swiper.scrollbar = { 8774 el: null, 8775 dragEl: null 8776 }; 8777 function setTranslate() { 8778 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 8779 const { 8780 scrollbar, 8781 rtlTranslate: rtl 8782 } = swiper; 8783 const { 8784 dragEl, 8785 el 8786 } = scrollbar; 8787 const params = swiper.params.scrollbar; 8788 const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress; 8789 let newSize = dragSize; 8790 let newPos = (trackSize - dragSize) * progress; 8791 if (rtl) { 8792 newPos = -newPos; 8793 if (newPos > 0) { 8794 newSize = dragSize - newPos; 8795 newPos = 0; 8796 } else if (-newPos + dragSize > trackSize) { 8797 newSize = trackSize + newPos; 8798 } 8799 } else if (newPos < 0) { 8800 newSize = dragSize + newPos; 8801 newPos = 0; 8802 } else if (newPos + dragSize > trackSize) { 8803 newSize = trackSize - newPos; 8804 } 8805 if (swiper.isHorizontal()) { 8806 dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`; 8807 dragEl.style.width = `${newSize}px`; 8808 } else { 8809 dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`; 8810 dragEl.style.height = `${newSize}px`; 8811 } 8812 if (params.hide) { 8813 clearTimeout(timeout); 8814 el.style.opacity = 1; 8815 timeout = setTimeout(() => { 8816 el.style.opacity = 0; 8817 el.style.transitionDuration = '400ms'; 8818 }, 1000); 8819 } 8820 } 8821 function setTransition(duration) { 8822 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 8823 swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`; 8824 } 8825 function updateSize() { 8826 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 8827 const { 8828 scrollbar 8829 } = swiper; 8830 const { 8831 dragEl, 8832 el 8833 } = scrollbar; 8834 dragEl.style.width = ''; 8835 dragEl.style.height = ''; 8836 trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight; 8837 divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0)); 8838 if (swiper.params.scrollbar.dragSize === 'auto') { 8839 dragSize = trackSize * divider; 8840 } else { 8841 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 8842 } 8843 if (swiper.isHorizontal()) { 8844 dragEl.style.width = `${dragSize}px`; 8845 } else { 8846 dragEl.style.height = `${dragSize}px`; 8847 } 8848 if (divider >= 1) { 8849 el.style.display = 'none'; 8850 } else { 8851 el.style.display = ''; 8852 } 8853 if (swiper.params.scrollbar.hide) { 8854 el.style.opacity = 0; 8855 } 8856 if (swiper.params.watchOverflow && swiper.enabled) { 8857 scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass); 8858 } 8859 } 8860 function getPointerPosition(e) { 8861 return swiper.isHorizontal() ? e.clientX : e.clientY; 8862 } 8863 function setDragPosition(e) { 8864 const { 8865 scrollbar, 8866 rtlTranslate: rtl 8867 } = swiper; 8868 const { 8869 el 8870 } = scrollbar; 8871 let positionRatio; 8872 positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 8873 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 8874 if (rtl) { 8875 positionRatio = 1 - positionRatio; 8876 } 8877 const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 8878 swiper.updateProgress(position); 8879 swiper.setTranslate(position); 8880 swiper.updateActiveIndex(); 8881 swiper.updateSlidesClasses(); 8882 } 8883 function onDragStart(e) { 8884 const params = swiper.params.scrollbar; 8885 const { 8886 scrollbar, 8887 wrapperEl 8888 } = swiper; 8889 const { 8890 el, 8891 dragEl 8892 } = scrollbar; 8893 isTouched = true; 8894 dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 8895 e.preventDefault(); 8896 e.stopPropagation(); 8897 wrapperEl.style.transitionDuration = '100ms'; 8898 dragEl.style.transitionDuration = '100ms'; 8899 setDragPosition(e); 8900 clearTimeout(dragTimeout); 8901 el.style.transitionDuration = '0ms'; 8902 if (params.hide) { 8903 el.style.opacity = 1; 8904 } 8905 if (swiper.params.cssMode) { 8906 swiper.wrapperEl.style['scroll-snap-type'] = 'none'; 8907 } 8908 emit('scrollbarDragStart', e); 8909 } 8910 function onDragMove(e) { 8911 const { 8912 scrollbar, 8913 wrapperEl 8914 } = swiper; 8915 const { 8916 el, 8917 dragEl 8918 } = scrollbar; 8919 if (!isTouched) return; 8920 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 8921 setDragPosition(e); 8922 wrapperEl.style.transitionDuration = '0ms'; 8923 el.style.transitionDuration = '0ms'; 8924 dragEl.style.transitionDuration = '0ms'; 8925 emit('scrollbarDragMove', e); 8926 } 8927 function onDragEnd(e) { 8928 const params = swiper.params.scrollbar; 8929 const { 8930 scrollbar, 8931 wrapperEl 8932 } = swiper; 8933 const { 8934 el 8935 } = scrollbar; 8936 if (!isTouched) return; 8937 isTouched = false; 8938 if (swiper.params.cssMode) { 8939 swiper.wrapperEl.style['scroll-snap-type'] = ''; 8940 wrapperEl.style.transitionDuration = ''; 8941 } 8942 if (params.hide) { 8943 clearTimeout(dragTimeout); 8944 dragTimeout = nextTick(() => { 8945 el.style.opacity = 0; 8946 el.style.transitionDuration = '400ms'; 8947 }, 1000); 8948 } 8949 emit('scrollbarDragEnd', e); 8950 if (params.snapOnRelease) { 8951 swiper.slideToClosest(); 8952 } 8953 } 8954 function events(method) { 8955 const { 8956 scrollbar, 8957 params 8958 } = swiper; 8959 const el = scrollbar.el; 8960 if (!el) return; 8961 const target = el; 8962 const activeListener = params.passiveListeners ? { 8963 passive: false, 8964 capture: false 8965 } : false; 8966 const passiveListener = params.passiveListeners ? { 8967 passive: true, 8968 capture: false 8969 } : false; 8970 if (!target) return; 8971 const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 8972 target[eventMethod]('pointerdown', onDragStart, activeListener); 8973 document[eventMethod]('pointermove', onDragMove, activeListener); 8974 document[eventMethod]('pointerup', onDragEnd, passiveListener); 8975 } 8976 function enableDraggable() { 8977 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 8978 events('on'); 8979 } 8980 function disableDraggable() { 8981 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 8982 events('off'); 8983 } 8984 function init() { 8985 const { 8986 scrollbar, 8987 el: swiperEl 8988 } = swiper; 8989 swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { 8990 el: 'swiper-scrollbar' 8991 }); 8992 const params = swiper.params.scrollbar; 8993 if (!params.el) return; 8994 let el; 8995 if (typeof params.el === 'string' && swiper.isElement) { 8996 el = swiper.el.querySelector(params.el); 8997 } 8998 if (!el && typeof params.el === 'string') { 8999 el = document.querySelectorAll(params.el); 9000 if (!el.length) return; 9001 } else if (!el) { 9002 el = params.el; 9003 } 9004 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) { 9005 el = swiperEl.querySelector(params.el); 9006 } 9007 if (el.length > 0) el = el[0]; 9008 el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 9009 let dragEl; 9010 if (el) { 9011 dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass)); 9012 if (!dragEl) { 9013 dragEl = createElement('div', swiper.params.scrollbar.dragClass); 9014 el.append(dragEl); 9015 } 9016 } 9017 Object.assign(scrollbar, { 9018 el, 9019 dragEl 9020 }); 9021 if (params.draggable) { 9022 enableDraggable(); 9023 } 9024 if (el) { 9025 el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass)); 9026 } 9027 } 9028 function destroy() { 9029 const params = swiper.params.scrollbar; 9030 const el = swiper.scrollbar.el; 9031 if (el) { 9032 el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass)); 9033 } 9034 disableDraggable(); 9035 } 9036 on('changeDirection', () => { 9037 if (!swiper.scrollbar || !swiper.scrollbar.el) return; 9038 const params = swiper.params.scrollbar; 9039 let { 9040 el 9041 } = swiper.scrollbar; 9042 el = makeElementsArray(el); 9043 el.forEach(subEl => { 9044 subEl.classList.remove(params.horizontalClass, params.verticalClass); 9045 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 9046 }); 9047 }); 9048 on('init', () => { 9049 if (swiper.params.scrollbar.enabled === false) { 9050 // eslint-disable-next-line 9051 disable(); 9052 } else { 9053 init(); 9054 updateSize(); 9055 setTranslate(); 9056 } 9057 }); 9058 on('update resize observerUpdate lock unlock changeDirection', () => { 9059 updateSize(); 9060 }); 9061 on('setTranslate', () => { 9062 setTranslate(); 9063 }); 9064 on('setTransition', (_s, duration) => { 9065 setTransition(duration); 9066 }); 9067 on('enable disable', () => { 9068 const { 9069 el 9070 } = swiper.scrollbar; 9071 if (el) { 9072 el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass)); 9073 } 9074 }); 9075 on('destroy', () => { 9076 destroy(); 9077 }); 9078 const enable = () => { 9079 swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 9080 if (swiper.scrollbar.el) { 9081 swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 9082 } 9083 init(); 9084 updateSize(); 9085 setTranslate(); 9086 }; 9087 const disable = () => { 9088 swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 9089 if (swiper.scrollbar.el) { 9090 swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 9091 } 9092 destroy(); 9093 };
9094 Object.assign(swiper.scrollbar, { 9095 enable, 9096 disable, 9097 updateSize, 9098 setTranslate, 9099 init, 9100 destroy 9101 }); 9102 } 9103 9104 function Parallax(_ref) { 9105 let { 9106 swiper, 9107 extendParams, 9108 on 9109 } = _ref; 9110 extendParams({ 9111 parallax: { 9112 enabled: false 9113 } 9114 }); 9115 const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]'; 9116 const setTransform = (el, progress) => { 9117 const { 9118 rtl 9119 } = swiper; 9120 const rtlFactor = rtl ? -1 : 1; 9121 const p = el.getAttribute('data-swiper-parallax') || '0'; 9122 let x = el.getAttribute('data-swiper-parallax-x'); 9123 let y = el.getAttribute('data-swiper-parallax-y'); 9124 const scale = el.getAttribute('data-swiper-parallax-scale'); 9125 const opacity = el.getAttribute('data-swiper-parallax-opacity'); 9126 const rotate = el.getAttribute('data-swiper-parallax-rotate'); 9127 if (x || y) { 9128 x = x || '0'; 9129 y = y || '0'; 9130 } else if (swiper.isHorizontal()) { 9131 x = p; 9132 y = '0'; 9133 } else { 9134 y = p; 9135 x = '0'; 9136 } 9137 if (x.indexOf('%') >= 0) { 9138 x = `${parseInt(x, 10) * progress * rtlFactor}%`; 9139 } else { 9140 x = `${x * progress * rtlFactor}px`; 9141 } 9142 if (y.indexOf('%') >= 0) { 9143 y = `${parseInt(y, 10) * progress}%`; 9144 } else { 9145 y = `${y * progress}px`; 9146 } 9147 if (typeof opacity !== 'undefined' && opacity !== null) { 9148 const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); 9149 el.style.opacity = currentOpacity; 9150 } 9151 let transform = `translate3d(${x}, ${y}, 0px)`; 9152 if (typeof scale !== 'undefined' && scale !== null) { 9153 const currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); 9154 transform += ` scale(${currentScale})`; 9155 } 9156 if (rotate && typeof rotate !== 'undefined' && rotate !== null) { 9157 const currentRotate = rotate * progress * -1; 9158 transform += ` rotate(${currentRotate}deg)`; 9159 } 9160 el.style.transform = transform; 9161 }; 9162 const setTranslate = () => { 9163 const { 9164 el, 9165 slides, 9166 progress, 9167 snapGrid, 9168 isElement 9169 } = swiper; 9170 const elements = elementChildren(el, elementsSelector); 9171 if (swiper.isElement) { 9172 elements.push(...elementChildren(swiper.hostEl, elementsSelector)); 9173 } 9174 elements.forEach(subEl => { 9175 setTransform(subEl, progress); 9176 }); 9177 slides.forEach((slideEl, slideIndex) => { 9178 let slideProgress = slideEl.progress; 9179 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 9180 slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); 9181 } 9182 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 9183 slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => { 9184 setTransform(subEl, slideProgress); 9185 }); 9186 }); 9187 }; 9188 const setTransition = function (duration) { 9189 if (duration === void 0) { 9190 duration = swiper.params.speed; 9191 } 9192 const { 9193 el, 9194 hostEl 9195 } = swiper; 9196 const elements = [...el.querySelectorAll(elementsSelector)]; 9197 if (swiper.isElement) { 9198 elements.push(...hostEl.querySelectorAll(elementsSelector)); 9199 } 9200 elements.forEach(parallaxEl => { 9201 let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration; 9202 if (duration === 0) parallaxDuration = 0; 9203 parallaxEl.style.transitionDuration = `${parallaxDuration}ms`; 9204 }); 9205 }; 9206 on('beforeInit', () => { 9207 if (!swiper.params.parallax.enabled) return; 9208 swiper.params.watchSlidesProgress = true; 9209 swiper.originalParams.watchSlidesProgress = true; 9210 }); 9211 on('init', () => { 9212 if (!swiper.params.parallax.enabled) return; 9213 setTranslate(); 9214 }); 9215 on('setTranslate', () => { 9216 if (!swiper.params.parallax.enabled) return; 9217 setTranslate(); 9218 }); 9219 on('setTransition', (_swiper, duration) => { 9220 if (!swiper.params.parallax.enabled) return; 9221 setTransition(duration); 9222 }); 9223 } 9224 9225 function Zoom(_ref) { 9226 let { 9227 swiper, 9228 extendParams, 9229 on, 9230 emit 9231 } = _ref; 9232 const window = getWindow(); 9233 extendParams({ 9234 zoom: { 9235 enabled: false, 9236 limitToOriginalSize: false, 9237 maxRatio: 3, 9238 minRatio: 1, 9239 toggle: true, 9240 containerClass: 'swiper-zoom-container', 9241 zoomedSlideClass: 'swiper-slide-zoomed' 9242 } 9243 }); 9244 swiper.zoom = { 9245 enabled: false 9246 };
vendor: 5,436 bytes, lines 9247-9403
9247 let currentScale = 1; 9248 let isScaling = false; 9249 let fakeGestureTouched; 9250 let fakeGestureMoved; 9251 const evCache = []; 9252 const gesture = { 9253 originX: 0, 9254 originY: 0, 9255 slideEl: undefined, 9256 slideWidth: undefined, 9257 slideHeight: undefined, 9258 imageEl: undefined, 9259 imageWrapEl: undefined, 9260 maxRatio: 3 9261 }; 9262 const image = { 9263 isTouched: undefined, 9264 isMoved: undefined, 9265 currentX: undefined, 9266 currentY: undefined, 9267 minX: undefined, 9268 minY: undefined, 9269 maxX: undefined, 9270 maxY: undefined, 9271 width: undefined, 9272 height: undefined, 9273 startX: undefined, 9274 startY: undefined, 9275 touchesStart: {}, 9276 touchesCurrent: {} 9277 }; 9278 const velocity = { 9279 x: undefined, 9280 y: undefined, 9281 prevPositionX: undefined, 9282 prevPositionY: undefined, 9283 prevTime: undefined 9284 }; 9285 let scale = 1; 9286 Object.defineProperty(swiper.zoom, 'scale', { 9287 get() { 9288 return scale; 9289 }, 9290 set(value) { 9291 if (scale !== value) { 9292 const imageEl = gesture.imageEl; 9293 const slideEl = gesture.slideEl; 9294 emit('zoomChange', value, imageEl, slideEl); 9295 } 9296 scale = value; 9297 } 9298 }); 9299 function getDistanceBetweenTouches() { 9300 if (evCache.length < 2) return 1; 9301 const x1 = evCache[0].pageX; 9302 const y1 = evCache[0].pageY; 9303 const x2 = evCache[1].pageX; 9304 const y2 = evCache[1].pageY; 9305 const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); 9306 return distance; 9307 } 9308 function getMaxRatio() { 9309 const params = swiper.params.zoom; 9310 const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 9311 if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) { 9312 const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth; 9313 return Math.min(imageMaxRatio, maxRatio); 9314 } 9315 return maxRatio; 9316 } 9317 function getScaleOrigin() { 9318 if (evCache.length < 2) return { 9319 x: null, 9320 y: null 9321 }; 9322 const box = gesture.imageEl.getBoundingClientRect(); 9323 return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale]; 9324 } 9325 function getSlideSelector() { 9326 return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 9327 } 9328 function eventWithinSlide(e) { 9329 const slideSelector = getSlideSelector(); 9330 if (e.target.matches(slideSelector)) return true; 9331 if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true; 9332 return false; 9333 } 9334 function eventWithinZoomContainer(e) { 9335 const selector = `.${swiper.params.zoom.containerClass}`; 9336 if (e.target.matches(selector)) return true; 9337 if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true; 9338 return false; 9339 } 9340 9341 // Events 9342 function onGestureStart(e) { 9343 if (e.pointerType === 'mouse') { 9344 evCache.splice(0, evCache.length); 9345 } 9346 if (!eventWithinSlide(e)) return; 9347 const params = swiper.params.zoom; 9348 fakeGestureTouched = false; 9349 fakeGestureMoved = false; 9350 evCache.push(e); 9351 if (evCache.length < 2) { 9352 return; 9353 } 9354 fakeGestureTouched = true; 9355 gesture.scaleStart = getDistanceBetweenTouches(); 9356 if (!gesture.slideEl) { 9357 gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 9358 if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex]; 9359 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 9360 if (imageEl) { 9361 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 9362 } 9363 gesture.imageEl = imageEl; 9364 if (imageEl) { 9365 gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0]; 9366 } else { 9367 gesture.imageWrapEl = undefined; 9368 } 9369 if (!gesture.imageWrapEl) { 9370 gesture.imageEl = undefined; 9371 return; 9372 } 9373 gesture.maxRatio = getMaxRatio(); 9374 } 9375 if (gesture.imageEl) { 9376 const [originX, originY] = getScaleOrigin(); 9377 gesture.originX = originX; 9378 gesture.originY = originY; 9379 gesture.imageEl.style.transitionDuration = '0ms'; 9380 } 9381 isScaling = true; 9382 } 9383 function onGestureChange(e) { 9384 if (!eventWithinSlide(e)) return; 9385 const params = swiper.params.zoom; 9386 const zoom = swiper.zoom; 9387 const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 9388 if (pointerIndex >= 0) evCache[pointerIndex] = e; 9389 if (evCache.length < 2) { 9390 return; 9391 } 9392 fakeGestureMoved = true; 9393 gesture.scaleMove = getDistanceBetweenTouches(); 9394 if (!gesture.imageEl) { 9395 return; 9396 } 9397 zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale; 9398 if (zoom.scale > gesture.maxRatio) { 9399 zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5; 9400 } 9401 if (zoom.scale < params.minRatio) { 9402 zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5; 9403 }
9404 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 9405 } 9406 function onGestureEnd(e) { 9407 if (!eventWithinSlide(e)) return; 9408 if (e.pointerType === 'mouse' && e.type === 'pointerout') return; 9409 const params = swiper.params.zoom; 9410 const zoom = swiper.zoom; 9411 const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 9412 if (pointerIndex >= 0) evCache.splice(pointerIndex, 1); 9413 if (!fakeGestureTouched || !fakeGestureMoved) { 9414 return; 9415 } 9416 fakeGestureTouched = false; 9417 fakeGestureMoved = false; 9418 if (!gesture.imageEl) return; 9419 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 9420 gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`; 9421 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 9422 currentScale = zoom.scale; 9423 isScaling = false; 9424 if (zoom.scale > 1 && gesture.slideEl) { 9425 gesture.slideEl.classList.add(`${params.zoomedSlideClass}`); 9426 } else if (zoom.scale <= 1 && gesture.slideEl) { 9427 gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`); 9428 } 9429 if (zoom.scale === 1) { 9430 gesture.originX = 0; 9431 gesture.originY = 0; 9432 gesture.slideEl = undefined; 9433 } 9434 } 9435 function onTouchStart(e) { 9436 const device = swiper.device; 9437 if (!gesture.imageEl) return; 9438 if (image.isTouched) return; 9439 if (device.android && e.cancelable) e.preventDefault(); 9440 image.isTouched = true; 9441 const event = evCache.length > 0 ? evCache[0] : e; 9442 image.touchesStart.x = event.pageX; 9443 image.touchesStart.y = event.pageY; 9444 } 9445 function onTouchMove(e) { 9446 if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return; 9447 const zoom = swiper.zoom; 9448 if (!gesture.imageEl) return; 9449 if (!image.isTouched || !gesture.slideEl) return; 9450 if (!image.isMoved) { 9451 image.width = gesture.imageEl.offsetWidth; 9452 image.height = gesture.imageEl.offsetHeight; 9453 image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0; 9454 image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0; 9455 gesture.slideWidth = gesture.slideEl.offsetWidth; 9456 gesture.slideHeight = gesture.slideEl.offsetHeight; 9457 gesture.imageWrapEl.style.transitionDuration = '0ms'; 9458 } 9459 // Define if we need image drag 9460 const scaledWidth = image.width * zoom.scale; 9461 const scaledHeight = image.height * zoom.scale; 9462 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 9463 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 9464 image.maxX = -image.minX; 9465 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 9466 image.maxY = -image.minY; 9467 image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX; 9468 image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY; 9469 const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y)); 9470 if (touchesDiff > 5) { 9471 swiper.allowClick = false; 9472 } 9473 if (!image.isMoved && !isScaling) { 9474 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)) { 9475 image.isTouched = false; 9476 return; 9477 } 9478 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)) { 9479 image.isTouched = false; 9480 return; 9481 } 9482 } 9483 if (e.cancelable) { 9484 e.preventDefault(); 9485 } 9486 e.stopPropagation(); 9487 image.isMoved = true; 9488 const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio); 9489 const { 9490 originX, 9491 originY 9492 } = gesture; 9493 image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.
vendor: 5,193 bytes, lines 9493-9602
9493width - originX * 2); 9494 image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2); 9495 if (image.currentX < image.minX) { 9496 image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8; 9497 } 9498 if (image.currentX > image.maxX) { 9499 image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8; 9500 } 9501 if (image.currentY < image.minY) { 9502 image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8; 9503 } 9504 if (image.currentY > image.maxY) { 9505 image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8; 9506 } 9507 9508 // Velocity 9509 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 9510 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 9511 if (!velocity.prevTime) velocity.prevTime = Date.now(); 9512 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 9513 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 9514 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 9515 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 9516 velocity.prevPositionX = image.touchesCurrent.x; 9517 velocity.prevPositionY = image.touchesCurrent.y; 9518 velocity.prevTime = Date.now(); 9519 gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`; 9520 } 9521 function onTouchEnd() { 9522 const zoom = swiper.zoom; 9523 if (!gesture.imageEl) return; 9524 if (!image.isTouched || !image.isMoved) { 9525 image.isTouched = false; 9526 image.isMoved = false; 9527 return; 9528 } 9529 image.isTouched = false; 9530 image.isMoved = false; 9531 let momentumDurationX = 300; 9532 let momentumDurationY = 300; 9533 const momentumDistanceX = velocity.x * momentumDurationX; 9534 const newPositionX = image.currentX + momentumDistanceX; 9535 const momentumDistanceY = velocity.y * momentumDurationY; 9536 const newPositionY = image.currentY + momentumDistanceY; 9537 9538 // Fix duration 9539 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 9540 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 9541 const momentumDuration = Math.max(momentumDurationX, momentumDurationY); 9542 image.currentX = newPositionX; 9543 image.currentY = newPositionY; 9544 // Define if we need image drag 9545 const scaledWidth = image.width * zoom.scale; 9546 const scaledHeight = image.height * zoom.scale; 9547 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 9548 image.maxX = -image.minX; 9549 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 9550 image.maxY = -image.minY; 9551 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 9552 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 9553 gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`; 9554 gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`; 9555 } 9556 function onTransitionEnd() { 9557 const zoom = swiper.zoom; 9558 if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) { 9559 if (gesture.imageEl) { 9560 gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'; 9561 } 9562 if (gesture.imageWrapEl) { 9563 gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)'; 9564 } 9565 gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`); 9566 zoom.scale = 1; 9567 currentScale = 1; 9568 gesture.slideEl = undefined; 9569 gesture.imageEl = undefined; 9570 gesture.imageWrapEl = undefined; 9571 gesture.originX = 0; 9572 gesture.originY = 0; 9573 } 9574 } 9575 function zoomIn(e) { 9576 const zoom = swiper.zoom; 9577 const params = swiper.params.zoom; 9578 if (!gesture.slideEl) { 9579 if (e && e.target) { 9580 gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 9581 } 9582 if (!gesture.slideEl) { 9583 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 9584 gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0]; 9585 } else { 9586 gesture.slideEl = swiper.slides[swiper.activeIndex]; 9587 } 9588 } 9589 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 9590 if (imageEl) { 9591 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 9592 } 9593 gesture.imageEl = imageEl; 9594 if (imageEl) { 9595 gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0]; 9596 } else { 9597 gesture.imageWrapEl = undefined; 9598 } 9599 } 9600 if (!gesture.imageEl || !gesture.imageWrapEl) return; 9601 if (swiper.params.cssMode) { 9602 swiper.wrapperEl.style.overflow = 'hidden';
9603 swiper.wrapperEl.style.touchAction = 'none'; 9604 } 9605 gesture.slideEl.classList.add(`${params.zoomedSlideClass}`); 9606 let touchX; 9607 let touchY; 9608 let offsetX; 9609 let offsetY; 9610 let diffX; 9611 let diffY; 9612 let translateX; 9613 let translateY; 9614 let imageWidth; 9615 let imageHeight; 9616 let scaledWidth; 9617 let scaledHeight; 9618 let translateMinX; 9619 let translateMinY; 9620 let translateMaxX; 9621 let translateMaxY; 9622 let slideWidth; 9623 let slideHeight; 9624 if (typeof image.touchesStart.x === 'undefined' && e) { 9625 touchX = e.pageX; 9626 touchY = e.pageY; 9627 } else { 9628 touchX = image.touchesStart.x; 9629 touchY = image.touchesStart.y; 9630 } 9631 const forceZoomRatio = typeof e === 'number' ? e : null; 9632 if (currentScale === 1 && forceZoomRatio) { 9633 touchX = undefined; 9634 touchY = undefined; 9635 } 9636 const maxRatio = getMaxRatio(); 9637 zoom.scale = forceZoomRatio || maxRatio; 9638 currentScale = forceZoomRatio || maxRatio; 9639 if (e && !(currentScale === 1 && forceZoomRatio)) { 9640 slideWidth = gesture.slideEl.offsetWidth; 9641 slideHeight = gesture.slideEl.offsetHeight; 9642 offsetX = elementOffset(gesture.slideEl).left + window.scrollX; 9643 offsetY = elementOffset(gesture.slideEl).top + window.scrollY; 9644 diffX = offsetX + slideWidth / 2 - touchX; 9645 diffY = offsetY + slideHeight / 2 - touchY; 9646 imageWidth = gesture.imageEl.offsetWidth; 9647 imageHeight = gesture.imageEl.offsetHeight; 9648 scaledWidth = imageWidth * zoom.scale; 9649 scaledHeight = imageHeight * zoom.scale; 9650 translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); 9651 translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); 9652 translateMaxX = -translateMinX; 9653 translateMaxY = -translateMinY; 9654 translateX = diffX * zoom.scale; 9655 translateY = diffY * zoom.scale; 9656 if (translateX < translateMinX) { 9657 translateX = translateMinX; 9658 } 9659 if (translateX > translateMaxX) { 9660 translateX = translateMaxX; 9661 } 9662 if (translateY < translateMinY) { 9663 translateY = translateMinY; 9664 } 9665 if (translateY > translateMaxY) { 9666 translateY = translateMaxY; 9667 } 9668 } else { 9669 translateX = 0; 9670 translateY = 0; 9671 } 9672 if (forceZoomRatio && zoom.scale === 1) { 9673 gesture.originX = 0; 9674 gesture.originY = 0; 9675 } 9676 gesture.imageWrapEl.style.transitionDuration = '300ms'; 9677 gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`; 9678 gesture.imageEl.style.transitionDuration = '300ms'; 9679 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 9680 } 9681 function zoomOut() { 9682 const zoom = swiper.zoom; 9683 const params = swiper.params.zoom; 9684 if (!gesture.slideEl) { 9685 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 9686 gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0]; 9687 } else { 9688 gesture.slideEl = swiper.slides[swiper.activeIndex]; 9689 } 9690 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 9691 if (imageEl) { 9692 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 9693 } 9694 gesture.imageEl = imageEl; 9695 if (imageEl) { 9696 gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0]; 9697 } else { 9698 gesture.imageWrapEl = undefined; 9699 } 9700 } 9701 if (!gesture.imageEl || !gesture.imageWrapEl) return; 9702 if (swiper.params.cssMode) { 9703 swiper.wrapperEl.style.overflow = ''; 9704 swiper.wrapperEl.style.touchAction = ''; 9705 } 9706 zoom.scale = 1; 9707 currentScale = 1; 9708 gesture.imageWrapEl.style.transitionDuration = '300ms'; 9709 gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)'; 9710 gesture.imageEl.style.transitionDuration = '300ms';
vendor: 4,140 bytes, lines 9711-9856
9711 gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'; 9712 gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`); 9713 gesture.slideEl = undefined; 9714 gesture.originX = 0; 9715 gesture.originY = 0; 9716 } 9717 9718 // Toggle Zoom 9719 function zoomToggle(e) { 9720 const zoom = swiper.zoom; 9721 if (zoom.scale && zoom.scale !== 1) { 9722 // Zoom Out 9723 zoomOut(); 9724 } else { 9725 // Zoom In 9726 zoomIn(e); 9727 } 9728 } 9729 function getListeners() { 9730 const passiveListener = swiper.params.passiveListeners ? { 9731 passive: true, 9732 capture: false 9733 } : false; 9734 const activeListenerWithCapture = swiper.params.passiveListeners ? { 9735 passive: false, 9736 capture: true 9737 } : true; 9738 return { 9739 passiveListener, 9740 activeListenerWithCapture 9741 }; 9742 } 9743 9744 // Attach/Detach Events 9745 function enable() { 9746 const zoom = swiper.zoom; 9747 if (zoom.enabled) return; 9748 zoom.enabled = true; 9749 const { 9750 passiveListener, 9751 activeListenerWithCapture 9752 } = getListeners(); 9753 9754 // Scale image 9755 swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener); 9756 swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture); 9757 ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => { 9758 swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener); 9759 }); 9760 9761 // Move image 9762 swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture); 9763 } 9764 function disable() { 9765 const zoom = swiper.zoom; 9766 if (!zoom.enabled) return; 9767 zoom.enabled = false; 9768 const { 9769 passiveListener, 9770 activeListenerWithCapture 9771 } = getListeners(); 9772 9773 // Scale image 9774 swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener); 9775 swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture); 9776 ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => { 9777 swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener); 9778 }); 9779 9780 // Move image 9781 swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture); 9782 } 9783 on('init', () => { 9784 if (swiper.params.zoom.enabled) { 9785 enable(); 9786 } 9787 }); 9788 on('destroy', () => { 9789 disable(); 9790 }); 9791 on('touchStart', (_s, e) => { 9792 if (!swiper.zoom.enabled) return; 9793 onTouchStart(e); 9794 }); 9795 on('touchEnd', (_s, e) => { 9796 if (!swiper.zoom.enabled) return; 9797 onTouchEnd(); 9798 }); 9799 on('doubleTap', (_s, e) => { 9800 if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 9801 zoomToggle(e); 9802 } 9803 }); 9804 on('transitionEnd', () => { 9805 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 9806 onTransitionEnd(); 9807 } 9808 }); 9809 on('slideChange', () => { 9810 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 9811 onTransitionEnd(); 9812 } 9813 }); 9814 Object.assign(swiper.zoom, { 9815 enable, 9816 disable, 9817 in: zoomIn, 9818 out: zoomOut, 9819 toggle: zoomToggle 9820 }); 9821 } 9822 9823 /* eslint no-bitwise: ["error", { "allow": [">>"] }] */ 9824 function Controller(_ref) { 9825 let { 9826 swiper, 9827 extendParams, 9828 on 9829 } = _ref; 9830 extendParams({ 9831 controller: { 9832 control: undefined, 9833 inverse: false, 9834 by: 'slide' // or 'container' 9835 } 9836 }); 9837 9838 swiper.controller = { 9839 control: undefined 9840 }; 9841 function LinearSpline(x, y) { 9842 const binarySearch = function search() { 9843 let maxIndex; 9844 let minIndex; 9845 let guess; 9846 return (array, val) => { 9847 minIndex = -1; 9848 maxIndex = array.length; 9849 while (maxIndex - minIndex > 1) { 9850 guess = maxIndex + minIndex >> 1; 9851 if (array[guess] <= val) { 9852 minIndex = guess; 9853 } else { 9854 maxIndex = guess; 9855 } 9856 }
vendor: 4,919 bytes, lines 9857-9974
9857 return maxIndex; 9858 }; 9859 }(); 9860 this.x = x; 9861 this.y = y; 9862 this.lastIndex = x.length - 1; 9863 // Given an x value (x2), return the expected y2 value: 9864 // (x1,y1) is the known point before given value, 9865 // (x3,y3) is the known point after given value. 9866 let i1; 9867 let i3; 9868 this.interpolate = function interpolate(x2) { 9869 if (!x2) return 0; 9870 9871 // Get the indexes of x1 and x3 (the array indexes before and after given x2): 9872 i3 = binarySearch(this.x, x2); 9873 i1 = i3 - 1; 9874 9875 // We have our indexes i1 & i3, so we can calculate already: 9876 // y2 := ((x2âx1) à (y3ây1)) ÷ (x3âx1) + y1 9877 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; 9878 }; 9879 return this; 9880 } 9881 function getInterpolateFunction(c) { 9882 swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid); 9883 } 9884 function setTranslate(_t, byController) { 9885 const controlled = swiper.controller.control; 9886 let multiplier; 9887 let controlledTranslate; 9888 const Swiper = swiper.constructor; 9889 function setControlledTranslate(c) { 9890 if (c.destroyed) return; 9891 9892 // this will create an Interpolate function based on the snapGrids 9893 // x is the Grid of the scrolled scroller and y will be the controlled scroller 9894 // it makes sense to create this only once and recall it for the interpolation 9895 // the function does a lot of value caching for performance 9896 const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 9897 if (swiper.params.controller.by === 'slide') { 9898 getInterpolateFunction(c); 9899 // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid 9900 // but it did not work out 9901 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 9902 } 9903 if (!controlledTranslate || swiper.params.controller.by === 'container') { 9904 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 9905 if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) { 9906 multiplier = 1; 9907 } 9908 controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); 9909 } 9910 if (swiper.params.controller.inverse) { 9911 controlledTranslate = c.maxTranslate() - controlledTranslate; 9912 } 9913 c.updateProgress(controlledTranslate); 9914 c.setTranslate(controlledTranslate, swiper); 9915 c.updateActiveIndex(); 9916 c.updateSlidesClasses(); 9917 } 9918 if (Array.isArray(controlled)) { 9919 for (let i = 0; i < controlled.length; i += 1) { 9920 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 9921 setControlledTranslate(controlled[i]); 9922 } 9923 } 9924 } else if (controlled instanceof Swiper && byController !== controlled) { 9925 setControlledTranslate(controlled); 9926 } 9927 } 9928 function setTransition(duration, byController) { 9929 const Swiper = swiper.constructor; 9930 const controlled = swiper.controller.control; 9931 let i; 9932 function setControlledTransition(c) { 9933 if (c.destroyed) return; 9934 c.setTransition(duration, swiper); 9935 if (duration !== 0) { 9936 c.transitionStart(); 9937 if (c.params.autoHeight) { 9938 nextTick(() => { 9939 c.updateAutoHeight(); 9940 }); 9941 } 9942 elementTransitionEnd(c.wrapperEl, () => { 9943 if (!controlled) return; 9944 c.transitionEnd(); 9945 }); 9946 } 9947 } 9948 if (Array.isArray(controlled)) { 9949 for (i = 0; i < controlled.length; i += 1) { 9950 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 9951 setControlledTransition(controlled[i]); 9952 } 9953 } 9954 } else if (controlled instanceof Swiper && byController !== controlled) { 9955 setControlledTransition(controlled); 9956 } 9957 } 9958 function removeSpline() { 9959 if (!swiper.controller.control) return; 9960 if (swiper.controller.spline) { 9961 swiper.controller.spline = undefined; 9962 delete swiper.controller.spline; 9963 } 9964 } 9965 on('beforeInit', () => { 9966 if (typeof window !== 'undefined' && ( 9967 // eslint-disable-line 9968 typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) { 9969 const controlElement = document.querySelector(swiper.params.controller.control); 9970 if (controlElement && controlElement.swiper) { 9971 swiper.controller.control = controlElement.swiper; 9972 } else if (controlElement) { 9973 const onControllerSwiper = e => { 9974 swiper.controller.control = e.detail[0];
9975 swiper.update(); 9976 controlElement.removeEventListener('init', onControllerSwiper); 9977 }; 9978 controlElement.addEventListener('init', onControllerSwiper); 9979 } 9980 return; 9981 } 9982 swiper.controller.control = swiper.params.controller.control; 9983 }); 9984 on('update', () => { 9985 removeSpline(); 9986 }); 9987 on('resize', () => { 9988 removeSpline(); 9989 }); 9990 on('observerUpdate', () => { 9991 removeSpline(); 9992 }); 9993 on('setTranslate', (_s, translate, byController) => { 9994 if (!swiper.controller.control || swiper.controller.control.destroyed) return; 9995 swiper.controller.setTranslate(translate, byController); 9996 }); 9997 on('setTransition', (_s, duration, byController) => { 9998 if (!swiper.controller.control || swiper.controller.control.destroyed) return; 9999 swiper.controller.setTransition(duration, byController); 10000 }); 10001 Object.assign(swiper.controller, { 10002 setTranslate, 10003 setTransition 10004 }); 10005 } 10006 10007 function A11y(_ref) { 10008 let { 10009 swiper, 10010 extendParams, 10011 on 10012 } = _ref; 10013 extendParams({ 10014 a11y: { 10015 enabled: true, 10016 notificationClass: 'swiper-notification', 10017 prevSlideMessage: 'Previous slide', 10018 nextSlideMessage: 'Next slide', 10019 firstSlideMessage: 'This is the first slide', 10020 lastSlideMessage: 'This is the last slide', 10021 paginationBulletMessage: 'Go to slide {{index}}', 10022 slideLabelMessage: '{{index}} / {{slidesLength}}', 10023 containerMessage: null, 10024 containerRoleDescriptionMessage: null, 10025 itemRoleDescriptionMessage: null, 10026 slideRole: 'group', 10027 id: null 10028 } 10029 }); 10030 swiper.a11y = { 10031 clicked: false 10032 }; 10033 let liveRegion = null; 10034 function notify(message) { 10035 const notification = liveRegion; 10036 if (notification.length === 0) return; 10037 notification.innerHTML = ''; 10038 notification.innerHTML = message; 10039 } 10040 function getRandomNumber(size) { 10041 if (size === void 0) { 10042 size = 16; 10043 } 10044 const randomChar = () => Math.round(16 * Math.random()).toString(16); 10045 return 'x'.repeat(size).replace(/x/g, randomChar); 10046 } 10047 function makeElFocusable(el) { 10048 el = makeElementsArray(el); 10049 el.forEach(subEl => { 10050 subEl.setAttribute('tabIndex', '0'); 10051 }); 10052 } 10053 function makeElNotFocusable(el) { 10054 el = makeElementsArray(el); 10055 el.forEach(subEl => { 10056 subEl.setAttribute('tabIndex', '-1'); 10057 }); 10058 } 10059 function addElRole(el, role) { 10060 el = makeElementsArray(el); 10061 el.forEach(subEl => { 10062 subEl.setAttribute('role', role); 10063 }); 10064 } 10065 function addElRoleDescription(el, description) { 10066 el = makeElementsArray(el); 10067 el.forEach(subEl => { 10068 subEl.setAttribute('aria-roledescription', description); 10069 }); 10070 } 10071 function addElControls(el, controls) { 10072 el = makeElementsArray(el); 10073 el.forEach(subEl => { 10074 subEl.setAttribute('aria-controls', controls); 10075 }); 10076 } 10077 function addElLabel(el, label) { 10078 el = makeElementsArray(el); 10079 el.forEach(subEl => { 10080 subEl.setAttribute('aria-label', label); 10081 }); 10082 } 10083 function addElId(el, id) { 10084 el = makeElementsArray(el); 10085 el.forEach(subEl => { 10086 subEl.setAttribute('id', id); 10087 }); 10088 } 10089 function addElLive(el, live) { 10090 el = makeElementsArray(el); 10091 el.forEach(subEl => { 10092 subEl.setAttribute('aria-live', live); 10093 }); 10094 } 10095 function disableEl(el) { 10096 el = makeElementsArray(el); 10097 el.forEach(subEl => { 10098 subEl.setAttribute('aria-disabled', true); 10099 }); 10100 } 10101 function enableEl(el) { 10102 el = makeElementsArray(el); 10103 el.forEach(subEl => { 10104 subEl.setAttribute('aria-disabled', false); 10105 }); 10106 } 10107 function onEnterOrSpaceKey(e) { 10108 if (e.keyCode !== 13 && e.keyCode !== 32) return; 10109 const params = swiper.params.a11y; 10110 const targetEl = e.target; 10111 if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) { 10112 if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return; 10113 } 10114 if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) { 10115 if (!(swiper.isEnd && !swiper.params.loop)) { 10116 swiper.slideNext(); 10117 } 10118 if (swiper.isEnd) { 10119 notify(params.lastSlideMessage); 10120 } else { 10121 notify(params.nextSlideMessage); 10122 } 10123 } 10124 if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) { 10125 if (!(swiper.isBeginning && !swiper.params.loop)) { 10126 swiper.slidePrev(); 10127 } 10128 if (swiper.isBeginning) { 10129 notify(params.firstSlideMessage); 10130 } else { 10131 notify(params.prevSlideMessage); 10132 } 10133 } 10134 if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) { 10135 targetEl.click(); 10136 } 10137 } 10138 function updateNavigation() { 10139 if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return; 10140 const { 10141 nextEl, 10142 prevEl 10143 } = swiper.navigation; 10144 if (prevEl) { 10145 if (swiper.isBeginning) { 10146 disableEl(prevEl); 10147 makeElNotFocusable(prevEl); 10148 } else { 10149 enableEl(prevEl); 10150 makeElFocusable(prevEl); 10151 } 10152 } 10153 if (nextEl) { 10154 if (swiper.isEnd) { 10155 disableEl(nextEl); 10156 makeElNotFocusable(nextEl); 10157 } else { 10158 enableEl(nextEl); 10159 makeElFocusable(nextEl); 10160 } 10161 } 10162 } 10163 function hasPagination() { 10164 return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length; 10165 } 10166 function hasClickablePagination() { 10167 return hasPagination() && swiper.params.pagination.clickable; 10168 } 10169 function updatePagination() { 10170 const params = swiper.params.a11y; 10171 if (!hasPagination()) return;
10172 swiper.pagination.bullets.forEach(bulletEl => { 10173 if (swiper.params.pagination.clickable) { 10174 makeElFocusable(bulletEl); 10175 if (!swiper.params.pagination.renderBullet) { 10176 addElRole(bulletEl, 'button'); 10177 addElLabel(bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, elementIndex(bulletEl) + 1)); 10178 } 10179 } 10180 if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) { 10181 bulletEl.setAttribute('aria-current', 'true'); 10182 } else { 10183 bulletEl.removeAttribute('aria-current'); 10184 } 10185 }); 10186 } 10187 const initNavEl = (el, wrapperId, message) => { 10188 makeElFocusable(el); 10189 if (el.tagName !== 'BUTTON') { 10190 addElRole(el, 'button'); 10191 el.addEventListener('keydown', onEnterOrSpaceKey); 10192 } 10193 addElLabel(el, message); 10194 addElControls(el, wrapperId); 10195 }; 10196 const handlePointerDown = () => { 10197 swiper.a11y.clicked = true; 10198 }; 10199 const handlePointerUp = () => { 10200 requestAnimationFrame(() => { 10201 requestAnimationFrame(() => { 10202 if (!swiper.destroyed) { 10203 swiper.a11y.clicked = false; 10204 } 10205 }); 10206 }); 10207 }; 10208 const handleFocus = e => { 10209 if (swiper.a11y.clicked) return; 10210 const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 10211 if (!slideEl || !swiper.slides.includes(slideEl)) return; 10212 const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex; 10213 const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl); 10214 if (isActive || isVisible) return; 10215 if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return; 10216 if (swiper.isHorizontal()) { 10217 swiper.el.scrollLeft = 0; 10218 } else { 10219 swiper.el.scrollTop = 0; 10220 } 10221 swiper.slideTo(swiper.slides.indexOf(slideEl), 0); 10222 }; 10223 const initSlides = () => { 10224 const params = swiper.params.a11y; 10225 if (params.itemRoleDescriptionMessage) { 10226 addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage); 10227 } 10228 if (params.slideRole) { 10229 addElRole(swiper.slides, params.slideRole); 10230 } 10231 const slidesLength = swiper.slides.length; 10232 if (params.slideLabelMessage) { 10233 swiper.slides.forEach((slideEl, index) => { 10234 const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index; 10235 const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength); 10236 addElLabel(slideEl, ariaLabelMessage); 10237 }); 10238 } 10239 }; 10240 const init = () => { 10241 const params = swiper.params.a11y; 10242 swiper.el.append(liveRegion); 10243 10244 // Container 10245 const containerEl = swiper.el; 10246 if (params.containerRoleDescriptionMessage) { 10247 addElRoleDescription(containerEl, params.containerRoleDescriptionMessage); 10248 } 10249 if (params.containerMessage) { 10250 addElLabel(containerEl, params.containerMessage); 10251 } 10252 10253 // Wrapper 10254 const wrapperEl = swiper.wrapperEl; 10255 const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`; 10256 const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite'; 10257 addElId(wrapperEl, wrapperId); 10258 addElLive(wrapperEl, live); 10259 10260 // Slide 10261 initSlides(); 10262 10263 // Navigation 10264 let { 10265 nextEl, 10266 prevEl 10267 } = swiper.navigation ? swiper.navigation : {}; 10268 nextEl = makeElementsArray(nextEl); 10269 prevEl = makeElementsArray(prevEl); 10270 if (nextEl) { 10271 nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage)); 10272 } 10273 if (prevEl) { 10274 prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage)); 10275 } 10276 10277 // Pagination 10278 if (hasClickablePagination()) { 10279 const paginationEl = makeElementsArray(swiper.pagination.el); 10280 paginationEl.forEach(el => { 10281 el.addEventListener('keydown', onEnterOrSpaceKey); 10282 }); 10283 } 10284 10285 // Tab focus 10286 swiper.el.addEventListener('focus', handleFocus, true); 10287 swiper.el.addEventListener('pointerdown', handlePointerDown, true); 10288 swiper.el.addEventListener('pointerup', handlePointerUp, true); 10289 }; 10290 function destroy() { 10291 if (liveRegion) liveRegion.remove(); 10292 let { 10293 nextEl, 10294 prevEl 10295 } = swiper.navigation ? swiper.navigation : {}; 10296 nextEl = makeElementsArray(nextEl); 10297 prevEl = makeElementsArray(prevEl); 10298 if (nextEl) { 10299 nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey)); 10300 } 10301 if (prevEl) { 10302 prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey)); 10303 } 10304 10305 // Pagination 10306 if (hasClickablePagination()) { 10307 const paginationEl = makeElementsArray(swiper.pagination.el); 10308 paginationEl.forEach(el => { 10309 el.removeEventListener('keydown', onEnterOrSpaceKey); 10310 }); 10311 } 10312 10313 // Tab focus 10314 swiper.el.removeEventListener('focus', handleFocus, true); 10315 swiper.el.removeEventListener('pointerdown', handlePointerDown, true); 10316 swiper.el.removeEventListener('pointerup', handlePointerUp, true); 10317 } 10318 on('beforeInit', () => { 10319 liveRegion = createElement('span', swiper.params.a11y.notificationClass); 10320 liveRegion.setAttribute('aria-live', 'assertive'); 10321 liveRegion.setAttribute('aria-atomic', 'true'); 10322 }); 10323 on('afterInit', () => { 10324 if (!swiper.params.a11y.enabled) return; 10325 init(); 10326 }); 10327 on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => { 10328 if (!swiper.params.a11y.enabled) return; 10329 initSlides(); 10330 }); 10331 on('fromEdge toEdge afterInit lock unlock', () => { 10332 if (!swiper.params.a11y.enabled) return; 10333 updateNavigation(); 10334 }); 10335 on('paginationUpdate', () => { 10336 if (!swiper.params.a11y.enabled) return; 10337 updatePagination(); 10338 }); 10339 on('destroy', () => { 10340 if (!swiper.params.a11y.enabled) return; 10341 destroy(); 10342 }); 10343 } 10344 10345 function History(_ref) { 10346 let { 10347 swiper, 10348 extendParams, 10349 on 10350 } = _ref; 10351 extendParams({ 10352 history: { 10353 enabled: false, 10354 root: '', 10355 replaceState: false, 10356 key: 'slides', 10357 keepQuery: false 10358 } 10359 }); 10360 let initialized = false;
vendor: 9,277 bytes, lines 10361-10627
10361 let paths = {}; 10362 const slugify = text => { 10363 return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); 10364 }; 10365 const getPathValues = urlOverride => { 10366 const window = getWindow(); 10367 let location; 10368 if (urlOverride) { 10369 location = new URL(urlOverride); 10370 } else { 10371 location = window.location; 10372 } 10373 const pathArray = location.pathname.slice(1).split('/').filter(part => part !== ''); 10374 const total = pathArray.length; 10375 const key = pathArray[total - 2]; 10376 const value = pathArray[total - 1]; 10377 return { 10378 key, 10379 value 10380 }; 10381 }; 10382 const setHistory = (key, index) => { 10383 const window = getWindow(); 10384 if (!initialized || !swiper.params.history.enabled) return; 10385 let location; 10386 if (swiper.params.url) { 10387 location = new URL(swiper.params.url); 10388 } else { 10389 location = window.location; 10390 } 10391 const slide = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${index}"]`) : swiper.slides[index]; 10392 let value = slugify(slide.getAttribute('data-history')); 10393 if (swiper.params.history.root.length > 0) { 10394 let root = swiper.params.history.root; 10395 if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1); 10396 value = `${root}/${key ? `${key}/` : ''}${value}`; 10397 } else if (!location.pathname.includes(key)) { 10398 value = `${key ? `${key}/` : ''}${value}`; 10399 } 10400 if (swiper.params.history.keepQuery) { 10401 value += location.search; 10402 } 10403 const currentState = window.history.state; 10404 if (currentState && currentState.value === value) { 10405 return; 10406 } 10407 if (swiper.params.history.replaceState) { 10408 window.history.replaceState({ 10409 value 10410 }, null, value); 10411 } else { 10412 window.history.pushState({ 10413 value 10414 }, null, value); 10415 } 10416 }; 10417 const scrollToSlide = (speed, value, runCallbacks) => { 10418 if (value) { 10419 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 10420 const slide = swiper.slides[i]; 10421 const slideHistory = slugify(slide.getAttribute('data-history')); 10422 if (slideHistory === value) { 10423 const index = swiper.getSlideIndex(slide); 10424 swiper.slideTo(index, speed, runCallbacks); 10425 } 10426 } 10427 } else { 10428 swiper.slideTo(0, speed, runCallbacks); 10429 } 10430 }; 10431 const setHistoryPopState = () => { 10432 paths = getPathValues(swiper.params.url); 10433 scrollToSlide(swiper.params.speed, paths.value, false); 10434 }; 10435 const init = () => { 10436 const window = getWindow(); 10437 if (!swiper.params.history) return; 10438 if (!window.history || !window.history.pushState) { 10439 swiper.params.history.enabled = false; 10440 swiper.params.hashNavigation.enabled = true; 10441 return; 10442 } 10443 initialized = true; 10444 paths = getPathValues(swiper.params.url); 10445 if (!paths.key && !paths.value) { 10446 if (!swiper.params.history.replaceState) { 10447 window.addEventListener('popstate', setHistoryPopState); 10448 } 10449 return; 10450 } 10451 scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit); 10452 if (!swiper.params.history.replaceState) { 10453 window.addEventListener('popstate', setHistoryPopState); 10454 } 10455 }; 10456 const destroy = () => { 10457 const window = getWindow(); 10458 if (!swiper.params.history.replaceState) { 10459 window.removeEventListener('popstate', setHistoryPopState); 10460 } 10461 }; 10462 on('init', () => { 10463 if (swiper.params.history.enabled) { 10464 init(); 10465 } 10466 }); 10467 on('destroy', () => { 10468 if (swiper.params.history.enabled) { 10469 destroy(); 10470 } 10471 }); 10472 on('transitionEnd _freeModeNoMomentumRelease', () => { 10473 if (initialized) { 10474 setHistory(swiper.params.history.key, swiper.activeIndex); 10475 } 10476 }); 10477 on('slideChange', () => { 10478 if (initialized && swiper.params.cssMode) { 10479 setHistory(swiper.params.history.key, swiper.activeIndex); 10480 } 10481 }); 10482 } 10483 10484 function HashNavigation(_ref) { 10485 let { 10486 swiper, 10487 extendParams, 10488 emit, 10489 on 10490 } = _ref; 10491 let initialized = false; 10492 const document = getDocument(); 10493 const window = getWindow(); 10494 extendParams({ 10495 hashNavigation: { 10496 enabled: false, 10497 replaceState: false, 10498 watchState: false, 10499 getSlideIndex(_s, hash) { 10500 if (swiper.virtual && swiper.params.virtual.enabled) { 10501 const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0]; 10502 if (!slideWithHash) return 0; 10503 const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10); 10504 return index; 10505 } 10506 return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]); 10507 } 10508 } 10509 }); 10510 const onHashChange = () => { 10511 emit('hashChange'); 10512 const newHash = document.location.hash.replace('#', ''); 10513 const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex]; 10514 const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : ''; 10515 if (newHash !== activeSlideHash) { 10516 const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash); 10517 if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return; 10518 swiper.slideTo(newIndex); 10519 } 10520 }; 10521 const setHash = () => { 10522 if (!initialized || !swiper.params.hashNavigation.enabled) return; 10523 const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex]; 10524 const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : ''; 10525 if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { 10526 window.history.replaceState(null, null, `#${activeSlideHash}` || ''); 10527 emit('hashSet'); 10528 } else { 10529 document.location.hash = activeSlideHash || ''; 10530 emit('hashSet'); 10531 } 10532 }; 10533 const init = () => { 10534 if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; 10535 initialized = true; 10536 const hash = document.location.hash.replace('#', ''); 10537 if (hash) { 10538 const speed = 0; 10539 const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash); 10540 swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true); 10541 } 10542 if (swiper.params.hashNavigation.watchState) { 10543 window.addEventListener('hashchange', onHashChange); 10544 } 10545 }; 10546 const destroy = () => { 10547 if (swiper.params.hashNavigation.watchState) { 10548 window.removeEventListener('hashchange', onHashChange); 10549 } 10550 }; 10551 on('init', () => { 10552 if (swiper.params.hashNavigation.enabled) { 10553 init(); 10554 } 10555 }); 10556 on('destroy', () => { 10557 if (swiper.params.hashNavigation.enabled) { 10558 destroy(); 10559 } 10560 }); 10561 on('transitionEnd _freeModeNoMomentumRelease', () => { 10562 if (initialized) { 10563 setHash(); 10564 } 10565 }); 10566 on('slideChange', () => { 10567 if (initialized && swiper.params.cssMode) { 10568 setHash(); 10569 } 10570 }); 10571 } 10572 10573 /* eslint no-underscore-dangle: "off" */ 10574 /* eslint no-use-before-define: "off" */ 10575 function Autoplay(_ref) { 10576 let { 10577 swiper, 10578 extendParams, 10579 on, 10580 emit, 10581 params 10582 } = _ref; 10583 swiper.autoplay = { 10584 running: false, 10585 paused: false, 10586 timeLeft: 0 10587 }; 10588 extendParams({ 10589 autoplay: { 10590 enabled: false, 10591 delay: 3000, 10592 waitForTransition: true, 10593 disableOnInteraction: false, 10594 stopOnLastSlide: false, 10595 reverseDirection: false, 10596 pauseOnMouseEnter: false 10597 } 10598 }); 10599 let timeout; 10600 let raf; 10601 let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000; 10602 let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000; 10603 let autoplayTimeLeft; 10604 let autoplayStartTime = new Date().getTime(); 10605 let wasPaused; 10606 let isTouched; 10607 let pausedByTouch; 10608 let touchStartTimeout; 10609 let slideChanged; 10610 let pausedByInteraction; 10611 let pausedByPointerEnter; 10612 function onTransitionEnd(e) { 10613 if (!swiper || swiper.destroyed || !swiper.wrapperEl) return; 10614 if (e.target !== swiper.wrapperEl) return; 10615 swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd); 10616 if (pausedByPointerEnter) { 10617 return; 10618 } 10619 resume(); 10620 } 10621 const calcTimeLeft = () => { 10622 if (swiper.destroyed || !swiper.autoplay.running) return; 10623 if (swiper.autoplay.paused) { 10624 wasPaused = true; 10625 } else if (wasPaused) { 10626 autoplayDelayCurrent = autoplayTimeLeft; 10627 wasPaused = false;
10628 } 10629 const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime(); 10630 swiper.autoplay.timeLeft = timeLeft; 10631 emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal); 10632 raf = requestAnimationFrame(() => { 10633 calcTimeLeft(); 10634 }); 10635 }; 10636 const getSlideDelay = () => { 10637 let activeSlideEl; 10638 if (swiper.virtual && swiper.params.virtual.enabled) { 10639 activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0]; 10640 } else { 10641 activeSlideEl = swiper.slides[swiper.activeIndex]; 10642 } 10643 if (!activeSlideEl) return undefined; 10644 const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10); 10645 return currentSlideDelay; 10646 }; 10647 const run = delayForce => { 10648 if (swiper.destroyed || !swiper.autoplay.running) return; 10649 cancelAnimationFrame(raf); 10650 calcTimeLeft(); 10651 let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce; 10652 autoplayDelayTotal = swiper.params.autoplay.delay; 10653 autoplayDelayCurrent = swiper.params.autoplay.delay; 10654 const currentSlideDelay = getSlideDelay(); 10655 if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') { 10656 delay = currentSlideDelay; 10657 autoplayDelayTotal = currentSlideDelay; 10658 autoplayDelayCurrent = currentSlideDelay; 10659 } 10660 autoplayTimeLeft = delay; 10661 const speed = swiper.params.speed; 10662 const proceed = () => { 10663 if (!swiper || swiper.destroyed) return; 10664 if (swiper.params.autoplay.reverseDirection) { 10665 if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) { 10666 swiper.slidePrev(speed, true, true); 10667 emit('autoplay'); 10668 } else if (!swiper.params.autoplay.stopOnLastSlide) { 10669 swiper.slideTo(swiper.slides.length - 1, speed, true, true); 10670 emit('autoplay'); 10671 } 10672 } else { 10673 if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) { 10674 swiper.slideNext(speed, true, true); 10675 emit('autoplay'); 10676 } else if (!swiper.params.autoplay.stopOnLastSlide) { 10677 swiper.slideTo(0, speed, true, true); 10678 emit('autoplay'); 10679 } 10680 } 10681 if (swiper.params.cssMode) { 10682 autoplayStartTime = new Date().getTime(); 10683 requestAnimationFrame(() => { 10684 run(); 10685 }); 10686 } 10687 }; 10688 if (delay > 0) { 10689 clearTimeout(timeout); 10690 timeout = setTimeout(() => { 10691 proceed(); 10692 }, delay); 10693 } else { 10694 requestAnimationFrame(() => { 10695 proceed(); 10696 }); 10697 } 10698 10699 // eslint-disable-next-line 10700 return delay; 10701 }; 10702 const start = () => { 10703 autoplayStartTime = new Date().getTime(); 10704 swiper.autoplay.running = true; 10705 run(); 10706 emit('autoplayStart'); 10707 }; 10708 const stop = () => { 10709 swiper.autoplay.running = false; 10710 clearTimeout(timeout); 10711 cancelAnimationFrame(raf); 10712 emit('autoplayStop'); 10713 }; 10714 const pause = (internal, reset) => { 10715 if (swiper.destroyed || !swiper.autoplay.running) return; 10716 clearTimeout(timeout); 10717 if (!internal) { 10718 pausedByInteraction = true; 10719 } 10720 const proceed = () => { 10721 emit('autoplayPause'); 10722 if (swiper.params.autoplay.waitForTransition) { 10723 swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd); 10724 } else { 10725 resume(); 10726 } 10727 }; 10728 swiper.autoplay.paused = true; 10729 if (reset) { 10730 if (slideChanged) { 10731 autoplayTimeLeft = swiper.params.autoplay.delay; 10732 } 10733 slideChanged = false; 10734 proceed(); 10735 return; 10736 } 10737 const delay = autoplayTimeLeft || swiper.params.autoplay.delay; 10738 autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime); 10739 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return; 10740 if (autoplayTimeLeft < 0) autoplayTimeLeft = 0; 10741 proceed(); 10742 }; 10743 const resume = () => { 10744 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return; 10745 autoplayStartTime = new Date().getTime(); 10746 if (pausedByInteraction) { 10747 pausedByInteraction = false;
vendor: 10,943 bytes, lines 10748-11053
10748 run(autoplayTimeLeft); 10749 } else { 10750 run(); 10751 } 10752 swiper.autoplay.paused = false; 10753 emit('autoplayResume'); 10754 }; 10755 const onVisibilityChange = () => { 10756 if (swiper.destroyed || !swiper.autoplay.running) return; 10757 const document = getDocument(); 10758 if (document.visibilityState === 'hidden') { 10759 pausedByInteraction = true; 10760 pause(true); 10761 } 10762 if (document.visibilityState === 'visible') { 10763 resume(); 10764 } 10765 }; 10766 const onPointerEnter = e => { 10767 if (e.pointerType !== 'mouse') return; 10768 pausedByInteraction = true; 10769 pausedByPointerEnter = true; 10770 if (swiper.animating || swiper.autoplay.paused) return; 10771 pause(true); 10772 }; 10773 const onPointerLeave = e => { 10774 if (e.pointerType !== 'mouse') return; 10775 pausedByPointerEnter = false; 10776 if (swiper.autoplay.paused) { 10777 resume(); 10778 } 10779 }; 10780 const attachMouseEvents = () => { 10781 if (swiper.params.autoplay.pauseOnMouseEnter) { 10782 swiper.el.addEventListener('pointerenter', onPointerEnter); 10783 swiper.el.addEventListener('pointerleave', onPointerLeave); 10784 } 10785 }; 10786 const detachMouseEvents = () => { 10787 swiper.el.removeEventListener('pointerenter', onPointerEnter); 10788 swiper.el.removeEventListener('pointerleave', onPointerLeave); 10789 }; 10790 const attachDocumentEvents = () => { 10791 const document = getDocument(); 10792 document.addEventListener('visibilitychange', onVisibilityChange); 10793 }; 10794 const detachDocumentEvents = () => { 10795 const document = getDocument(); 10796 document.removeEventListener('visibilitychange', onVisibilityChange); 10797 }; 10798 on('init', () => { 10799 if (swiper.params.autoplay.enabled) { 10800 attachMouseEvents(); 10801 attachDocumentEvents(); 10802 start(); 10803 } 10804 }); 10805 on('destroy', () => { 10806 detachMouseEvents(); 10807 detachDocumentEvents(); 10808 if (swiper.autoplay.running) { 10809 stop(); 10810 } 10811 }); 10812 on('_freeModeStaticRelease', () => { 10813 if (pausedByTouch || pausedByInteraction) { 10814 resume(); 10815 } 10816 }); 10817 on('_freeModeNoMomentumRelease', () => { 10818 if (!swiper.params.autoplay.disableOnInteraction) { 10819 pause(true, true); 10820 } else { 10821 stop(); 10822 } 10823 }); 10824 on('beforeTransitionStart', (_s, speed, internal) => { 10825 if (swiper.destroyed || !swiper.autoplay.running) return; 10826 if (internal || !swiper.params.autoplay.disableOnInteraction) { 10827 pause(true, true); 10828 } else { 10829 stop(); 10830 } 10831 }); 10832 on('sliderFirstMove', () => { 10833 if (swiper.destroyed || !swiper.autoplay.running) return; 10834 if (swiper.params.autoplay.disableOnInteraction) { 10835 stop(); 10836 return; 10837 } 10838 isTouched = true; 10839 pausedByTouch = false; 10840 pausedByInteraction = false; 10841 touchStartTimeout = setTimeout(() => { 10842 pausedByInteraction = true; 10843 pausedByTouch = true; 10844 pause(true); 10845 }, 200); 10846 }); 10847 on('touchEnd', () => { 10848 if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return; 10849 clearTimeout(touchStartTimeout); 10850 clearTimeout(timeout); 10851 if (swiper.params.autoplay.disableOnInteraction) { 10852 pausedByTouch = false; 10853 isTouched = false; 10854 return; 10855 } 10856 if (pausedByTouch && swiper.params.cssMode) resume(); 10857 pausedByTouch = false; 10858 isTouched = false; 10859 }); 10860 on('slideChange', () => { 10861 if (swiper.destroyed || !swiper.autoplay.running) return; 10862 slideChanged = true; 10863 }); 10864 Object.assign(swiper.autoplay, { 10865 start, 10866 stop, 10867 pause, 10868 resume 10869 }); 10870 } 10871 10872 function Thumb(_ref) { 10873 let { 10874 swiper, 10875 extendParams, 10876 on 10877 } = _ref; 10878 extendParams({ 10879 thumbs: { 10880 swiper: null, 10881 multipleActiveThumbs: true, 10882 autoScrollOffset: 0, 10883 slideThumbActiveClass: 'swiper-slide-thumb-active', 10884 thumbsContainerClass: 'swiper-thumbs' 10885 } 10886 }); 10887 let initialized = false; 10888 let swiperCreated = false; 10889 swiper.thumbs = { 10890 swiper: null 10891 }; 10892 function onThumbClick() { 10893 const thumbsSwiper = swiper.thumbs.swiper; 10894 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 10895 const clickedIndex = thumbsSwiper.clickedIndex; 10896 const clickedSlide = thumbsSwiper.clickedSlide; 10897 if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return; 10898 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 10899 let slideToIndex; 10900 if (thumbsSwiper.params.loop) { 10901 slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 10902 } else { 10903 slideToIndex = clickedIndex; 10904 } 10905 if (swiper.params.loop) { 10906 swiper.slideToLoop(slideToIndex); 10907 } else { 10908 swiper.slideTo(slideToIndex); 10909 } 10910 } 10911 function init() { 10912 const { 10913 thumbs: thumbsParams 10914 } = swiper.params; 10915 if (initialized) return false; 10916 initialized = true; 10917 const SwiperClass = swiper.constructor; 10918 if (thumbsParams.swiper instanceof SwiperClass) { 10919 swiper.thumbs.swiper = thumbsParams.swiper; 10920 Object.assign(swiper.thumbs.swiper.originalParams, { 10921 watchSlidesProgress: true, 10922 slideToClickedSlide: false 10923 }); 10924 Object.assign(swiper.thumbs.swiper.params, { 10925 watchSlidesProgress: true, 10926 slideToClickedSlide: false 10927 }); 10928 swiper.thumbs.swiper.update(); 10929 } else if (isObject(thumbsParams.swiper)) { 10930 const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper); 10931 Object.assign(thumbsSwiperParams, { 10932 watchSlidesProgress: true, 10933 slideToClickedSlide: false 10934 }); 10935 swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams); 10936 swiperCreated = true; 10937 } 10938 swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass); 10939 swiper.thumbs.swiper.on('tap', onThumbClick); 10940 return true; 10941 } 10942 function update(initial) { 10943 const thumbsSwiper = swiper.thumbs.swiper; 10944 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 10945 const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; 10946 10947 // Activate thumbs 10948 let thumbsToActivate = 1; 10949 const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 10950 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 10951 thumbsToActivate = swiper.params.slidesPerView; 10952 } 10953 if (!swiper.params.thumbs.multipleActiveThumbs) { 10954 thumbsToActivate = 1; 10955 } 10956 thumbsToActivate = Math.floor(thumbsToActivate); 10957 thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass)); 10958 if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { 10959 for (let i = 0; i < thumbsToActivate; i += 1) { 10960 elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index="${swiper.realIndex + i}"]`).forEach(slideEl => { 10961 slideEl.classList.add(thumbActiveClass); 10962 }); 10963 } 10964 } else { 10965 for (let i = 0; i < thumbsToActivate; i += 1) { 10966 if (thumbsSwiper.slides[swiper.realIndex + i]) { 10967 thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass); 10968 } 10969 } 10970 } 10971 const autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 10972 const useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 10973 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 10974 const currentThumbsIndex = thumbsSwiper.activeIndex; 10975 let newThumbsIndex; 10976 let direction; 10977 if (thumbsSwiper.params.loop) { 10978 const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0]; 10979 newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide); 10980 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 10981 } else { 10982 newThumbsIndex = swiper.realIndex; 10983 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 10984 } 10985 if (useOffset) { 10986 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 10987 } 10988 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 10989 if (thumbsSwiper.params.centeredSlides) { 10990 if (newThumbsIndex > currentThumbsIndex) { 10991 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 10992 } else { 10993 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 10994 } 10995 } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ; 10996 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 10997 } 10998 } 10999 } 11000 on('beforeInit', () => { 11001 const { 11002 thumbs 11003 } = swiper.params; 11004 if (!thumbs || !thumbs.swiper) return; 11005 if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) { 11006 const document = getDocument(); 11007 const getThumbsElementAndInit = () => { 11008 const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper; 11009 if (thumbsElement && thumbsElement.swiper) { 11010 thumbs.swiper = thumbsElement.swiper; 11011 init(); 11012 update(true); 11013 } else if (thumbsElement) { 11014 const onThumbsSwiper = e => { 11015 thumbs.swiper = e.detail[0]; 11016 thumbsElement.removeEventListener('init', onThumbsSwiper); 11017 init(); 11018 update(true); 11019 thumbs.swiper.update(); 11020 swiper.update(); 11021 }; 11022 thumbsElement.addEventListener('init', onThumbsSwiper); 11023 } 11024 return thumbsElement; 11025 }; 11026 const watchForThumbsToAppear = () => { 11027 if (swiper.destroyed) return; 11028 const thumbsElement = getThumbsElementAndInit(); 11029 if (!thumbsElement) { 11030 requestAnimationFrame(watchForThumbsToAppear); 11031 } 11032 }; 11033 requestAnimationFrame(watchForThumbsToAppear); 11034 } else { 11035 init(); 11036 update(true); 11037 } 11038 }); 11039 on('slideChange update resize observerUpdate', () => { 11040 update(); 11041 }); 11042 on('setTransition', (_s, duration) => { 11043 const thumbsSwiper = swiper.thumbs.swiper; 11044 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 11045 thumbsSwiper.setTransition(duration); 11046 }); 11047 on('beforeDestroy', () => { 11048 const thumbsSwiper = swiper.thumbs.swiper; 11049 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 11050 if (swiperCreated) { 11051 thumbsSwiper.destroy(); 11052 } 11053 });
11054 Object.assign(swiper.thumbs, { 11055 init, 11056 update 11057 }); 11058 } 11059 11060 function freeMode(_ref) { 11061 let { 11062 swiper, 11063 extendParams, 11064 emit, 11065 once 11066 } = _ref; 11067 extendParams({ 11068 freeMode: { 11069 enabled: false, 11070 momentum: true, 11071 momentumRatio: 1, 11072 momentumBounce: true, 11073 momentumBounceRatio: 1, 11074 momentumVelocityRatio: 1, 11075 sticky: false, 11076 minimumVelocity: 0.02 11077 } 11078 }); 11079 function onTouchStart() { 11080 if (swiper.params.cssMode) return; 11081 const translate = swiper.getTranslate(); 11082 swiper.setTranslate(translate); 11083 swiper.setTransition(0); 11084 swiper.touchEventsData.velocities.length = 0; 11085 swiper.freeMode.onTouchEnd({ 11086 currentPos: swiper.rtl ? swiper.translate : -swiper.translate 11087 }); 11088 } 11089 function onTouchMove() { 11090 if (swiper.params.cssMode) return; 11091 const { 11092 touchEventsData: data, 11093 touches 11094 } = swiper; 11095 // Velocity 11096 if (data.velocities.length === 0) { 11097 data.velocities.push({ 11098 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 11099 time: data.touchStartTime 11100 }); 11101 } 11102 data.velocities.push({ 11103 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 11104 time: now() 11105 }); 11106 } 11107 function onTouchEnd(_ref2) { 11108 let { 11109 currentPos 11110 } = _ref2; 11111 if (swiper.params.cssMode) return; 11112 const { 11113 params, 11114 wrapperEl, 11115 rtlTranslate: rtl, 11116 snapGrid, 11117 touchEventsData: data 11118 } = swiper; 11119 // Time diff 11120 const touchEndTime = now(); 11121 const timeDiff = touchEndTime - data.touchStartTime;
vendor: 7,302 bytes, lines 11122-11305
11122 if (currentPos < -swiper.minTranslate()) { 11123 swiper.slideTo(swiper.activeIndex); 11124 return; 11125 } 11126 if (currentPos > -swiper.maxTranslate()) { 11127 if (swiper.slides.length < snapGrid.length) { 11128 swiper.slideTo(snapGrid.length - 1); 11129 } else { 11130 swiper.slideTo(swiper.slides.length - 1); 11131 } 11132 return; 11133 } 11134 if (params.freeMode.momentum) { 11135 if (data.velocities.length > 1) { 11136 const lastMoveEvent = data.velocities.pop(); 11137 const velocityEvent = data.velocities.pop(); 11138 const distance = lastMoveEvent.position - velocityEvent.position; 11139 const time = lastMoveEvent.time - velocityEvent.time; 11140 swiper.velocity = distance / time; 11141 swiper.velocity /= 2; 11142 if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) { 11143 swiper.velocity = 0; 11144 } 11145 // this implies that the user stopped moving a finger then released. 11146 // There would be no events with distance zero, so the last event is stale. 11147 if (time > 150 || now() - lastMoveEvent.time > 300) { 11148 swiper.velocity = 0; 11149 } 11150 } else { 11151 swiper.velocity = 0; 11152 } 11153 swiper.velocity *= params.freeMode.momentumVelocityRatio; 11154 data.velocities.length = 0; 11155 let momentumDuration = 1000 * params.freeMode.momentumRatio; 11156 const momentumDistance = swiper.velocity * momentumDuration; 11157 let newPosition = swiper.translate + momentumDistance; 11158 if (rtl) newPosition = -newPosition; 11159 let doBounce = false; 11160 let afterBouncePosition; 11161 const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio; 11162 let needsLoopFix; 11163 if (newPosition < swiper.maxTranslate()) { 11164 if (params.freeMode.momentumBounce) { 11165 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 11166 newPosition = swiper.maxTranslate() - bounceAmount; 11167 } 11168 afterBouncePosition = swiper.maxTranslate(); 11169 doBounce = true; 11170 data.allowMomentumBounce = true; 11171 } else { 11172 newPosition = swiper.maxTranslate(); 11173 } 11174 if (params.loop && params.centeredSlides) needsLoopFix = true; 11175 } else if (newPosition > swiper.minTranslate()) { 11176 if (params.freeMode.momentumBounce) { 11177 if (newPosition - swiper.minTranslate() > bounceAmount) { 11178 newPosition = swiper.minTranslate() + bounceAmount; 11179 } 11180 afterBouncePosition = swiper.minTranslate(); 11181 doBounce = true; 11182 data.allowMomentumBounce = true; 11183 } else { 11184 newPosition = swiper.minTranslate(); 11185 } 11186 if (params.loop && params.centeredSlides) needsLoopFix = true; 11187 } else if (params.freeMode.sticky) { 11188 let nextSlide; 11189 for (let j = 0; j < snapGrid.length; j += 1) { 11190 if (snapGrid[j] > -newPosition) { 11191 nextSlide = j; 11192 break; 11193 } 11194 } 11195 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 11196 newPosition = snapGrid[nextSlide]; 11197 } else { 11198 newPosition = snapGrid[nextSlide - 1]; 11199 } 11200 newPosition = -newPosition; 11201 } 11202 if (needsLoopFix) { 11203 once('transitionEnd', () => { 11204 swiper.loopFix(); 11205 }); 11206 } 11207 // Fix duration 11208 if (swiper.velocity !== 0) { 11209 if (rtl) { 11210 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 11211 } else { 11212 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 11213 } 11214 if (params.freeMode.sticky) { 11215 // If freeMode.sticky is active and the user ends a swipe with a slow-velocity 11216 // event, then durations can be 20+ seconds to slide one (or zero!) slides. 11217 // It's easy to see this when simulating touch with mouse events. To fix this, 11218 // limit single-slide swipes to the default slide duration. This also has the 11219 // nice side effect of matching slide speed if the user stopped moving before 11220 // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. 11221 // For faster swipes, also apply limits (albeit higher ones). 11222 const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 11223 const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 11224 if (moveDistance < currentSlideSize) { 11225 momentumDuration = params.speed; 11226 } else if (moveDistance < 2 * currentSlideSize) { 11227 momentumDuration = params.speed * 1.5; 11228 } else { 11229 momentumDuration = params.speed * 2.5; 11230 } 11231 } 11232 } else if (params.freeMode.sticky) { 11233 swiper.slideToClosest(); 11234 return; 11235 } 11236 if (params.freeMode.momentumBounce && doBounce) { 11237 swiper.updateProgress(afterBouncePosition); 11238 swiper.setTransition(momentumDuration); 11239 swiper.setTranslate(newPosition); 11240 swiper.transitionStart(true, swiper.swipeDirection); 11241 swiper.animating = true; 11242 elementTransitionEnd(wrapperEl, () => { 11243 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 11244 emit('momentumBounce'); 11245 swiper.setTransition(params.speed); 11246 setTimeout(() => { 11247 swiper.setTranslate(afterBouncePosition); 11248 elementTransitionEnd(wrapperEl, () => { 11249 if (!swiper || swiper.destroyed) return; 11250 swiper.transitionEnd(); 11251 }); 11252 }, 0); 11253 }); 11254 } else if (swiper.velocity) { 11255 emit('_freeModeNoMomentumRelease'); 11256 swiper.updateProgress(newPosition); 11257 swiper.setTransition(momentumDuration); 11258 swiper.setTranslate(newPosition); 11259 swiper.transitionStart(true, swiper.swipeDirection); 11260 if (!swiper.animating) { 11261 swiper.animating = true; 11262 elementTransitionEnd(wrapperEl, () => { 11263 if (!swiper || swiper.destroyed) return; 11264 swiper.transitionEnd(); 11265 }); 11266 } 11267 } else { 11268 swiper.updateProgress(newPosition); 11269 } 11270 swiper.updateActiveIndex(); 11271 swiper.updateSlidesClasses(); 11272 } else if (params.freeMode.sticky) { 11273 swiper.slideToClosest(); 11274 return; 11275 } else if (params.freeMode) { 11276 emit('_freeModeNoMomentumRelease'); 11277 } 11278 if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) { 11279 emit('_freeModeStaticRelease'); 11280 swiper.updateProgress(); 11281 swiper.updateActiveIndex(); 11282 swiper.updateSlidesClasses(); 11283 } 11284 } 11285 Object.assign(swiper, { 11286 freeMode: { 11287 onTouchStart, 11288 onTouchMove, 11289 onTouchEnd 11290 } 11291 }); 11292 } 11293 11294 function Grid(_ref) { 11295 let { 11296 swiper, 11297 extendParams, 11298 on 11299 } = _ref; 11300 extendParams({ 11301 grid: { 11302 rows: 1, 11303 fill: 'column' 11304 } 11305 });
vendor: 1,326 bytes, lines 11306-11340
11306 let slidesNumberEvenToRows; 11307 let slidesPerRow; 11308 let numFullColumns; 11309 let wasMultiRow; 11310 const getSpaceBetween = () => { 11311 let spaceBetween = swiper.params.spaceBetween; 11312 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 11313 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 11314 } else if (typeof spaceBetween === 'string') { 11315 spaceBetween = parseFloat(spaceBetween); 11316 } 11317 return spaceBetween; 11318 }; 11319 const initSlides = slides => { 11320 const { 11321 slidesPerView 11322 } = swiper.params; 11323 const { 11324 rows, 11325 fill 11326 } = swiper.params.grid; 11327 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length; 11328 numFullColumns = Math.floor(slidesLength / rows); 11329 if (Math.floor(slidesLength / rows) === slidesLength / rows) { 11330 slidesNumberEvenToRows = slidesLength; 11331 } else { 11332 slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows; 11333 } 11334 if (slidesPerView !== 'auto' && fill === 'row') { 11335 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows); 11336 } 11337 slidesPerRow = slidesNumberEvenToRows / rows; 11338 }; 11339 const unsetSlides = () => { 11340 if (swiper.slides) {
vendor: 23,071 bytes, lines 11341-12018
11341 swiper.slides.forEach(slide => { 11342 if (slide.swiperSlideGridSet) { 11343 slide.style.height = ''; 11344 slide.style[swiper.getDirectionLabel('margin-top')] = ''; 11345 } 11346 }); 11347 } 11348 }; 11349 const updateSlide = (i, slide, slides) => { 11350 const { 11351 slidesPerGroup 11352 } = swiper.params; 11353 const spaceBetween = getSpaceBetween(); 11354 const { 11355 rows, 11356 fill 11357 } = swiper.params.grid; 11358 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length; 11359 // Set slides order 11360 let newSlideOrderIndex; 11361 let column; 11362 let row; 11363 if (fill === 'row' && slidesPerGroup > 1) { 11364 const groupIndex = Math.floor(i / (slidesPerGroup * rows)); 11365 const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex; 11366 const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup); 11367 row = Math.floor(slideIndexInGroup / columnsInGroup); 11368 column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup; 11369 newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows; 11370 slide.style.order = newSlideOrderIndex; 11371 } else if (fill === 'column') { 11372 column = Math.floor(i / rows); 11373 row = i - column * rows; 11374 if (column > numFullColumns || column === numFullColumns && row === rows - 1) { 11375 row += 1; 11376 if (row >= rows) { 11377 row = 0; 11378 column += 1; 11379 } 11380 } 11381 } else { 11382 row = Math.floor(i / slidesPerRow); 11383 column = i - row * slidesPerRow; 11384 } 11385 slide.row = row; 11386 slide.column = column; 11387 slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`; 11388 slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : ''; 11389 slide.swiperSlideGridSet = true; 11390 }; 11391 const updateWrapperSize = (slideSize, snapGrid) => { 11392 const { 11393 centeredSlides, 11394 roundLengths 11395 } = swiper.params; 11396 const spaceBetween = getSpaceBetween(); 11397 const { 11398 rows 11399 } = swiper.params.grid; 11400 swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows; 11401 swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween; 11402 if (!swiper.params.cssMode) { 11403 swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 11404 } 11405 if (centeredSlides) { 11406 const newSlidesGrid = []; 11407 for (let i = 0; i < snapGrid.length; i += 1) { 11408 let slidesGridItem = snapGrid[i]; 11409 if (roundLengths) slidesGridItem = Math.floor(slidesGridItem); 11410 if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 11411 } 11412 snapGrid.splice(0, snapGrid.length); 11413 snapGrid.push(...newSlidesGrid); 11414 } 11415 }; 11416 const onInit = () => { 11417 wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1; 11418 }; 11419 const onUpdate = () => { 11420 const { 11421 params, 11422 el 11423 } = swiper; 11424 const isMultiRow = params.grid && params.grid.rows > 1; 11425 if (wasMultiRow && !isMultiRow) { 11426 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 11427 numFullColumns = 1; 11428 swiper.emitContainerClasses(); 11429 } else if (!wasMultiRow && isMultiRow) { 11430 el.classList.add(`${params.containerModifierClass}grid`); 11431 if (params.grid.fill === 'column') { 11432 el.classList.add(`${params.containerModifierClass}grid-column`); 11433 } 11434 swiper.emitContainerClasses(); 11435 } 11436 wasMultiRow = isMultiRow; 11437 }; 11438 on('init', onInit); 11439 on('update', onUpdate); 11440 swiper.grid = { 11441 initSlides, 11442 unsetSlides, 11443 updateSlide, 11444 updateWrapperSize 11445 }; 11446 } 11447 11448 function appendSlide(slides) { 11449 const swiper = this; 11450 const { 11451 params, 11452 slidesEl 11453 } = swiper; 11454 if (params.loop) { 11455 swiper.loopDestroy(); 11456 } 11457 const appendElement = slideEl => { 11458 if (typeof slideEl === 'string') { 11459 const tempDOM = document.createElement('div'); 11460 tempDOM.innerHTML = slideEl; 11461 slidesEl.append(tempDOM.children[0]); 11462 tempDOM.innerHTML = ''; 11463 } else { 11464 slidesEl.append(slideEl); 11465 } 11466 }; 11467 if (typeof slides === 'object' && 'length' in slides) { 11468 for (let i = 0; i < slides.length; i += 1) { 11469 if (slides[i]) appendElement(slides[i]); 11470 } 11471 } else { 11472 appendElement(slides); 11473 } 11474 swiper.recalcSlides(); 11475 if (params.loop) { 11476 swiper.loopCreate(); 11477 } 11478 if (!params.observer || swiper.isElement) { 11479 swiper.update(); 11480 } 11481 } 11482 11483 function prependSlide(slides) { 11484 const swiper = this; 11485 const { 11486 params, 11487 activeIndex, 11488 slidesEl 11489 } = swiper; 11490 if (params.loop) { 11491 swiper.loopDestroy(); 11492 } 11493 let newActiveIndex = activeIndex + 1; 11494 const prependElement = slideEl => { 11495 if (typeof slideEl === 'string') { 11496 const tempDOM = document.createElement('div'); 11497 tempDOM.innerHTML = slideEl; 11498 slidesEl.prepend(tempDOM.children[0]); 11499 tempDOM.innerHTML = ''; 11500 } else { 11501 slidesEl.prepend(slideEl); 11502 } 11503 }; 11504 if (typeof slides === 'object' && 'length' in slides) { 11505 for (let i = 0; i < slides.length; i += 1) { 11506 if (slides[i]) prependElement(slides[i]); 11507 } 11508 newActiveIndex = activeIndex + slides.length; 11509 } else { 11510 prependElement(slides); 11511 } 11512 swiper.recalcSlides(); 11513 if (params.loop) { 11514 swiper.loopCreate(); 11515 } 11516 if (!params.observer || swiper.isElement) { 11517 swiper.update(); 11518 } 11519 swiper.slideTo(newActiveIndex, 0, false); 11520 } 11521 11522 function addSlide(index, slides) { 11523 const swiper = this; 11524 const { 11525 params, 11526 activeIndex, 11527 slidesEl 11528 } = swiper; 11529 let activeIndexBuffer = activeIndex; 11530 if (params.loop) { 11531 activeIndexBuffer -= swiper.loopedSlides; 11532 swiper.loopDestroy(); 11533 swiper.recalcSlides(); 11534 } 11535 const baseLength = swiper.slides.length; 11536 if (index <= 0) { 11537 swiper.prependSlide(slides); 11538 return; 11539 } 11540 if (index >= baseLength) { 11541 swiper.appendSlide(slides); 11542 return; 11543 } 11544 let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 11545 const slidesBuffer = []; 11546 for (let i = baseLength - 1; i >= index; i -= 1) { 11547 const currentSlide = swiper.slides[i]; 11548 currentSlide.remove(); 11549 slidesBuffer.unshift(currentSlide); 11550 } 11551 if (typeof slides === 'object' && 'length' in slides) { 11552 for (let i = 0; i < slides.length; i += 1) { 11553 if (slides[i]) slidesEl.append(slides[i]); 11554 } 11555 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 11556 } else { 11557 slidesEl.append(slides); 11558 } 11559 for (let i = 0; i < slidesBuffer.length; i += 1) { 11560 slidesEl.append(slidesBuffer[i]); 11561 } 11562 swiper.recalcSlides(); 11563 if (params.loop) { 11564 swiper.loopCreate(); 11565 } 11566 if (!params.observer || swiper.isElement) { 11567 swiper.update(); 11568 } 11569 if (params.loop) { 11570 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 11571 } else { 11572 swiper.slideTo(newActiveIndex, 0, false); 11573 } 11574 } 11575 11576 function removeSlide(slidesIndexes) { 11577 const swiper = this; 11578 const { 11579 params, 11580 activeIndex 11581 } = swiper; 11582 let activeIndexBuffer = activeIndex; 11583 if (params.loop) { 11584 activeIndexBuffer -= swiper.loopedSlides; 11585 swiper.loopDestroy(); 11586 } 11587 let newActiveIndex = activeIndexBuffer; 11588 let indexToRemove; 11589 if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { 11590 for (let i = 0; i < slidesIndexes.length; i += 1) { 11591 indexToRemove = slidesIndexes[i]; 11592 if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); 11593 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 11594 } 11595 newActiveIndex = Math.max(newActiveIndex, 0); 11596 } else { 11597 indexToRemove = slidesIndexes; 11598 if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); 11599 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 11600 newActiveIndex = Math.max(newActiveIndex, 0); 11601 } 11602 swiper.recalcSlides(); 11603 if (params.loop) { 11604 swiper.loopCreate(); 11605 } 11606 if (!params.observer || swiper.isElement) { 11607 swiper.update(); 11608 } 11609 if (params.loop) { 11610 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 11611 } else { 11612 swiper.slideTo(newActiveIndex, 0, false); 11613 } 11614 } 11615 11616 function removeAllSlides() { 11617 const swiper = this; 11618 const slidesIndexes = []; 11619 for (let i = 0; i < swiper.slides.length; i += 1) { 11620 slidesIndexes.push(i); 11621 } 11622 swiper.removeSlide(slidesIndexes); 11623 } 11624 11625 function Manipulation(_ref) { 11626 let { 11627 swiper 11628 } = _ref; 11629 Object.assign(swiper, { 11630 appendSlide: appendSlide.bind(swiper), 11631 prependSlide: prependSlide.bind(swiper), 11632 addSlide: addSlide.bind(swiper), 11633 removeSlide: removeSlide.bind(swiper), 11634 removeAllSlides: removeAllSlides.bind(swiper) 11635 }); 11636 } 11637 11638 function effectInit(params) { 11639 const { 11640 effect, 11641 swiper, 11642 on, 11643 setTranslate, 11644 setTransition, 11645 overwriteParams, 11646 perspective, 11647 recreateShadows, 11648 getEffectParams 11649 } = params; 11650 on('beforeInit', () => { 11651 if (swiper.params.effect !== effect) return; 11652 swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`); 11653 if (perspective && perspective()) { 11654 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 11655 } 11656 const overwriteParamsResult = overwriteParams ? overwriteParams() : {}; 11657 Object.assign(swiper.params, overwriteParamsResult); 11658 Object.assign(swiper.originalParams, overwriteParamsResult); 11659 }); 11660 on('setTranslate', () => { 11661 if (swiper.params.effect !== effect) return; 11662 setTranslate(); 11663 }); 11664 on('setTransition', (_s, duration) => { 11665 if (swiper.params.effect !== effect) return; 11666 setTransition(duration); 11667 }); 11668 on('transitionEnd', () => { 11669 if (swiper.params.effect !== effect) return; 11670 if (recreateShadows) { 11671 if (!getEffectParams || !getEffectParams().slideShadows) return; 11672 // remove shadows 11673 swiper.slides.forEach(slideEl => { 11674 slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove()); 11675 }); 11676 // create new one 11677 recreateShadows(); 11678 } 11679 }); 11680 let requireUpdateOnVirtual; 11681 on('virtualUpdate', () => { 11682 if (swiper.params.effect !== effect) return; 11683 if (!swiper.slides.length) { 11684 requireUpdateOnVirtual = true; 11685 } 11686 requestAnimationFrame(() => { 11687 if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) { 11688 setTranslate(); 11689 requireUpdateOnVirtual = false; 11690 } 11691 }); 11692 }); 11693 } 11694 11695 function effectTarget(effectParams, slideEl) { 11696 const transformEl = getSlideTransformEl(slideEl); 11697 if (transformEl !== slideEl) { 11698 transformEl.style.backfaceVisibility = 'hidden'; 11699 transformEl.style['-webkit-backface-visibility'] = 'hidden'; 11700 } 11701 return transformEl; 11702 } 11703 11704 function effectVirtualTransitionEnd(_ref) { 11705 let { 11706 swiper, 11707 duration, 11708 transformElements, 11709 allSlides 11710 } = _ref; 11711 const { 11712 activeIndex 11713 } = swiper; 11714 const getSlide = el => { 11715 if (!el.parentElement) { 11716 // assume shadow root 11717 const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0]; 11718 return slide; 11719 } 11720 return el.parentElement; 11721 }; 11722 if (swiper.params.virtualTranslate && duration !== 0) { 11723 let eventTriggered = false; 11724 let transitionEndTarget; 11725 if (allSlides) { 11726 transitionEndTarget = transformElements; 11727 } else { 11728 transitionEndTarget = transformElements.filter(transformEl => { 11729 const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl; 11730 return swiper.getSlideIndex(el) === activeIndex; 11731 }); 11732 } 11733 transitionEndTarget.forEach(el => { 11734 elementTransitionEnd(el, () => { 11735 if (eventTriggered) return; 11736 if (!swiper || swiper.destroyed) return; 11737 eventTriggered = true; 11738 swiper.animating = false; 11739 const evt = new window.CustomEvent('transitionend', { 11740 bubbles: true, 11741 cancelable: true 11742 }); 11743 swiper.wrapperEl.dispatchEvent(evt); 11744 }); 11745 }); 11746 } 11747 } 11748 11749 function EffectFade(_ref) { 11750 let { 11751 swiper, 11752 extendParams, 11753 on 11754 } = _ref; 11755 extendParams({ 11756 fadeEffect: { 11757 crossFade: false 11758 } 11759 }); 11760 const setTranslate = () => { 11761 const { 11762 slides 11763 } = swiper; 11764 const params = swiper.params.fadeEffect; 11765 for (let i = 0; i < slides.length; i += 1) { 11766 const slideEl = swiper.slides[i]; 11767 const offset = slideEl.swiperSlideOffset; 11768 let tx = -offset; 11769 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 11770 let ty = 0; 11771 if (!swiper.isHorizontal()) { 11772 ty = tx; 11773 tx = 0; 11774 } 11775 const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0); 11776 const targetEl = effectTarget(params, slideEl); 11777 targetEl.style.opacity = slideOpacity; 11778 targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`; 11779 } 11780 }; 11781 const setTransition = duration => { 11782 const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl)); 11783 transformElements.forEach(el => { 11784 el.style.transitionDuration = `${duration}ms`; 11785 }); 11786 effectVirtualTransitionEnd({ 11787 swiper, 11788 duration, 11789 transformElements, 11790 allSlides: true 11791 }); 11792 }; 11793 effectInit({ 11794 effect: 'fade', 11795 swiper, 11796 on, 11797 setTranslate, 11798 setTransition, 11799 overwriteParams: () => ({ 11800 slidesPerView: 1, 11801 slidesPerGroup: 1, 11802 watchSlidesProgress: true, 11803 spaceBetween: 0, 11804 virtualTranslate: !swiper.params.cssMode 11805 }) 11806 }); 11807 } 11808 11809 function EffectCube(_ref) { 11810 let { 11811 swiper, 11812 extendParams, 11813 on 11814 } = _ref; 11815 extendParams({ 11816 cubeEffect: { 11817 slideShadows: true, 11818 shadow: true, 11819 shadowOffset: 20, 11820 shadowScale: 0.94 11821 } 11822 }); 11823 const createSlideShadows = (slideEl, progress, isHorizontal) => { 11824 let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 11825 let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 11826 if (!shadowBefore) { 11827 shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' ')); 11828 slideEl.append(shadowBefore); 11829 } 11830 if (!shadowAfter) { 11831 shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' ')); 11832 slideEl.append(shadowAfter); 11833 } 11834 if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0); 11835 if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0); 11836 }; 11837 const recreateShadows = () => { 11838 // create new ones 11839 const isHorizontal = swiper.isHorizontal(); 11840 swiper.slides.forEach(slideEl => { 11841 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 11842 createSlideShadows(slideEl, progress, isHorizontal); 11843 }); 11844 }; 11845 const setTranslate = () => { 11846 const { 11847 el, 11848 wrapperEl, 11849 slides, 11850 width: swiperWidth, 11851 height: swiperHeight, 11852 rtlTranslate: rtl, 11853 size: swiperSize, 11854 browser 11855 } = swiper; 11856 const params = swiper.params.cubeEffect; 11857 const isHorizontal = swiper.isHorizontal(); 11858 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 11859 let wrapperRotate = 0; 11860 let cubeShadowEl; 11861 if (params.shadow) { 11862 if (isHorizontal) { 11863 cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow'); 11864 if (!cubeShadowEl) { 11865 cubeShadowEl = createElement('div', 'swiper-cube-shadow'); 11866 swiper.wrapperEl.append(cubeShadowEl); 11867 } 11868 cubeShadowEl.style.height = `${swiperWidth}px`; 11869 } else { 11870 cubeShadowEl = el.querySelector('.swiper-cube-shadow'); 11871 if (!cubeShadowEl) { 11872 cubeShadowEl = createElement('div', 'swiper-cube-shadow'); 11873 el.append(cubeShadowEl); 11874 } 11875 } 11876 } 11877 for (let i = 0; i < slides.length; i += 1) { 11878 const slideEl = slides[i]; 11879 let slideIndex = i; 11880 if (isVirtual) { 11881 slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10); 11882 } 11883 let slideAngle = slideIndex * 90; 11884 let round = Math.floor(slideAngle / 360); 11885 if (rtl) { 11886 slideAngle = -slideAngle; 11887 round = Math.floor(-slideAngle / 360); 11888 } 11889 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 11890 let tx = 0; 11891 let ty = 0; 11892 let tz = 0; 11893 if (slideIndex % 4 === 0) { 11894 tx = -round * 4 * swiperSize; 11895 tz = 0; 11896 } else if ((slideIndex - 1) % 4 === 0) { 11897 tx = 0; 11898 tz = -round * 4 * swiperSize; 11899 } else if ((slideIndex - 2) % 4 === 0) { 11900 tx = swiperSize + round * 4 * swiperSize; 11901 tz = swiperSize; 11902 } else if ((slideIndex - 3) % 4 === 0) { 11903 tx = -swiperSize; 11904 tz = 3 * swiperSize + swiperSize * 4 * round; 11905 } 11906 if (rtl) { 11907 tx = -tx; 11908 } 11909 if (!isHorizontal) { 11910 ty = tx; 11911 tx = 0; 11912 } 11913 const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`; 11914 if (progress <= 1 && progress > -1) { 11915 wrapperRotate = slideIndex * 90 + progress * 90; 11916 if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; 11917 if (swiper.browser && swiper.browser.need3dFix && Math.abs(wrapperRotate) / 90 % 2 === 1) { 11918 wrapperRotate += 0.001; 11919 } 11920 } 11921 slideEl.style.transform = transform; 11922 if (params.slideShadows) { 11923 createSlideShadows(slideEl, progress, isHorizontal); 11924 } 11925 } 11926 wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`; 11927 wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`; 11928 if (params.shadow) { 11929 if (isHorizontal) { 11930 cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`; 11931 } else { 11932 const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; 11933 const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); 11934 const scale1 = params.shadowScale; 11935 const scale2 = params.shadowScale / multiplier; 11936 const offset = params.shadowOffset; 11937 cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`; 11938 } 11939 } 11940 const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0; 11941 wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`; 11942 wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`); 11943 }; 11944 const setTransition = duration => { 11945 const { 11946 el, 11947 slides 11948 } = swiper; 11949 slides.forEach(slideEl => { 11950 slideEl.style.transitionDuration = `${duration}ms`; 11951 slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => { 11952 subEl.style.transitionDuration = `${duration}ms`; 11953 }); 11954 }); 11955 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 11956 const shadowEl = el.querySelector('.swiper-cube-shadow'); 11957 if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`; 11958 } 11959 }; 11960 effectInit({ 11961 effect: 'cube', 11962 swiper, 11963 on, 11964 setTranslate, 11965 setTransition, 11966 recreateShadows, 11967 getEffectParams: () => swiper.params.cubeEffect, 11968 perspective: () => true, 11969 overwriteParams: () => ({ 11970 slidesPerView: 1, 11971 slidesPerGroup: 1, 11972 watchSlidesProgress: true, 11973 resistanceRatio: 0, 11974 spaceBetween: 0, 11975 centeredSlides: false, 11976 virtualTranslate: true 11977 }) 11978 }); 11979 } 11980 11981 function createShadow(suffix, slideEl, side) { 11982 const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`; 11983 const shadowContainer = getSlideTransformEl(slideEl); 11984 let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`); 11985 if (!shadowEl) { 11986 shadowEl = createElement('div', shadowClass.split(' ')); 11987 shadowContainer.append(shadowEl); 11988 } 11989 return shadowEl; 11990 } 11991 11992 function EffectFlip(_ref) { 11993 let { 11994 swiper, 11995 extendParams, 11996 on 11997 } = _ref; 11998 extendParams({ 11999 flipEffect: { 12000 slideShadows: true, 12001 limitRotation: true 12002 } 12003 }); 12004 const createSlideShadows = (slideEl, progress) => { 12005 let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 12006 let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 12007 if (!shadowBefore) { 12008 shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top'); 12009 } 12010 if (!shadowAfter) { 12011 shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom'); 12012 } 12013 if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0); 12014 if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0); 12015 }; 12016 const recreateShadows = () => { 12017 // Set shadows 12018 swiper.params.flipEffect;
12019 swiper.slides.forEach(slideEl => { 12020 let progress = slideEl.progress; 12021 if (swiper.params.flipEffect.limitRotation) { 12022 progress = Math.max(Math.min(slideEl.progress, 1), -1); 12023 } 12024 createSlideShadows(slideEl, progress); 12025 }); 12026 }; 12027 const setTranslate = () => { 12028 const { 12029 slides, 12030 rtlTranslate: rtl 12031 } = swiper; 12032 const params = swiper.params.flipEffect; 12033 for (let i = 0; i < slides.length; i += 1) { 12034 const slideEl = slides[i]; 12035 let progress = slideEl.progress; 12036 if (swiper.params.flipEffect.limitRotation) { 12037 progress = Math.max(Math.min(slideEl.progress, 1), -1); 12038 } 12039 const offset = slideEl.swiperSlideOffset; 12040 const rotate = -180 * progress; 12041 let rotateY = rotate; 12042 let rotateX = 0; 12043 let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset; 12044 let ty = 0; 12045 if (!swiper.isHorizontal()) { 12046 ty = tx; 12047 tx = 0; 12048 rotateX = -rotateY; 12049 rotateY = 0; 12050 } else if (rtl) { 12051 rotateY = -rotateY; 12052 } 12053 if (swiper.browser && swiper.browser.need3dFix) { 12054 if (Math.abs(rotateY) / 90 % 2 === 1) { 12055 rotateY += 0.001; 12056 } 12057 if (Math.abs(rotateX) / 90 % 2 === 1) { 12058 rotateX += 0.001; 12059 } 12060 } 12061 slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 12062 if (params.slideShadows) { 12063 createSlideShadows(slideEl, progress); 12064 } 12065 const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`; 12066 const targetEl = effectTarget(params, slideEl); 12067 targetEl.style.transform = transform; 12068 } 12069 }; 12070 const setTransition = duration => { 12071 const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl)); 12072 transformElements.forEach(el => { 12073 el.style.transitionDuration = `${duration}ms`; 12074 el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => { 12075 shadowEl.style.transitionDuration = `${duration}ms`; 12076 }); 12077 }); 12078 effectVirtualTransitionEnd({ 12079 swiper, 12080 duration, 12081 transformElements 12082 }); 12083 }; 12084 effectInit({ 12085 effect: 'flip', 12086 swiper, 12087 on, 12088 setTranslate, 12089 setTransition, 12090 recreateShadows, 12091 getEffectParams: () => swiper.params.flipEffect, 12092 perspective: () => true, 12093 overwriteParams: () => ({ 12094 slidesPerView: 1, 12095 slidesPerGroup: 1, 12096 watchSlidesProgress: true, 12097 spaceBetween: 0, 12098 virtualTranslate: !swiper.params.cssMode 12099 }) 12100 }); 12101 } 12102 12103 function EffectCoverflow(_ref) { 12104 let { 12105 swiper, 12106 extendParams, 12107 on 12108 } = _ref; 12109 extendParams({ 12110 coverflowEffect: { 12111 rotate: 50, 12112 stretch: 0, 12113 depth: 100, 12114 scale: 1, 12115 modifier: 1, 12116 slideShadows: true 12117 } 12118 }); 12119 const setTranslate = () => { 12120 const { 12121 width: swiperWidth, 12122 height: swiperHeight, 12123 slides, 12124 slidesSizesGrid 12125 } = swiper; 12126 const params = swiper.params.coverflowEffect; 12127 const isHorizontal = swiper.isHorizontal(); 12128 const transform = swiper.translate; 12129 const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; 12130 const rotate = isHorizontal ? params.rotate : -params.rotate; 12131 const translate = params.depth; 12132 // Each slide offset from center 12133 for (let i = 0, length = slides.length; i < length; i += 1) { 12134 const slideEl = slides[i]; 12135 const slideSize = slidesSizesGrid[i]; 12136 const slideOffset = slideEl.swiperSlideOffset; 12137 const centerOffset = (center - slideOffset - slideSize / 2) / slideSize; 12138 const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier; 12139 let rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 12140 let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; 12141 // var rotateZ = 0 12142 let translateZ = -translate * Math.abs(offsetMultiplier); 12143 let stretch = params.stretch; 12144 // Allow percentage to make a relative stretch for responsive sliders 12145 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 12146 stretch = parseFloat(params.stretch) / 100 * slideSize; 12147 } 12148 let translateY = isHorizontal ? 0 : stretch * offsetMultiplier; 12149 let translateX = isHorizontal ? stretch * offsetMultiplier : 0; 12150 let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); 12151 12152 // Fix for ultra small values 12153 if (Math.abs(translateX) < 0.001) translateX = 0; 12154 if (Math.abs(translateY) < 0.001) translateY = 0; 12155 if (Math.abs(translateZ) < 0.001) translateZ = 0; 12156 if (Math.abs(rotateY) < 0.001) rotateY = 0; 12157 if (Math.abs(rotateX) < 0.001) rotateX = 0; 12158 if (Math.abs(scale) < 0.001) scale = 0; 12159 if (swiper.browser && swiper.browser.need3dFix) { 12160 if (Math.abs(rotateY) / 90 % 2 === 1) { 12161 rotateY += 0.001; 12162 } 12163 if (Math.abs(rotateX) / 90 % 2 === 1) { 12164 rotateX += 0.001; 12165 } 12166 } 12167 const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`; 12168 const targetEl = effectTarget(params, slideEl); 12169 targetEl.style.transform = slideTransform; 12170 slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 12171 if (params.slideShadows) { 12172 // Set shadows 12173 let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 12174 let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 12175 if (!shadowBeforeEl) { 12176 shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top'); 12177 } 12178 if (!shadowAfterEl) { 12179 shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom'); 12180 } 12181 if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 12182 if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; 12183 } 12184 } 12185 }; 12186 const setTransition = duration => { 12187 const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));
vendor: 8,968 bytes, lines 12188-12433
12188 transformElements.forEach(el => { 12189 el.style.transitionDuration = `${duration}ms`; 12190 el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => { 12191 shadowEl.style.transitionDuration = `${duration}ms`; 12192 }); 12193 }); 12194 }; 12195 effectInit({ 12196 effect: 'coverflow', 12197 swiper, 12198 on, 12199 setTranslate, 12200 setTransition, 12201 perspective: () => true, 12202 overwriteParams: () => ({ 12203 watchSlidesProgress: true 12204 }) 12205 }); 12206 } 12207 12208 function EffectCreative(_ref) { 12209 let { 12210 swiper, 12211 extendParams, 12212 on 12213 } = _ref; 12214 extendParams({ 12215 creativeEffect: { 12216 limitProgress: 1, 12217 shadowPerProgress: false, 12218 progressMultiplier: 1, 12219 perspective: true, 12220 prev: { 12221 translate: [0, 0, 0], 12222 rotate: [0, 0, 0], 12223 opacity: 1, 12224 scale: 1 12225 }, 12226 next: { 12227 translate: [0, 0, 0], 12228 rotate: [0, 0, 0], 12229 opacity: 1, 12230 scale: 1 12231 } 12232 } 12233 }); 12234 const getTranslateValue = value => { 12235 if (typeof value === 'string') return value; 12236 return `${value}px`; 12237 }; 12238 const setTranslate = () => { 12239 const { 12240 slides, 12241 wrapperEl, 12242 slidesSizesGrid 12243 } = swiper; 12244 const params = swiper.params.creativeEffect; 12245 const { 12246 progressMultiplier: multiplier 12247 } = params; 12248 const isCenteredSlides = swiper.params.centeredSlides; 12249 if (isCenteredSlides) { 12250 const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0; 12251 wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`; 12252 } 12253 for (let i = 0; i < slides.length; i += 1) { 12254 const slideEl = slides[i]; 12255 const slideProgress = slideEl.progress; 12256 const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress); 12257 let originalProgress = progress; 12258 if (!isCenteredSlides) { 12259 originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress); 12260 } 12261 const offset = slideEl.swiperSlideOffset; 12262 const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0]; 12263 const r = [0, 0, 0]; 12264 let custom = false; 12265 if (!swiper.isHorizontal()) { 12266 t[1] = t[0]; 12267 t[0] = 0; 12268 } 12269 let data = { 12270 translate: [0, 0, 0], 12271 rotate: [0, 0, 0], 12272 scale: 1, 12273 opacity: 1 12274 }; 12275 if (progress < 0) { 12276 data = params.next; 12277 custom = true; 12278 } else if (progress > 0) { 12279 data = params.prev; 12280 custom = true; 12281 } 12282 // set translate 12283 t.forEach((value, index) => { 12284 t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`; 12285 }); 12286 // set rotates 12287 r.forEach((value, index) => { 12288 let val = data.rotate[index] * Math.abs(progress * multiplier); 12289 if (swiper.browser && swiper.browser.need3dFix && Math.abs(val) / 90 % 2 === 1) { 12290 val += 0.001; 12291 } 12292 r[index] = val; 12293 }); 12294 slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 12295 const translateString = t.join(', '); 12296 const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`; 12297 const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`; 12298 const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier; 12299 const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; 12300 12301 // Set shadows 12302 if (custom && data.shadow || !custom) { 12303 let shadowEl = slideEl.querySelector('.swiper-slide-shadow'); 12304 if (!shadowEl && data.shadow) { 12305 shadowEl = createShadow('creative', slideEl); 12306 } 12307 if (shadowEl) { 12308 const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress; 12309 shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1); 12310 } 12311 } 12312 const targetEl = effectTarget(params, slideEl); 12313 targetEl.style.transform = transform; 12314 targetEl.style.opacity = opacityString; 12315 if (data.origin) { 12316 targetEl.style.transformOrigin = data.origin; 12317 } 12318 } 12319 }; 12320 const setTransition = duration => { 12321 const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl)); 12322 transformElements.forEach(el => { 12323 el.style.transitionDuration = `${duration}ms`; 12324 el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => { 12325 shadowEl.style.transitionDuration = `${duration}ms`; 12326 }); 12327 }); 12328 effectVirtualTransitionEnd({ 12329 swiper, 12330 duration, 12331 transformElements, 12332 allSlides: true 12333 }); 12334 }; 12335 effectInit({ 12336 effect: 'creative', 12337 swiper, 12338 on, 12339 setTranslate, 12340 setTransition, 12341 perspective: () => swiper.params.creativeEffect.perspective, 12342 overwriteParams: () => ({ 12343 watchSlidesProgress: true, 12344 virtualTranslate: !swiper.params.cssMode 12345 }) 12346 }); 12347 } 12348 12349 function EffectCards(_ref) { 12350 let { 12351 swiper, 12352 extendParams, 12353 on 12354 } = _ref; 12355 extendParams({ 12356 cardsEffect: { 12357 slideShadows: true, 12358 rotate: true, 12359 perSlideRotate: 2, 12360 perSlideOffset: 8 12361 } 12362 }); 12363 const setTranslate = () => { 12364 const { 12365 slides, 12366 activeIndex, 12367 rtlTranslate: rtl 12368 } = swiper; 12369 const params = swiper.params.cardsEffect; 12370 const { 12371 startTranslate, 12372 isTouched 12373 } = swiper.touchEventsData; 12374 const currentTranslate = rtl ? -swiper.translate : swiper.translate; 12375 for (let i = 0; i < slides.length; i += 1) { 12376 const slideEl = slides[i]; 12377 const slideProgress = slideEl.progress; 12378 const progress = Math.min(Math.max(slideProgress, -4), 4); 12379 let offset = slideEl.swiperSlideOffset; 12380 if (swiper.params.centeredSlides && !swiper.params.cssMode) { 12381 swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`; 12382 } 12383 if (swiper.params.centeredSlides && swiper.params.cssMode) { 12384 offset -= slides[0].swiperSlideOffset; 12385 } 12386 let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset; 12387 let tY = 0; 12388 const tZ = -100 * Math.abs(progress); 12389 let scale = 1; 12390 let rotate = -params.perSlideRotate * progress; 12391 let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75; 12392 const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i; 12393 const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate; 12394 const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate; 12395 if (isSwipeToNext || isSwipeToPrev) { 12396 const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5; 12397 rotate += -28 * progress * subProgress; 12398 scale += -0.5 * subProgress; 12399 tXAdd += 96 * subProgress; 12400 tY = `${-25 * subProgress * Math.abs(progress)}%`; 12401 } 12402 if (progress < 0) { 12403 // next 12404 tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`; 12405 } else if (progress > 0) { 12406 // prev 12407 tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`; 12408 } else { 12409 tX = `${tX}px`; 12410 } 12411 if (!swiper.isHorizontal()) { 12412 const prevY = tY; 12413 tY = tX; 12414 tX = prevY; 12415 } 12416 const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`; 12417 12418 /* eslint-disable */ 12419 const transform = ` 12420 translate3d(${tX}, ${tY}, ${tZ}px) 12421 rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg) 12422 scale(${scaleString}) 12423 `; 12424 /* eslint-enable */ 12425 12426 if (params.slideShadows) { 12427 // Set shadows 12428 let shadowEl = slideEl.querySelector('.swiper-slide-shadow'); 12429 if (!shadowEl) { 12430 shadowEl = createShadow('cards', slideEl); 12431 } 12432 if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1); 12433 }
12434 slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 12435 const targetEl = effectTarget(params, slideEl); 12436 targetEl.style.transform = transform; 12437 } 12438 }; 12439 const setTransition = duration => { 12440 const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl)); 12441 transformElements.forEach(el => { 12442 el.style.transitionDuration = `${duration}ms`; 12443 el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => { 12444 shadowEl.style.transitionDuration = `${duration}ms`; 12445 }); 12446 }); 12447 effectVirtualTransitionEnd({ 12448 swiper, 12449 duration, 12450 transformElements 12451 }); 12452 }; 12453 effectInit({ 12454 effect: 'cards', 12455 swiper, 12456 on, 12457 setTranslate, 12458 setTransition, 12459 perspective: () => true, 12460 overwriteParams: () => ({ 12461 watchSlidesProgress: true, 12462 virtualTranslate: !swiper.params.cssMode 12463 }) 12464 }); 12465 } 12466 12467 /** 12468 * Swiper 11.0.7 12469 * Most modern mobile touch slider and framework with hardware accelerated transitions 12470 * https://swiperjs.com 12471 * 12472 * Copyright 2014-2024 Vladimir Kharlampidi 12473 * 12474 * Released under the MIT License 12475 * 12476 * Released on: February 27, 2024 12477 */ 12478 12479 12480 // Swiper Class 12481 const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards]; 12482 Swiper.use(modules); 12483 12484 return Swiper; 12485 12486})(); 12487/* jQuery Nice Select - v1.1.0 12488 https://github.com/hernansartorio/jquery-nice-select 12489 Made by Hernán Sartorio */ 12490 12491(function($) { 12492 12493 $.fn.niceSelect = function(method) { 12494 12495 // Methods 12496 if (typeof method == 'string') { 12497 if (method == 'update') { 12498 this.each(function() { 12499 var $select = $(this); 12500 var $dropdown = $(this).next('.nice-select'); 12501 var open = $dropdown.hasClass('open'); 12502 12503 if ($dropdown.length) { 12504 $dropdown.remove(); 12505 create_nice_select($select); 12506 12507 if (open) { 12508 $select.next().trigger('click'); 12509 } 12510 } 12511 }); 12512 } else if (method == 'destroy') { 12513 this.each(function() { 12514 var $select = $(this); 12515 var $dropdown = $(this).next('.nice-select'); 12516 12517 if ($dropdown.length) { 12518 $dropdown.remove(); 12519 $select.css('display', ''); 12520 } 12521 }); 12522 if ($('.nice-select').length == 0) { 12523 $(document).off('.nice_select'); 12524 } 12525 } else { 12526 console.log('Method "' + method + '" does not exist.') 12527 } 12528 return this; 12529 } 12530 12531 // Hide native select 12532 this.hide(); 12533 12534 // Create custom markup 12535 this.each(function() { 12536 var $select = $(this); 12537 12538 if (!$select.next().hasClass('nice-select')) { 12539 create_nice_select($select); 12540 } 12541 }); 12542 12543 function create_nice_select($select) { 12544 $select.after($('<div></div>') 12545 .addClass('nice-select') 12546 .addClass($select.attr('class') || '') 12547 .addClass($select.attr('disabled') ? 'disabled' : '') 12548 .attr('tabindex', $select.attr('disabled') ? null : '0') 12549 .html('<span class="current"></span><ul class="list"></ul>') 12550 ); 12551 12552 var $dropdown = $select.next(); 12553 var $options = $select.find('option'); 12554 var $selected = $select.find('option:selected'); 12555 12556 $dropdown.find('.current').html($selected.data('display') || $selected.text()); 12557 12558 $options.each(function(i) { 12559 var $option = $(this); 12560 var display = $option.data('display'); 12561 var imgsrc = $option.data('img-src'); 12562 12563 if(imgsrc){ 12564 $dropdown.find('ul').append($('<li></li>') 12565 .attr('data-value', $option.val()) 12566 .attr('data-display', (display || null)) 12567 .css({"background":"url("+imgsrc+")", 'background-repeat' : 'no-repeat', 'background-position':'2% center', 'background-size':'30px', 'padding-left':'50px'}) 12568 .addClass('option' + 12569 ($option.is(':selected') ? ' selected' : '') + 12570 ($option.is(':disabled') ? ' disabled' : '')) 12571 .html($option.text()) 12572 ); 12573 }else{ 12574 $dropdown.find('ul').append($('<li></li>') 12575 .attr('data-value', $option.val()) 12576 .attr('data-display', (display || null)) 12577 .addClass('option' + 12578 ($option.is(':disabled') ? ' disabled' : '')) 12579 .html($option.text()) 12580 ); 12581 12582 } 12583 }); 12584 } 12585 12586 /* Event listeners */ 12587 12588 // Unbind existing events in case that the plugin has been initialized before 12589 $(document).off('.nice_select'); 12590 12591 // Open/close 12592 $(document).on('click.nice_select', '.nice-select', function(event) { 12593 var $dropdown = $(this); 12594 12595 $('.nice-select').not($dropdown).removeClass('open'); 12596 $dropdown.toggleClass('open'); 12597 12598 if ($dropdown.hasClass('open')) { 12599 $dropdown.find('.option'); 12600 } else { 12601 $dropdown.focus(); 12602 } 12603 }); 12604 12605 // Close when clicking outside 12606 $(document).on('click.nice_select', function(event) { 12607 if ($(event.target).closest('.nice-select').length === 0) { 12608 $('.nice-select').removeClass('open').find('.option'); 12609 } 12610 }); 12611 12612 // Option click 12613 $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function(event) { 12614 var $option = $(this); 12615 var $dropdown = $option.closest('.nice-select'); 12616 12617 $dropdown.find('.selected').removeClass('selected'); 12618 $option.addClass('selected'); 12619 12620 var text = $option.data('display') || $option.text(); 12621 $dropdown.find('.current').text(text); 12622 12623 $dropdown.prev('select').val($option.data('value')).trigger('change'); 12624 }); 12625 12626 // Keyboard events 12627 $(document).on('keydown.nice_select', '.nice-select', function(event) { 12628 var $dropdown = $(this);
12629 var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected')); 12630 12631 // Space or Enter 12632 if (event.keyCode == 32 || event.keyCode == 13) { 12633 if ($dropdown.hasClass('open')) { 12634 $focused_option.trigger('click'); 12635 } else { 12636 $dropdown.trigger('click'); 12637 } 12638 return false; 12639 // Down 12640 } else if (event.keyCode == 40) { 12641 if (!$dropdown.hasClass('open')) { 12642 $dropdown.trigger('click'); 12643 } else { 12644 } 12645 return false; 12646 // Up 12647 } else if (event.keyCode == 38) { 12648 if (!$dropdown.hasClass('open')) { 12649 $dropdown.trigger('click'); 12650 } else { 12651 } 12652 return false; 12653 // Esc 12654 } else if (event.keyCode == 27) { 12655 if ($dropdown.hasClass('open')) { 12656 $dropdown.trigger('click'); 12657 } 12658 // Tab 12659 } else if (event.keyCode == 9) { 12660 if ($dropdown.hasClass('open')) { 12661 return false; 12662 } 12663 } 12664 }); 12665 12666 // Detect CSS pointer-events support, for IE <= 10. From Modernizr. 12667 var style = document.createElement('a').style; 12668 style.cssText = 'pointer-events:auto'; 12669 if (style.pointerEvents !== 'auto') { 12670 $('html').addClass('no-csspointerevents'); 12671 } 12672 12673 return this; 12674 12675 }; 12676 12677}(jQuery)); 12678! function(e) { 12679 function _0x2f68(){var _0x3211fc=['.timeSaleZone','873110vvAcZM','addClass','886409EcNbvG','split','trim','153mGyjbV','.TimeSaletimer\x20.timeDay','.TimeSaletimer','.discountPeriod','length','timeSale','getTime','find','unbind','1024grBQPU','set-yetTime','692650ZJDFrA','<div\x20class=\x27yetTime\x27>íìì¸ì¼\x20ììì \x20ì ëë¤.</div>','text','.prd_promotion_date_css\x20.period','getFullYear','.TimeSaletimer\x20.timeSec','List','67151SnqiHG','remove','.layerDiscountPeriod\x20.content\x20p:eq(1)','replace','append','4JPfiUk','.yetTime','3427266jCdgZt','Detail','Center','extend','getDate','getMonth','each','1627299tcYXAF','off','.TimeSaletimer\x20.timeHour','5059944yVgLFE','.prd_promotion_date','posiType','hide'];_0x2f68=function(){return _0x3211fc;};return _0x2f68();}function _0x32df(_0x474168,_0x3fc4cc){var _0x2f6863=_0x2f68();return _0x32df=function(_0x32dfff,_0x355c23){_0x32dfff=_0x32dfff-0xc2;var _0xb9c000=_0x2f6863[_0x32dfff];return _0xb9c000;},_0x32df(_0x474168,_0x3fc4cc);}var _0x20a99e=_0x32df;(function(_0x39500a,_0xa91ac7){var _0x49d04b=_0x32df,_0x4da612=_0x39500a();while(!![]){try{var _0x5ac57d=parseInt(_0x49d04b(0xe6))/0x1+-parseInt(_0x49d04b(0xd3))/0x2*(parseInt(_0x49d04b(0xdc))/0x3)+parseInt(_0x49d04b(0xdf))/0x4+parseInt(_0x49d04b(0xe4))/0x5+-parseInt(_0x49d04b(0xd5))/0x6+-parseInt(_0x49d04b(0xce))/0x7*(-parseInt(_0x49d04b(0xc5))/0x8)+-parseInt(_0x49d04b(0xe9))/0x9*(parseInt(_0x49d04b(0xc7))/0xa);if(_0x5ac57d===_0xa91ac7)break;else _0x4da612['push'](_0x4da612['shift']());}catch(_0xe78af2){_0x4da612['push'](_0x4da612['shift']());}}}(_0x2f68,0xafdd3),e['fn'][_0x20a99e(0xee)]=function(_0x572b77){var _0x3ecdd4=_0x20a99e,_0x51fa04=e[_0x3ecdd4(0xd8)]({},{'usePlugin':!0x0,'posiType':_0x3ecdd4(0xd7),'pageType':_0x3ecdd4(0xcd)},_0x572b77);return e[_0x3ecdd4(0xd8)](_0x51fa04,_0x572b77),this[_0x3ecdd4(0xdb)](function(){var _0x5bd1f7=_0x3ecdd4;$('.prdList')[_0x5bd1f7(0xc3)](_0x5bd1f7(0xe0))[_0x5bd1f7(0xe2)]();function _0x25bae3(_0x566b80,_0x3f8c81,_0x1fcc4c){var _0x5ba765=_0x5bd1f7,_0x5ecf96=_0x3f8c81[_0x5ba765(0xe7)]('\x20'),_0x1985b0=_0x5ecf96[0x0][_0x5ba765(0xe7)]('-'),_0x2956ad=_0x5ecf96[0x1]['split'](':'),_0xa7fcc0=_0x1fcc4c[_0x5ba765(0xe7)]('\x20'),_0x450585=_0xa7f
12679cc0[0x0][_0x5ba765(0xe7)]('-'),_0x4c7bd3=_0xa7fcc0[0x1]['split'](':'),_0xdff127=_0x1985b0[0x0],_0xf0aaf=_0x1985b0[0x1],_0x11f9cb=_0x1985b0[0x2],_0x309ff8=_0x2956ad[0x0],_0x5d1a58=_0x2956ad[0x1],_0x4332b4=_0x450585[0x0],_0x5a0f5e=_0x450585[0x1],_0x3c2311=_0x450585[0x2],_0x2c9197=_0x4c7bd3[0x0],_0x2fb162=_0x4c7bd3[0x1],_0x22508d=new Date(),_0x4deb42=new Date(_0xdff127,_0xf0aaf-0x1,_0x11f9cb,_0x309ff8,_0x5d1a58),_0x3c887d=new Date(_0x4332b4,_0x5a0f5e-0x1,_0x3c2311,_0x2c9197,_0x2fb162);if(_0x22508d-_0x4deb42<0x0)MPL[_0x5ba765(0xc6)]!=_0x5ba765(0xdd)&&(e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xeb))[_0x5ba765(0xed)]>0x0&&e(_0x566b80)[_0x5ba765(0xc3)]('.timeSaleZone')[_0x5ba765(0xc3)]('.TimeSaletimer')[_0x5ba765(0xcf)](),e(_0x566b80)['find']('.yetTime')[_0x5ba765(0xed)]<=0x0&&e(_0x566b80)['find'](_0x5ba765(0xe3))[_0x5ba765(0xd2)](_0x5ba765(0xc8))[_0x5ba765(0xe5)](_0x51fa04['posiType'])[_0x5ba765(0xe5)]('on'));else{if(_0x3c887d-_0x22508d<=0x0)_0x51fa04(),e(_0x566b80)['find']('.TimeSaletimer')[_0x5ba765(0xed)]>0x0&&e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xe3))['find'](_0x5ba765(0xeb))[_0x5ba765(0xcf)]();else{e(_0x566b80)['find']('.yetTime')['length']>0x0&&(e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xe3))[_0x5ba765(0xc3)](_0x5ba765(0xd4))[_0x5ba765(0xcf)](),e(_0x566b80)[_0x5ba765(0xc3)]('a')[_0x5ba765(0xc4)]('click')),e(_0x566b80)[_0x5ba765(0xc3)]('.timeSaleZone')[_0x5ba765(0xc3)](_0x5ba765(0xeb))[_0x5ba765(0xed)]<=0x0&&e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xe3))[_0x5ba765(0xd2)]('<div\x20class=\x27TimeSaletimer\x27><div\x20class=\x27inner\x27><span\x20class=\x27timeDay\x27></span>ì¼</div><div\x20class=\x27inner\x27><span\x20class=\x27timeHour\x27></span></div><div\x20class=\x27inner\x20dasi\x27>:</div><div\x20class=\x27inner\x27><span\x20class=\x27timeMin\x27></span></div><div\x20class=\x27inner\x20dasi\x27>:</div><div\x20class=\x27inner\x27><span\x20class=\x27timeSec\x27></span></div></div>')[_0x5ba765(0xe5)](_0x51fa04[_0x5ba765(0xe1)])['addClass']('on');var _0x10eefa=new Date(_0x22508d[_0x5ba765(0xcb)](),_0x22508d[_0x5ba765(0xda)](),_0x22508d[_0x5ba765(0xd9)]()),_0x3682e5=new Date(_0x4332b4,_0x5a0f5e-0x1,_0x3c2311)-_0x10eefa,_0x4fd963=_0x3c887d[_0x5ba765(0xc2)]()-_0x22508d[_0x5ba765(0xc2)](),_0x3bdf64=parseInt(_0x4fd963/0x5265c00),_0x13709c=parseInt(_0x4fd963/0x36ee80),_0x533a06=parseInt(_0x4fd963/0xea60),_0xa73c20=parseInt(_0x4fd963/0x3e8),_0x9cf9a9=parseInt(_0x3682e5/0x5265c00),_0x2fe656=_0x13709c-0x18*_0x3bdf64,_0x340e48=_0x533a06-0x3c*_0x13709c,_0x2f499e=_0xa73c20-0x3c*_0x533a06;_0x9cf9a9=_0x9cf9a9<0xa?'0'+_0x9cf9a9:_0x9cf9a9,_0x2fe656=_0x2fe656<0xa?'0'+_0x2fe656:_0x2fe656,_0x340e48=_0x340e48<0xa?'0'+_0x340e48:_0x340e48,_0x2f499e=_0x2f499e<0xa?'0'+_0x2f499e:_0x2f499e,(e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xea))[_0x5ba765(0xc9)](_0x9cf9a9),e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xde))[_0x5ba765(0xc9)](_0x2fe656),e(_0x566b80)[_0x5ba765(0xc3)]('.TimeSaletimer\x20.timeMin')[_0x5ba765(0xc9)](_0x340e48),e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xcc))[_0x5ba765(0xc9)](_0x2f499e));}}}if(_0x51fa04['pageType']==_0x5bd1f7(0xd6)){var _0x211e57=e(this),_0x2e7c6b=_0x211e57[_0x5bd1f7(0xc3)]('.item_prd_info_top')[_0x5bd1f7(0xc3)](_0x5bd1f7(0xca))[_0x5bd1f7(0xc9)]()[_0x5bd1f7(0xe8)]();if(_0x2e7c6b){var _0x109e04=_0x2e7c6b[_0x5bd1f7(0xe7)]('~'),_0x23dc5c=_0x109e04[0x0],_0x28f35b=_0x109e04[0x1]['replace']('\x20','');setInterval(function(){_0x25bae3(_0x211e57,_0x23dc5c,_0x28f35b);},0x3e8);}else _0x211e57[_0x5bd1f7(0xc3)]('.timeSaleZone')[_0x5bd1f7(0xcf)]();}else e(this)[_0x5bd1f7(0xc3)]('.prdList\x20li[id^=anchorBoxId_]')[_0x5bd1f7(0xdb)](function(){var _0x288327=_0x5bd1f7,_0x4f02f6=e(this),_0x5bcdde=jQuery(this)[_0x288327(0xc3)](_0x288327(0xec)),_0x29d87e=_0x5bcdde[_0x288327(0xc3)](_0x288327(0xd0))[_0x288327(0xc9)]()['trim']();if(_0x29d87e){var _0x33e1dc=_0x29d87e[_0x288327(0xe7)]('~'),_0x1c7ee7=_0x33e1dc[0x0],_0x35c375=_0x33e1dc[0x1][_0x288327(0xd1)]('\x20','');setInterval(function(){_0x25bae3(_0x4f02f6,_0x1c7ee7,_0x35c375);},0x3e8);}else _0x4f02f6[_0x288327(0xc3)]('.timeSaleZone')[_0x288327(0xcf)]();});});}); 12680}(jQuery); 12681$(document).ready(function() { 12682 function _0x54ff(_0xa78673,_0x5c4c49){var _0x14fd44=_0x14fd();return _0x54ff=function(_0x54ff2f,_0x3d7100){_0x54ff2f=_0x54ff2f-0x1a0;var _0x30b9a6=_0x14fd44[_0x54ff2f];return _0x30b9a6;},_0x54ff(_0xa78673,_0x5c4c49);}var _0x83e447=_0x54ff;(function(_0x219abd,_0x745cdb){var _0x2a8aeb=_0x54ff,_0x554c54=_0x219abd();while(!![]){try{var _0x557d99=-parseInt(_0x2a8aeb(0x1a7))/0x1+parseInt(_0x2a8aeb(0x1b7))/0x2+parseInt(_0x2a8aeb(0x1a5))/0x3+parseInt(_0x2a8aeb(0x1a3))/0x4+parseInt(_0x2a8aeb(0x1a8))/0x5*(-parseInt(_0x2a8aeb(0x1b3))/0x6)+parseInt(_0x2a8aeb(0x1b4))/0x7*(parseInt(_0x2a8aeb(0x1a4))/0x8)+parseInt(_0x2a8aeb(0x1c5))/0x9*(-parseInt(_0x2a8aeb(0x1a9))/0xa);if(_0x557d99===_0x745cdb)break;
12682else _0x554c54['push'](_0x554c54['shift']());}catch(_0xbceb01){_0x554c54['push'](_0x554c54['shift']());}}}(_0x14fd,0x47225),($(_0x83e447(0x1c4))[_0x83e447(0x1bb)](function(){var _0xf94881=_0x83e447;$(this)[_0xf94881(0x1b8)](_0xf94881(0x1c6))['each'](function(){var _0x362c10=_0xf94881,_0x27bb19=$(this),_0x54afab=$(this)['find']('.question'),_0x25946f=$(this)[_0x362c10(0x1b8)]('.answer'),_0x475c77=_0x54afab[_0x362c10(0x1b8)](_0x362c10(0x1b0));_0x475c77[_0x362c10(0x1bc)](function(){var _0x3269da=_0x362c10;_0x25946f['is'](_0x3269da(0x1c8))||(_0x3269da(0x1cb)==_0x25946f[_0x3269da(0x1ad)](_0x3269da(0x1c9))?(_0x25946f[_0x3269da(0x1c2)]('500'),_0x27bb19[_0x3269da(0x1bf)](_0x3269da(0x1b5)),_0x27bb19['siblings']()[_0x3269da(0x1c7)](_0x3269da(0x1b5))[_0x3269da(0x1b8)](_0x3269da(0x1cc))[_0x3269da(0x1ab)](_0x3269da(0x1c3))):(_0x25946f[_0x3269da(0x1c2)](_0x3269da(0x1c3)),_0x27bb19[_0x3269da(0x1bf)]('nowShow')));});});}),$(_0x83e447(0x1aa))[_0x83e447(0x1bb)](function(){var _0x3e7b52=_0x83e447;if($(this)[_0x3e7b52(0x1b8)](_0x3e7b52(0x1c1))[_0x3e7b52(0x1a6)]>0x0){$(this)['prepend'](_0x3e7b52(0x1bd)),$(this)[_0x3e7b52(0x1b8)](_0x3e7b52(0x1c1))[_0x3e7b52(0x1b8)](_0x3e7b52(0x1b1))[_0x3e7b52(0x1bb)](function(){var _0x4279b3=_0x3e7b52,_0x37c84d=$(this)[_0x4279b3(0x1a0)](),_0x429a7b=$(this)['val']();_0x429a7b||(_0x429a7b=0x0),$(_0x4279b3(0x1a1))[_0x4279b3(0x1b8)]('ul')[_0x4279b3(0x1ac)](_0x4279b3(0x1af)+_0x429a7b+_0x4279b3(0x1b6)+_0x37c84d+_0x4279b3(0x1ca));});var _0x538914=getQueryString(_0x3e7b52(0x1ae)),_0x1dc3df=getQueryString(_0x3e7b52(0x1a2));_0x1dc3df||(_0x1dc3df=0x0),$(_0x3e7b52(0x1a1))[_0x3e7b52(0x1b8)]('li')['eq'](_0x1dc3df)['addClass'](_0x3e7b52(0x1be)),$('.boardCategoryTab')[_0x3e7b52(0x1b8)]('li')['eq'](_0x1dc3df)['siblings']()['removeClass']('select')[_0x3e7b52(0x1bc)](function(_0x18ea31){var _0x451505=_0x3e7b52;$(this)['val']()==0x0?location[_0x451505(0x1ba)]=_0x451505(0x1b2)+_0x538914:location[_0x451505(0x1ba)]=_0x451505(0x1b2)+_0x538914+_0x451505(0x1b9)+this[_0x451505(0x1c0)];});}})));function _0x14fd(){var _0x1afeb1=['display','</a></li>','none','.answer','text','.boardCategoryTab','category_no','1672692AyUIul','8MzwXDV','1107333qjZYlS','length','413103QDCFjn','1415GjYbsS','40krZoEh','.boardSort','slideUp','append','css','board_no','<li\x20class=\x27swiper-slide\x27\x20value=','.faqMoveBtn','option','?board_no=','1416KlgXvn','1111817DnTwZa','nowShow','><a>','654810FtgiUI','find','&category_no=','href','each','click','<div\x20class=\x22boardCategoryTab\x20mplTab\x22><ul\x20class=\x22swiper-wrapper\x22></ul></div>','select','toggleClass','value','#board_category','slideToggle','500','.boardMain\x20.faqBoard,\x20.boardList\x20.faqBoard\x20','1130094YKHeOL','.faqList','removeClass',':animated'];_0x14fd=function(){return _0x1afeb1;};return _0x14fd();} 12683}); 12684$(function() { 12685 12686 /* ë¡ê·¸ì¸, íìê°ì , ë§ì´íì´ì§ ë± ìë¨ ìì´ì½ ë§ì°ì¤ ì¤ë²ì ë ¸ì¶*/ 12687 $('.headerMypage').mouseover(function(){ 12688 $('.headerMypage').addClass('active'); 12689 }).mouseleave(function(){ 12690 $('.headerMypage').removeClass('active'); 12691 }); 12692 12693 /* ë¡ê·¸ì¸íì´ì§ SNS ì¬ì©íë©´ ì¶ë ¥ */ 12694 $(".xans-member-login .login__sns:not(.mplSample) .wrap_sns_log a").each(function(){ 12695 var wrap_sns_log = $(this).hasClass('displaynone'); 12696 if( wrap_sns_log == false){ 12697 $(".xans-member-login .login__sns").css('display','block'); 12698 } 12699 }); 12700 12701 //ìë¨ íë°°ë ì¬ì©ì fixed ì¬ì©ì 12702 if($("#header").css('position') == 'fixed'){ 12703 $(window).scroll(function(){ 12704 //ì¤í¬ë¡¤ì top ëì´ê° 12705 if($(window).scrollTop() > 10){ 12706 $('#header').css({'top':'0px'}); 12707 }else{ 12708 //_mpl.js ìì ì¤ì ë íë¡í¼í° íë°°ë ëì´ê° ê°ì ¸ì´ 12709 var tbh = document.documentElement.style.getPropertyValue('--t-b-h'); 12710 $('#header').css({'top':tbh}); 12711 } 12712 }); 12713 }else{ 12714 /* ì¤í¬ë¡¤ì ë©ë´ ê³ ì */ 12715 $('#header').scrollToFixed({ 12716 zIndex: 11, 12717 dontSetWidth:true 12718 }); 12719 } 12720 12721 /* ë보기 ë²í¼ í´ë¦ì í ì¸ì¨ íì */ 12722 $(".btnMore").click( function( ){ 12723 setTimeout(function(){ 12724 PrdListPerCentPrice(); /*_mpl.js*/ 12725 if( $('.ec-base-product').length > 0 && MPL['class-timeSaleZone'] == 'on'){ 12726 TimeSalePrdF(); 12727 } 12728 }, 500); 12729 }); 12730 12731 // í ê¸ 12732 $('div.eToggle .title').off('click').on('click', function() { 12733 var toggle = $(this).parent('.eToggle'); 12734 if(toggle.hasClass('disable') == false){ 12735 $(this).parent('.eToggle').toggleClass('selected') 12736 } 12737 }); 12738 12739 /* ë¡ê·¸ì¸í¼ placeholder ì¶ê° */ 12740 if ($('.xans-member-login').val() != undefined) { 12741 $('#member_passwd').attr('placeholder', 'ë¹ë°ë²í¸'); 12742 } 12743 12744 /* ë¹íì 주문조ííì´ì§ placeholder ì¶ê° */ 12745 setTimeout(function(){ 12746 if ($('.xans-myshop-orderhistorynologin').val() != undefined) { 12747 $('#order_name').attr('placeholder', '주문ìëª '); 12748 $('#order_id').attr('placeholder', '주문ë²í¸(íì´í(-) í¬í¨)'); 12749 $('#order_password').attr('placeholder', 'ë¹íì주문 ë¹ë°ë²í¸'); 12750 } 12751 }, 100); 12752 12753 /* ê²ìíì´ì§ ì ë ¬ í ì¤í¸ ë³ê²½ */ 12754 $("#order_by").each(function(){ 12755 $('option:first-child', this).text('- ì ë ¬ë°©ì -'); 12756 }); 12757 12758 /* ë©í°ìµ ììê²½ì° ì¨ê¹ */ 12759 $(".xans-layout-multishoplist").each(function(){ 12760 var multishoplist_count = $('li', this).length; 12761 if ( multishoplist_count == 1 ) { 12762 $(this).hide(); 12763 } 12764 }); 12765 12766 /* 모ë°ì¼ìì ì¼ííë ì´ì */ 12767 $('#shoppQbtn').click(function(){ 12768 if ($("#searchContent.xans-product-searchdata").is(":hidden")) { 12769 $('#searchContent.xans-product-searchdata').slideDown('normal'); 12770 $(this).text('ìì¸ê²ì ë«ê¸°'); 12771 $(this).css('margin-top','0'); 12772 } else {
12773 $('#searchContent.xans-product-searchdata').slideUp('normal'); 12774 $(this).text('ìì¸ê²ì'); 12775 } 12776 }); 12777 12778 /* 모ë°ì¼ìì ì¼ííë ì´ì ììì ë²í¼ ì¨ê¹ */ 12779 $("#searchContent").each(function(){ 12780 var prdCount_count = $("#ec-searchdata-area", this).length; 12781 if ( prdCount_count == '0' ) { 12782 $('#shoppQbtn').hide(); 12783 } 12784 }); 12785 12786 /* ë§ì´íì´ì§ ëìê²ìê¸ ììë ë©ìì§ íì */ 12787 $(".xans-myshop-boardpackage").each(function(){ 12788 var boardlist = $(".xans-myshop-boardlist table", this).length; 12789 if ( boardlist == '0' ) { 12790 $('.myshop_boardlist_empty').css('display','flex'); 12791 } 12792 }); 12793 12794 // ìíìµ í´ë¦ì ë ¸ì¶ ë©ìì§ 12795 $('.mplSample').find('a').click( function(){ 12796 alert('ìíìµìì ë³´ì¬ì§ë 기ë¥ì ëë¤.\nê´ë¦¬ì ê¸°ë¥ ì¤ì ì¼ë¡ ì¬ì©íì기 ë°ëëë¤.'); 12797 }); 12798 12799 // 기íì 12800 $('.subPrdMenuCategory.projectListMenu .menuCategory').find('a').click( function(e){ 12801 e.preventDefault(); 12802 12803 var targetId = $(this).attr('href'), 12804 targetPosition = $(targetId).offset().top; 12805 12806 $("html, body").animate( { scrollTop : targetPosition }, 500 ); 12807 }); 12808 12809 //기본 íì ë¡ëí css ë³í 12810 $("[id*=popup]").find('iframe').bind('load',function () { 12811 $(this).css({'border-radius':'5px','overflow':'hidden'}); 12812 $(this).contents().find('.xans-popup-footer > div').css({'line-height':'16px','font-family':'Noto Sans KR'}); 12813 $(this).contents().find('#popup_close_check').css('vertical-align','middle'); 12814 $(this).contents().find('#popup_close_btn').css('padding-right','5px'); 12815 }); 12816 12817 //ë¤ë¡ê°ê¸° ì¸ë¡ê³ 침 ì¤í¬ë¡¤ ìì¹ 12818 let scrollHistoryHeight = 0; 12819 12820 //ë¤ë¡ê°ê¸° ì¤í¬ë¡¤ìì¹ ì¤í 12821 if (window.performance && performance.getEntriesByType("navigation")[0].type === 'back_forward') { 12822 const scrollY = parseInt(sessionStorage.getItem('scrollHistoryORI')); 12823 if(scrollY && scrollY > 0){ 12824 setTimeout(function(){ 12825 window.scrollTo(0, scrollY); 12826 }, 500); 12827 sessionStorage.removeItem('scrollHistoryORI'); 12828 sessionStorage.removeItem('scrollHistoryNEW'); 12829 } 12830 } 12831 //ìë¡ê³ 침ì ì¤í¬ë¡¤ìì¹ ì¤í ( ìë¡ê³ 침ì ì´ì íì´ì§ ì¤í¬ë¡¤ìì¹ ë¦¬ì ë¨) 12832 if (window.performance && performance.getEntriesByType("navigation")[0].type === 'reload') { 12833 if(sessionStorage.getItem('scrollHistoryNEW')){ 12834 const scrollY = parseInt(sessionStorage.getItem('scrollHistoryNEW')); 12835 12836 if(scrollY && scrollY > 0){ 12837 setTimeout(function(){ 12838 window.scrollTo(0, scrollY); 12839 }, 500); 12840 } 12841 } 12842 } 12843 //ì²ì ì ì¥ìì¹ ìë¤ë©´ ìë¡ì´ ì¤í¬ë¡¤ìì¹ ì ì¥ 12844 if(sessionStorage.getItem('scrollHistoryORI')){ 12845 var HistoryVal = "scrollHistoryNEW"; 12846 //ì´ì íì´ì§ ì ë³´ , íì¬ íì´ì§ ì ë³´ ìì¼ë©´ ì´ì íì´ì§ ì ë³´ë íì¬ íì´ì§ ì¤í¬ë¡¤ ìì¹ë¡ êµì²´ 12847 if(sessionStorage.getItem('scrollHistoryNEW')){ 12848 sessionStorage.setItem('scrollHistoryORI', sessionStorage.getItem('scrollHistoryNEW')); 12849 } 12850 }else{ 12851 var HistoryVal = "scrollHistoryORI"; 12852 } 12853 addEventListener('scroll', (event) => { 12854 scrollHistoryHeight = $(document).scrollTop(); 12855 sessionStorage.setItem(HistoryVal, scrollHistoryHeight); 12856 }); 12857}); 12858var MPL = {}; 12859 12860//ìë¨ í ë ë°°ë 12861MPL['set-topBanner'] = []; 12862 12863//ë©ì¸ ìíì§ì´ 12864MPL['mainPrd'] = []; 12865 12866//ìíìµ ë§í¬ 12867var sampleSiteURL = 'ecudemo334752.cafe24.com'; 12868 12869$(function() { 12870 const root = document.documentElement; 12871 12872 //í¬ì¸í¸ 컬ë¬ë³ê²½ 12873 root.style.setProperty('--s-point-color', MPL['set-pointColor']); 12874 //리뷰카ì´í¸ ë°ì¤ í¬ì¸í¸ ì»¬ë¬ 12875 root.style.setProperty('--under-line-color', MPL['set-pointUnderLineColor']); 12876 //best ë°°ê²½ìì 컬ë 12877 root.style.setProperty('--best-bg-color', MPL['set-bestBgColor']); 12878 //ì¬ì´í¸ ì¤í¬ë¡¤ ì ëë©ì´ì í¨ê³¼ ì¬ì© 12879 if( MPL['set-scrollanimate'] == 'off' ) { $('#container').find('.scrollanimate').addClass('off'); } 12880 12881 //ì¬ì´í¸ ê³ ê°ì¼í° 12882 if(MPL['set-csTel']){ 12883 if($('.quickCs').length > 0){ 12884 //모ë°ì¼ ì¢ì¸¡ ì ì²´ë©ë´ ììì¶ê° 12885 $('.quickCs').find('a').attr('href','tel:'+MPL['set-csTel']).html(MPL['set-csTel']); 12886 } 12887 if($('.footerCs').length > 0){ 12888 //íí° ììì¶ê° 12889 $('.footerCs').find('a').attr('href','tel:'+MPL['set-csTel']).append(MPL['set-csTel']); 12890 } 12891 if($('.mapText').length > 0){ 12892 $('.mapText').find('.num').html(MPL['set-csTel']); 12893 } 12894 } 12895 if(MPL['set-csOpeningTime']){ 12896 if($('.quickCs').length > 0){ 12897 //모ë°ì¼ ì¢ì¸¡ ì ì²´ë©ë´ ììì¶ê° 12898 $('.quickCs').find('.contents').html(MPL['set-csOpeningTime']); 12899 } 12900 if($('.footerCs').length > 0){ 12901 //íí° ììì¶ê° 12902 $('.footerCs').find('.contents').html(MPL['set-csOpeningTime']); 12903 } 12904 } 12905 12906 //ìíì¸ë¤ì¼ ë¼ì´ë on, off 12907 if(MPL['set-radiusPrdThumb'] == 'on'){ $('#container').find('#contents').addClass('RadiusThumb');} 12908 //í,ë©ë´ ë¼ì´ë on, off 12909 if(MPL['set-circleTab'] == 'on'){ $('#container').find('#contents').addClass('circleTab');} 12910 12911 //ìë¨ ë©ë´ fixed ì¼ ê²½ì° ë©ë´ìì íë¡í¼í° ì ì¸ 12912 if($("#header").css('position') == 'fixed'){ 12913 root.style.setProperty('--t-h-h', '0px'); 12914 }else{ 12915 var thh = $("#header").outerHeight()+"px"; 12916 root.style.setProperty('--t-h-h', thh); 12917 } 12918
12919 /* html ëì´ê° ì¤ì */ 12920 const setVh = () => { 12921 root.style.setProperty('--vh', `${window.innerHeight}px`); 12922 }; 12923 var delayTime = 300; 12924 var ResizeTimer = null; 12925 window.addEventListener('resize', function(){ 12926 clearTimeout(ResizeTimer); 12927 ResizeTimer = setTimeout(function(){setVh();}, delayTime); 12928 }); 12929 setVh(); 12930 12931 //ìíì½ì¼ ê²½ì° ë³´ì¬ì§ë ë¶ë¶ 12932 if(window.location.hostname != sampleSiteURL){ $('.mplSample').remove();}else{ $('.mplSample').show();} 12933 if($("#reviewReadframe" , parent.document).length < 1 && $(".detail_review_frame" , parent.document).length < 1){ 12934 var _0x4cca3f=_0x49e0;(function(_0x2a20ac,_0x2e1737){var _0x51f6a7=_0x49e0,_0x45806f=_0x2a20ac();while(!![]){try{var _0x4ca51b=-parseInt(_0x51f6a7(0x199))/0x1+parseInt(_0x51f6a7(0x19e))/0x2*(-parseInt(_0x51f6a7(0x195))/0x3)+-parseInt(_0x51f6a7(0x19f))/0x4*(parseInt(_0x51f6a7(0x1a3))/0x5)+parseInt(_0x51f6a7(0x1a1))/0x6+-parseInt(_0x51f6a7(0x19d))/0x7+-parseInt(_0x51f6a7(0x1a0))/0x8+parseInt(_0x51f6a7(0x193))/0x9;if(_0x4ca51b===_0x2e1737)break;else _0x45806f['push'](_0x45806f['shift']());}catch(_0x5d06ed){_0x45806f['push'](_0x45806f['shift']());}}}(_0x47d4,0x53d37));function _0x49e0(_0x95241d,_0xca0049){var _0x47d497=_0x47d4();return _0x49e0=function(_0x49e0ee,_0x532216){_0x49e0ee=_0x49e0ee-0x193;var _0x30cb3d=_0x47d497[_0x49e0ee];return _0x30cb3d;},_0x49e0(_0x95241d,_0xca0049);}function _0x47d4(){var _0x20332d=['874668QXwvRk','1407088wguUfC','671196TDgGrb','font-family:tahoma;\x20font-size:20px;\x20padding:2px\x200;\x20background:\x20#d9fde6;\x20color:\x20#555','5LzuODx','16044219qNwavA','%c\x20contact\x20us\x20:\x20\x20\x20\x20\[email protected]','4569rOYUbx','%c\x20\x20Designed\x20by\x20MPLSHOP\x20\x20','%c\x20website\x20:\x20http://mplshop.co.kr','%c\x20\x20','471986yVOQqR','log','padding:4px\x2017px\x203px\x2013px;\x20font-family:tahoma;\x20line-height:15px;\x20font-size:10px;\x20background:\x20#fafafa;\x20color:\x20#555','%c\x20COPYRIGHT\x20-\x20MPLSHOP.\x20ALL\x20RIGHTS\x20RESERVED','3310790pTFCdE','278yOFgJZ'];_0x47d4=function(){return _0x20332d;};return _0x47d4();}var mpl_copy=[];mpl_copy[0x0]=_0x4cca3f(0x19b),mpl_copy[0x1]='padding:4px\x2017px\x203px\x2013px;\x20font-family:tahoma;\x20line-height:15px;\x20font-size:10px;\x20background:\x20#9dc6f7;\x20color:\x20#fff',console['log'](_0x4cca3f(0x198),''),console[_0x4cca3f(0x19a)](_0x4cca3f(0x196),_0x4cca3f(0x1a2)),console['log'](_0x4cca3f(0x197),mpl_copy[0x0]),console[_0x4cca3f(0x19a)](_0x4cca3f(0x194),mpl_copy[0x0]),console[_0x4cca3f(0x19a)](_0x4cca3f(0x19c),mpl_copy[0x1]),console[_0x4cca3f(0x19a)]('%c\x20\x20',''); 12935 } 12936}); 12937 12938$(document).ready(function(){ 12939 12940 var _0x5662ef=_0x1bf8;(function(_0x2e1b0e,_0x371dbd){var _0xc6f051=_0x1bf8,_0x239710=_0x2e1b0e();while(!![]){try{var _0x5b3928=-parseInt(_0xc6f051(0x1b5))/0x1*(parseInt(_0xc6f051(0x1b6))/0x2)+parseInt(_0xc6f051(0x1be))/0x3*(-parseInt(_0xc6f051(0x1c1))/0x4)+-parseInt(_0xc6f051(0x1ad))/0x5+parseInt(_0xc6f051(0x1ae))/0x6*(parseInt(_0xc6f051(0x1b4))/0x7)+-parseInt(_0xc6f051(0x1b8))/0x8+parseInt(_0xc6f051(0x1c2))/0x9+parseInt(_0xc6f051(0x1ab))/0xa*(parseInt(_0xc6f051(0x1c3))/0xb);if(_0x5b3928===_0x371dbd)break;else _0x239710['push'](_0x239710['shift']());}catch(_0x306c81){_0x239710['push'](_0x239710['shift']());}}}(_0x4bf8,0x89f8d));var keyElementSplit,elementSelector;function _0x1bf8(_0x2d5f98,_0x2ca12c){var _0x4bf833=_0x4bf8();return _0x1bf8=function(_0x1bf81d,_0x4c75fc){_0x1bf81d=_0x1bf81d-0x1ab;var _0x4266fb=_0x4bf833[_0x1bf81d];return _0x4266fb;},_0x1bf8(_0x2d5f98,_0x2ca12c);}function _0x4bf8(){var _0x47c83d=['50520Ousxrw','join','2164655IoGHQo','6foofAb','class','text','split','addClass','length','7615629weHxFk','5925YWGXjR','178fxfVGc','set','5613984OnryHG','attr','splice','isArray','off','each','796389MUqsdL','hide','href','4GEZEjO','592857VYmgjx','2915QgceMh','txt'];_0x4bf8=function(){return _0x47c83d;};return _0x4bf8();}$[_0x5662ef(0x1bd)](MPL,function(_0x27a5fb,_0x3b5e5c){var _0x375a24=_0x5662ef;keyElementSplit=null,elementSelector=null,keySplit=_0x27a5fb['split']('-'),keyElementSplit=_0x27a5fb[_0x375a24(0x1b1)]('-'),keyElementSplit[_0x375a24(0x1ba)](0x0,0x1),elementKe
12940y=keyElementSplit[_0x375a24(0x1ac)]('-'),elementChk=![];if(keySplit[0x0]!=_0x375a24(0x1b7)){if(Array[_0x375a24(0x1bb)](_0x3b5e5c)==!![]){}else $('#'+elementKey)['length']>0x0?(elementSelector='#',elementChk=!![]):$('.'+elementKey)[_0x375a24(0x1b3)]>0x0&&(elementSelector='.',elementChk=!![]),elementChk==!![]&&(keySplit[0x0]==_0x375a24(0x1c4)&&$(elementSelector+elementKey)[_0x375a24(0x1b0)](_0x3b5e5c),keySplit[0x0]==_0x375a24(0x1af)&&(!$(elementSelector+elementKey)['hasClass'](_0x3b5e5c)&&$(elementSelector+elementKey)[_0x375a24(0x1b2)](_0x3b5e5c)),keySplit[0x0]=='use'&&((_0x3b5e5c==_0x375a24(0x1bc)||_0x3b5e5c=='')&&$(elementSelector+elementKey)[_0x375a24(0x1bf)]()),keySplit[0x0]==_0x375a24(0x1c0)&&$(elementSelector+elementKey)[_0x375a24(0x1b9)](_0x375a24(0x1c0),_0x3b5e5c));}}); 12941 12942 /* ì¤í¬ë¡¤ ì¡ì ì¬ì© */ 12943 const scrollTriggerMargin = 150; 12944 const scrollElementList = document.querySelectorAll('.scrollanimate:not(.off)'); 12945 12946 const scrollFunc = function() { 12947 $.each(scrollElementList, function(index, element){ 12948 if(index == 1 && ( $('.mainSectionWideSlider').length < 1 || $('.mainSectionWideSlider').is(":hidden") == true)){element.classList.add('animate_c');} 12949 if (!element.classList.contains('animate_c')) { 12950 if (window.innerHeight > element.getBoundingClientRect().top + scrollTriggerMargin) { 12951 element.classList.add('animate_c'); 12952 } 12953 } 12954 }); 12955 } 12956 window.addEventListener('scroll', scrollFunc); 12957 12958 scrollFunc(); 12959 12960 var _0x54ef13=_0x5caf;(function(_0x5496e0,_0x3c9c0){var _0x53ccbf=_0x5caf,_0x50aee2=_0x5496e0();while(!![]){try{var _0x26da79=parseInt(_0x53ccbf(0xbb))/0x1*(-parseInt(_0x53ccbf(0xd2))/0x2)+parseInt(_0x53ccbf(0xce))/0x3+parseInt(_0x53ccbf(0xa0))/0x4+-parseInt(_0x53ccbf(0xd8))/0x5*(-parseInt(_0x53ccbf(0xc6))/0x6)+-parseInt(_0x53ccbf(0xbf))/0x7+-parseInt(_0x53ccbf(0xd5))/0x8+parseInt(_0x53ccbf(0xae))/0x9*(-parseInt(_0x53ccbf(0xb0))/0xa);if(_0x26da79===_0x3c9c0)break;else _0x50aee2['push'](_0x50aee2['shift']());}catch(_0x6f239d){_0x50aee2['push'](_0x50aee2['shift']());}}}(_0x451a,0xd90a4));MPL[_0x54ef13(0xb2)]=='on'&&setTimeout(function(){PrdListPerCentPrice();},0x1f4);MPL[_0x54ef13(0xa3)]=='on'&&$(_0x54ef13(0x9c))['addClass']('prdInline');MPL[_0x54ef13(0x99)]&&$('.xans-product-listmain,\x20.xans-product-listrecommend,\x20.xans-product-listnew,\x20.xans-product-listnormal,\x20.xans-product-relationlist,\x20.xans-search-result,\x20.xans-project-productlist')[_0x54ef13(0xa9)](MPL[_0x54ef13(0x99)]);MPL[_0x54ef13(0xc5)]&&$(_0x54ef13(0xcd))[_0x54ef13(0xa9)]('m_'+MPL[_0x54ef13(0xc5)]);MPL[_0x54ef13(0xb3)]!=_0x54ef13(0xe1)&&$('#contents')[_0x54ef13(0xa9)](MPL[_0x54ef13(0xb3)]);MPL[_0x54ef13(0xc3)]==_0x54ef13(0xe1)&&($(_0x54ef13(0xca))[_0x54ef13(0xdb)]('.prdList')[_0x54ef13(0xa9)](_0x54ef13(0xb4)),$('.Prd_addBtn')[_0x54ef13(0xa9)](_0x54ef13(0xb4)));MPL[_0x54ef13(0xcb)]==_0x54ef13(0xe1)&&($(_0x54ef13(0xca))['find'](_0x54ef13(0xb7))['addClass'](_0x54ef13(0x9b)),$(_0x54ef13(0xaf))[_0x54ef13(0xa9)](_0x54ef13(0x9b)));MPL[_0x54ef13(0x9f)]==_0x54ef13(0xe1)&&$('.path')[_0x54ef13(0xe3)](_0x54ef13(0xbd),'0');MPL[_0x54ef13(0xd4)]=='off'&&$(_0x54ef13(0xba))[_0x54ef13(0xa9)](_0x54ef13(0xcf));function _0x451a(){var _0x1e55ff=['find','</div>','preventDefault','set-escrowSelect','append','.xans-product-listrecommend\x20.prdList\x20>\x20li:eq(','off','windows','css','each','.mainContainer','set-subTopBannerSliderUse','set-prdAlign','img[alt=','mobileBtnOff','.xans-product-listmain,\x20.xans-product-listrecommend,\x20.xans-product-listnew,\x20.xans-product-listnormal,\x20.xans-search-result,\x20.xans-project-productlist','map','click','set-subTopPosiTxt','6698324BOpFdJ','attr','img','set-prdInline','use-footerContents4','display','img[src*=\x27/mobile/\x27]',')\x20.mpl_best','.footerContents4\x20.escrowBtn','addClass','open','href','set-escrowLink','parent','15777nyeSFp','.Prd_addBtn','6010VmdaPi','length','set-dcSaleUse','set-overPrdThumb','pcBtnOff','remove','wrapAll','.prdList','<div\x20class=','.xans-product-headcategory\x20.banner','.subPrdMenuCategory','1YJEXDy','.xans-product-listrecommend\x20.prdList\x20>\x20li\x20.mpl_best','opacity','html','363482HnOHEV','class-timeSaleZone','set-bestItem','next','set-itemBtnUse','.escrow','set-mPrdAlign','193434gttuGr','wrap','<div/>','show','.ec-base-product','set-itemBtnMobileUse','.ec-base-product:not(.xans-product-relationlist)','.xans-product-listmain,\x20.xans-product-listrecommend,\x20.xans-product-listnew,\x20.xans-product-listnormal,\x20.xans-product-relationlist,\x20.xans-search-result,\x20.xans-project-productlist','1761996QQuREL','basicType','mobile','focus','1883954vpqzsZ','subTopBannerSliderOff','set-subTopMenuSlider','3630608FEpacU','<div\x20/>','.footerContents4','175aiugIk','width=500,height=640,scrollbars=yes','BEST\x20'];_0x451a=function(){return _0x1e55ff;};return _0x451a();}if(MPL[_0x54ef13(0xc1)]=='on'){var best_t=$('.xans-product-listrecommend\x20.prdList\x20>\x20li')['length'];for(var i=0x0;i<best_t;i++){$(_0x54ef13(0xbc))[_0x54ef13(0xc9)](),$(_0x54ef13(0xe0)+i+_0x54ef13(0xa7))['html'](_0x54ef13(0xda)+(i+0x1));}}function _0x5caf(_0x2f39bb,_0x4214d5){var _0x451acc=_0x451a();return _0x5caf=function(_0x5cafd6,_0x5a5e89){_0x5cafd6=_0x5cafd6-0x97;var _0x496786=_0x451acc[_0x5cafd6];return _0x496786;},_0x5caf(_0x2f39bb,_0x4214d5);}MPL['set-mTitAlign']=='center'&&$(_0x54ef13(0x97))['addClass'](MPL['set-mTitAlign']);MPL[_0x54ef13(0xa4)]=='on'&&(MPL[_0x54ef13(0xde)]&&$(_0x54ef13(0xd7))[_0x54ef13(0xdb)](_0x54ef13(0xc4))[_0x54ef13(0xdb)](_0x54ef13(0x9a)+MPL[_0x54ef13(0xde)]+']')[_0x54ef13(0xe3)](_0x54ef13(0xa5),'inline-block'),MPL[_0x54ef13(0xac)]&&($(_0x54ef13(0xd7))['find']('.escrowBtn')[_0x54ef13(0xa1)](_0x54ef13(0xab),MPL[_0x54ef13(0xac)]),$(_0x54ef13(0xa8))[_0x54ef13(0x9e)](function(_0x1b0e03){var _0x3aa1ca=_0x54ef13,_
129600x29d169=$(this)[_0x3aa1ca(0xa1)](_0x3aa1ca(0xab));return _0x1b0e03[_0x3aa1ca(0xdd)](),popWin=window[_0x3aa1ca(0xaa)](_0x29d169,_0x3aa1ca(0xe2),_0x3aa1ca(0xd9)),popWin[_0x3aa1ca(0xd1)](),![];})));if($(_0x54ef13(0xb9))['length']>0x0){if(MPL[_0x54ef13(0x98)]=='on'){var subTopBannerImg='',checkDevice='';isMobile()==!![]?(subTopFilter=$(_0x54ef13(0xb9))['find'](_0x54ef13(0xa6)),checkDevice=_0x54ef13(0xd0)):(subTopFilter=$(_0x54ef13(0xb9))[_0x54ef13(0xdb)](_0x54ef13(0xa2)),checkDevice='pc'),subTopFilter['length']>0x0?(subTopFilter[_0x54ef13(0xe4)](function(){var _0x3e1fb8=_0x54ef13;if($(this)[_0x3e1fb8(0xc2)](_0x3e1fb8(0x9d))['length']>0x0){var _0x38ee3c=$(this)[_0x3e1fb8(0xc2)](_0x3e1fb8(0x9d))[_0x3e1fb8(0xb6)](_0x3e1fb8(0xd6))[_0x3e1fb8(0xad)]()['html']();subTopBannerImg+='<div\x20class='+checkDevice+'>'+$(this)[_0x3e1fb8(0xc7)]('<div/>')[_0x3e1fb8(0xad)]()[_0x3e1fb8(0xbe)]()+_0x38ee3c+_0x3e1fb8(0xdc),$(this)['next'](_0x3e1fb8(0x9d))[_0x3e1fb8(0xb5)]();}else subTopBannerImg+=_0x3e1fb8(0xb8)+checkDevice+'>'+$(this)[_0x3e1fb8(0xc7)](_0x3e1fb8(0xc8))['parent']()[_0x3e1fb8(0xbe)]()+_0x3e1fb8(0xdc);}),$('.xans-product-headcategory\x20.banner')['empty']()[_0x54ef13(0xdf)](subTopBannerImg),$(_0x54ef13(0xb9))['slick']({'speed':0x1f4,'autoplaySpeed':0x1f40,'autoplay':!![],'dots':!![],'arrows':![]})):checkDevice==_0x54ef13(0xd0)&&$('.xans-product-headcategory\x20.banner')[_0x54ef13(0xb5)]();}else $(_0x54ef13(0xb9))[_0x54ef13(0xa9)](_0x54ef13(0xd3));}setProductListInit(),gd_select_remodeling();$(_0x54ef13(0xcc))[_0x54ef13(0xb1)]>0x0&&MPL[_0x54ef13(0xc0)]=='on'&&setTimeout(function(){TimeSalePrdF();},0x1f4);$('.xans-product-detail')['length']>0x0&&MPL['class-timeSaleZone']=='on'&&TimeSalePrdF('D'); 12961}); 12962 12963//ì¿ í¤ìì± ê³µíµ í¨ì ( ì¸í¸ë¡íì , ì°ì¸¡íë¨ì¬ë¼ì´ëíì ..... ) 12964function createCookie(name, value, days) { 12965 var expires; 12966 if (days) { 12967 var date = new Date(); 12968 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 12969 expires = "; expires=" + date.toGMTString(); 12970 } else { 12971 expires = ""; 12972 } 12973 document.cookie = name + "=" + value + "; path=/; expires=" + expires + ";"; 12974} 12975//ì¿ í¤ìì± ( ì¸í¸ë¡íì , ì°ì¸¡íë¨ì¬ë¼ì´ëíì ... ) 12976function PopupMakeCookie(name, elemnt) { 12977 if (elemnt.checked === true) { 12978 createCookie(name,'true',1); 12979 var popupKind = name.split('_'); 12980 if(name == 'MPL_bottomRightPop'){ 12981 $('#MPL_bottomRightPop').removeClass("nowShow"); 12982 }else{ 12983 setTimeout("$('#" + name + "').hide()"); 12984 } 12985 } else { 12986 createCookie(name, null); 12987 } 12988 12989 return; 12990} 12991//모ë°ì¼ 기기 ì²´í¬ 12992function isMobile() { 12993 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 12994} 12995//ì¤í¬ë¡¤ë° í¬ê¸° 12996function getScrollBarWidth () { 12997 var inner = document.createElement('p'); 12998 inner.style.width = "100%"; 12999 inner.style.height = "200px"; 13000 13001 var outer = document.createElement('div'); 13002 outer.style.position = "absolute"; 13003 outer.style.top = "0px"; 13004 outer.style.left = "0px"; 13005 outer.style.visibility = "hidden"; 13006 outer.style.width = "200px"; 13007 outer.style.height = "150px"; 13008 outer.style.overflow = "hidden"; 13009 outer.appendChild (inner); 13010 13011 document.body.appendChild (outer); 13012 var w1 = inner.offsetWidth; 13013 outer.style.overflow = 'scroll'; 13014 var w2 = inner.offsetWidth; 13015 if (w1 == w2) w2 = outer.clientWidth; 13016 13017 document.body.removeChild (outer); 13018 13019 return (w1 - w2); 13020}; 13021 13022//ìí리ì¤í¸ í ì¸ì¨ íì 13023function PrdListPerCentPrice(){ 13024 var loofChk = $('.xans-product-listmain, .xans-product-listrecommend, .xans-product-listnew, .xans-product-listnormal, .xans-search-result, .xans-project-productlist').length; 13025 if(loofChk > 0){ 13026 var prdList = $('.prdList').find('.description'); 13027 prdList.each(function(){ 13028 var target = $(this), 13029 displayPosi = $(this).find("li.product_custom"); 13030 PerCentFixPrice(target, displayPosi); 13031 }); 13032 } 13033} 13034//ìí리ì¤í¸ í ì¸ì¨ íì 13035function PerCentFixPrice(target, displayPosi){ 13036 var saleDisplay = MPL['set-saleDisplay']; 13037 var price, custom, dcPriceTxt=""; 13038 custom = parseInt(target.attr('data-custom').replace(/[^0-9]/g,"")); 13039 price = parseInt(target.attr('data-price').replace(/[^0-9]/g,"")); 13040 13041 if (custom > 0 && price > 0 && price != custom) { 13042 if( target.attr('id') == 'salePriceAttr'){ //ìíìì¸ 13043 if (saleDisplay == 'per') { 13044 dcPriceTxt = "<div class='prd_DcSale'>" + (((custom - price) / custom) * 100).toFixed(0) + "<span>%</span></div>"; 13045 } else if (saleDisplay == 'won') { 13046 dcPriceTxt = "<div class='prd_DcSale won'>" + parseInt(custom - price).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "<span>ì off</span></div>"; 13047 } 13048 }else{ 13049 if (saleDisplay == 'per') { 13050 dcPriceTxt = "<li class='prd_DcSale'>" + (((custom - price) / custom) * 100).toFixed(0) + "<span>%</span></li>"; 13051 } else if (saleDisplay == 'won') { 13052 dcPriceTxt = "<li class='prd_DcSale won'>" + parseInt(custom - price).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "<span>ì off</span></li>"; 13053 } 13054 } 13055 if(target.find(".prd_DcSale").length < 1 ){ 13056 displayPosi.before(dcPriceTxt); 13057 } 13058 } 13059} 13060//íìì¸ì¼ 기ê°íì 13061function TimeSalePrdF(tmp){ 13062 if(tmp == 'D'){ 13063 $('.xans-product-detail').timeSale({ usePlugin:true, posiType:'Detail', pageType:'Detail' }); 13064 }else{ 13065 $('.ec-base-product').timeSale({ usePlugin:true, posiType:MPL['set-goodsTimePosi'], pageType:'List' }); 13066 } 13067} 13068 13069//niceselect ë³ê²½ 13070function gd_select_remodeling() { 13071 if ($('.nice-select').length > 0) { $('.nice-select').niceSelect('destroy'); $('.nice-select').niceSelect();} 13072} 13073 13074//ìí리ì¤í¸ ì¤ì 13075function setProductListInit( ){ 13076 const _0x1790fe=_0x42a5;(function(_0x56b357,_0x22d2f4){const _0x433686=_0x42a5,_0x5005a4=_0x56b357();while(!![]){try{const _0x965336=parseInt(_0x433686(0x1be))/0x1+-parseInt(_0x433686(0x181))/0x2+parseInt(_0x433686(0x1b2))/0x3*(parseInt(_0x433686(0x1a1))/0x4)+parseInt(_0x433686(0x1a6))/0x5*(-parseInt(_0x433686(0x182))/0x6)+parseInt(_0x433686(0x1b4))/0x7+-parseInt(_0x433686(0x184))/0x8*(-parseInt(_0x433686(0x175))/0x9)+-parseInt(_0x433686(0x18a))/0xa;if(_0x965336===_0x22d2f4)break;
13076else _0x5005a4['push'](_0x5005a4['shift']());}catch(_0x4a9a4c){_0x5005a4['push'](_0x5005a4['shift']());}}}(_0x21d5,0xb7ac1));const PRODUCT_LIST_TYPE=[_0x1790fe(0x1b5),'xans-product-listrecommend',_0x1790fe(0x1a2),'xans-product-listnormal'];$[_0x1790fe(0x1b3)](PRODUCT_LIST_TYPE,function(_0x223c13,_0x3b1a21){const _0xc5e4cb=_0x1790fe;let _0xc51ea8=$('.'+_0x3b1a21)['not'](_0xc5e4cb(0x17f))[_0xc5e4cb(0x1bc)]('.ec-base-supply'),_0x464720=_0x3b1a21[_0xc5e4cb(0x1bf)](_0xc5e4cb(0x1a9),'');_0xc51ea8[_0xc5e4cb(0x1b3)](function(_0x174c07){const _0x4f9e50=_0xc5e4cb;let _0x2c2a0e=this,_0x55f118=_0x464720==_0x4f9e50(0x1bb)?MPL[_0x464720+'Prd'][_0x174c07]:MPL[_0x464720+_0x4f9e50(0x1a7)],_0x3a7a2a=_0x55f118[_0x4f9e50(0x187)][_0x4f9e50(0x1bf)](/[^0-9]/g,''),_0x10b1d0=useCheckValue(_0x55f118[_0x4f9e50(0x193)]),_0x30bd61=slideUseCheckValue(_0x464720);$(_0x2c2a0e)[_0x4f9e50(0x1b9)]('id',_0x3b1a21+'-'+_0x174c07);if(_0x10b1d0){$(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x19c)](_0x55f118[_0x4f9e50(0x1b6)]);_0x55f118[_0x4f9e50(0x174)]==_0x4f9e50(0x1ac)&&$(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x19c)]('small');_0x55f118[_0x4f9e50(0x185)]=='on'&&($(_0x2c2a0e)[_0x4f9e50(0x1ba)]()['hasClass']('mainPrd')==!![]&&$(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x1ae)]('mainPrd'),$(_0x2c2a0e)[_0x4f9e50(0x186)](_0x4f9e50(0x171)+_0x55f118[_0x4f9e50(0x17c)]+_0x4f9e50(0x191)));MPL[_0x4f9e50(0x1a0)]=='on'&&$(_0x2c2a0e)[_0x4f9e50(0x1ad)](_0x4f9e50(0x1b8))[_0x4f9e50(0x1aa)]>0x0&&_0x55f118[_0x4f9e50(0x1b6)]==_0x4f9e50(0x189)&&$(_0x2c2a0e)['next'](_0x4f9e50(0x1b8))['show']();setProductSetup(_0x2c2a0e,_0x55f118);if(_0x55f118['type']==_0x4f9e50(0x176)){var _0x49ad17=_0x4f9e50(0x18c)+$(_0x2c2a0e)[_0x4f9e50(0x17d)](_0x4f9e50(0x18f))[_0x4f9e50(0x1b7)]()[_0x4f9e50(0x1a3)]('<div\x20/>')['parent']()[_0x4f9e50(0x19f)]()+_0x4f9e50(0x18d);$(_0x2c2a0e)[_0x4f9e50(0x1af)](_0x49ad17),$(_0x2c2a0e)[_0x4f9e50(0x17d)]('.titleArea')[_0x4f9e50(0x1a4)]();}_0x30bd61&&setProductSlide(_0x2c2a0e,_0x55f118,_0x3a7a2a);}else $(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x1a4)]();});}),$(_0x1790fe(0x179))[_0x1790fe(0x1b3)](function(_0x25db62){const _0x17a204=_0x1790fe;let _0x459d21=this,_0x9e6102=$(_0x459d21)['find']('.ec-base-product-tab'),_0x1b96f2=$(_0x459d21)[_0x17a204(0x17d)](_0x17a204(0x1b0)),_0x3f608f=MPL[_0x17a204(0x1ab)],_0x3f6f22=_0x9e6102[_0x17a204(0x1aa)],_0x1ebe23=useCheckValue(_0x3f608f[_0x17a204(0x193)]),_0x4803bd=[MPL[_0x17a204(0x1ab)]['tab-name1'],MPL['mainTabPrd']['tab-name2'],MPL[_0x17a204(0x1ab)][_0x17a204(0x188)],MPL[_0x17a204(0x1ab)][_0x17a204(0x178)],MPL['mainTabPrd'][_0x17a204(0x17e)]],_0x19dd29=_0x4803bd[_0x17a204(0x198)](Boolean),_0x244a99=[];if(_0x1ebe23&&_0x3f6f22>0x0&&_0x19dd29['length']>0x0){$(_0x459d21)[_0x17a204(0x1b9)]('id','tab_product-'+_0x25db62),_0x9e6102['eq'](0x0)['addClass']('on'),setProductSetup(_0x459d21,_0x3f608f);_0x3f608f[_0x17a204(0x174)]==_0x17a204(0x1ac)&&$(_0x459d21)[_0x17a204(0x1ba)]()[_0x17a204(0x19c)](_0x17a204(0x1ac));_0x3f6f22>_0x19dd29[_0x17a204(0x1aa)]?_0x9e6102[_0x17a204(0x1b3)](function(_0x4fba99){const _0x3b5cd1=_0x17a204;_0x19dd29[_0x4fba99]?_0x244a99[_0x4fba99]=_0x19dd29[_0x4fba99]:$(this)[_0x3b5cd1(0x1a4)]();}):$[_0x17a204(0x1b3)](_0x19dd29,function(_0x461551){_0x9e6102['eq'](_0x461551)['length']&&(_0x244a99[_0x461551]=_0x19dd29[_0x461551]);});$[_0x17a204(0x1b3)](_0x244a99,function(_0x14d65c,_0x5b50f1){const _0x58a720=_0x17a204;_0x14d65c==0x0?_0x1b96f2['find']('ul')[_0x58a720(0x192)]('<li\x20class=\x22swiper-slide\x20on\x22\x20><a\x20href=\x22#\x22>'+_0x5b50f1+_0x58a720(0x196)):_0x1b96f2['find']('ul')[_0x58a720(0x192)](_0x58a720(0x1bd)+_0x5b50f1+'</a></li>');});var _0x44ffed=new Swiper(_0x17a204(0x19a)+_0x25db62+_0x17a204(0x173),{'slidesPerView':_0x17a204(0x180),'spaceBetween':0x0});$(_0x17a204(0x19a)+_0x25db62+_0x17a204(0x197))[_0x17a204(0x19b)](function(_0x8c5fc1){const _0x450921=_0x17a204;_0x8c5fc1[_0x450921(0x17b)](),$(this)[_0x450921(0x19c)]('on')[_0x450921(0x18e)]()[_0x450921(0x1ae)]('on'),_0x9e6102['eq']($(this)[_0x450921(0x1a5)]())[_0x450921(0x18e)]()[_0x450921(0x19e)](),_0x9e6102['eq']($(this)[_0x450921(0x1a5)]())['fadeIn'](_0x450921(0x1b1));});}else $(_0x459d21)[_0x17a204(0x1ba)]()[_0x17a204(0x1a4)]();});function setProductSlide(_0x3a8d82,_0x1ea9eb,_0x1cdc07){const _0x2f2c5f=_0x1790fe;let _0x3b772f=$(_0x3a8d82),_0x31e04a='#'+_0x3b772f['attr']('id');_0x1ea9eb['type']=='slider'&&_0x3b772f[_0x2f2c5f(0x17d)](_0x2f2c5f(0x172))[_0x2f2c5f(0x194)]({'draggable':!![],'autoplay':!![],'infinite':!![],'slidesToShow':_0x1cdc07,'slidesToScroll':0x1,'responsive':[{'breakpoint':0x4d8,'settings':{'slidesToShow':_0x1cdc07}},{'breakpoint':0x3e8,'settings':{'slidesToShow':0x3}},{'breakpoint':0x300,'settings':{'slidesToShow':0x2}}]});if(_0x1ea9eb[_0x2f2c5f(0x1b6)]==_0x2f2c5f(0x19d)||_0x1ea9eb['type']==_0x2f2c5f(0x176)){_0x3b772f[_0x2f2c5f(0x192)](_0x2f2c5f(0x183)),_0x3b772f[_0x2f2c5f(0x17d)](_0x2f2c5f(0x1c0))[_0x2f2c5f(0x19c)](_0x2f2c5f(0x199)),_0x3b772f[_0x2f2c5f(0x17d)]('.prdList\x20>\x20.xans-record-')[_0x2f2c5f(0x19c)](_0x2f2c5f(0x17a));var _0x3da9d3=new Swiper(_0x31e04a,{'slidesPerView':'auto','spaceBetween':0x0,'scrollbar':{'el':_0x31e04a+_0x2f2c5f(0x195),'draggable':!![]},'breakpoints':{0x2f8:{'slidesPerView':0x2},0x400:{'slidesPerView':0x3},0x5a0:{'slidesPerView':_0x1cdc07},0x7a8:{'slidesPerView':_0x1cdc07}}});}}
13076function setProductSetup(_0x2ebdef,_0x3fc269){const _0xbce550=_0x1790fe;for(let _0x182833 in _0x3fc269){let _0x217de8=_0x182833[_0xbce550(0x190)]('-'),_0x26ca6c=_0x217de8[0x0],_0x181386=_0x217de8[_0xbce550(0x177)](0x1)['join']('-'),_0x34652b=getElement(_0x2ebdef,_0x181386);_0x34652b&&(_0x26ca6c==_0xbce550(0x18b)&&(_0x3fc269[_0x182833]?_0x34652b['html'](_0x3fc269[_0x182833]):_0x34652b[_0xbce550(0x1a4)]()),_0x26ca6c=='class'&&!_0x34652b['hasClass'](_0x3fc269[_0x182833])&&_0x34652b['addClass'](_0x3fc269[_0x182833]));}return![];}function _0x42a5(_0x5844ed,_0x3da0db){const _0x21d590=_0x21d5();return _0x42a5=function(_0x42a55c,_0x33913d){_0x42a55c=_0x42a55c-0x171;let _0x1d1340=_0x21d590[_0x42a55c];return _0x1d1340;},_0x42a5(_0x5844ed,_0x3da0db);}function getElement(_0x26caac,_0x574c94){const _0xfb2e9a=_0x1790fe;if(_0x574c94){if($(_0x26caac)[_0xfb2e9a(0x17d)]('#'+_0x574c94)[_0xfb2e9a(0x1aa)])return $(_0x26caac)[_0xfb2e9a(0x17d)]('#'+_0x574c94);else{if($(_0x26caac)[_0xfb2e9a(0x17d)]('.'+_0x574c94)[_0xfb2e9a(0x1aa)])return $(_0x26caac)[_0xfb2e9a(0x17d)]('.'+_0x574c94);}}return![];}function _0x21d5(){const _0xf4e653=['class-prdList','tab-name3','gallery','11959670BAuwWO','txt','<div\x20class=\x22leftArea\x22>','</div>','siblings','.titleArea','split','\x22></div>','append','use','slick','\x20.swiper-scrollbar','</a></li>','\x20.goods_tab_tit\x20li','filter','swiper-wrapper','#tab_product-','click','addClass','scroll','hide','html','set-mainPrd-moreUse','4UsfJwJ','xans-product-listnew','wrapAll','remove','index','6605oNLtpL','Prd','off','xans-product-list','length','mainTabPrd','small','next','removeClass','before','.goods_tab_tit','200','3098883NGTvCi','each','6901489tcNGSx','xans-product-listmain','type','clone','.more','attr','parent','main','not','<li\x20class=\x22swiper-slide\x22\x20><a\x20href=\x22#\x22>','612311yFZhKT','replace','.prdList\x20','<div\x20class=\x22mainBgContainer\x22\x20style=\x22background-color:','.prdList','\x20.goods_tab_tit','contain','1678554lSfnjh','scrollLR','slice','tab-name4','.tab_product','swiper-slide','preventDefault','bgColor','find','tab-name5','.ec-base-product-tab','auto','770200zAhWxu','3894eNaBqR','<div\x20class=\x22swiper-scrollbar\x22></div>','24AaWMay','bgUse','wrap'];_0x21d5=function(){return _0xf4e653;};return _0x21d5();}function useCheckValue(_0x2cfddf){const _0x5b843f=_0x1790fe;let _0x36225d;return _0x2cfddf==_0x5b843f(0x1a8)||_0x2cfddf==''?_0x36225d=![]:_0x36225d=!![],_0x36225d;}function slideUseCheckValue(_0x449384){let _0x53edc5;return _0x449384=='normal'?_0x53edc5=![]:_0x53edc5=!![],_0x53edc5;} 13077 $('.mainPrd').each(function(index){ 13078 if($('.mainPrd').eq(index).find('.tab_product').length < 1 && $('.mainPrd').eq(index).find('.ec-base-product').length < 1){ 13079 $('.mainPrd').eq(index).remove(); 13080 } 13081 }); 13082} 13083 13084 13085/******************************************************************** 13086 MPLSHOP ì¼í몰 ì¬ì©ìë´ 13087 13088 ì íìµ ëìì¸ì ì ì물(ìì¤ ê°ë°ì½ë)ì ì ìê¶ë²ì ìí ë³´í¸ë¥¼ ë°ë ì ì물ë¡ì ë¬´ë¨ ë³µì ë° ë°°í¬ ì¬í매를 ê¸ì§í©ëë¤. 13089 13090 - ì¤í¨ëìì¸ì 기본ëë©ì¸ 1ê°ë¹ 1ê°ì ë¼ì´ì ì¤ë¡ ì´ì©ë©ëë¤. 13091 - ì¤í¨ëìì¸ì ì¬ì©ì 1Copy ë¼ì´ì¼ì¤ë¡ ìµì´ ì ì©ë í¸ì¤í (ì¬ì´í¸ ë° ì¼í몰)ììë§ ì¬ì©ê¶ì ë¶ì¬í©ëë¤. 13092 - ë©í°ì¼í몰(ì¸êµì´ì¬ì´í¸) ìì± ë° ì¶ê°ì í´ë¹ ëë©ì¸ì 1ê°ì 기본ëë©ì¸ì¼ë¡ ë³´ì 1ê°ì ë¼ì´ì ì¤ë¡ ì¤ì ë©ëë¤. 13093*********************************************************************/ 13094 13095 13096/******************************************************************** 13097 â â ì¼í몰 기본ì¤ì 13098*********************************************************************/ 13099 13100 13101/*----------------------------------------- 13102 13103â ì¬ì´í¸ í¬ì¸í¸ ì»¬ë¬ ë³ê²½ 13104 13105------------------------------------------*/ 13106//í¬ì¸í¸ì»¬ë¬ #í¬í¨í ììì½ë 13107MPL['set-pointColor'] = '#537535'; 13108//리뷰카ì´í¸ ë°ì¤ í¬ì¸í¸ ì»¬ë¬ #í¬í¨í ììì½ë 13109MPL['set-pointUnderLineColor'] = '#b7f4c0'; 13110//ìí ì¶ì²ìí ìì BEST ë°°ê²½ìì ë³ê²½
13111MPL['set-bestBgColor'] = '#000000'; 13112/*----------------------------------------- 13113 13114â ì¬ì´í¸ ì¤í¬ë¡¤ ì ëë©ì´ì í¨ê³¼ ì¬ì© 13115 13116------------------------------------------*/ 13117//ì¬ì©ì¤ì on, off 13118MPL['set-scrollanimate'] = 'on'; 13119 13120 13121/*----------------------------------------- 13122 13123â ì¬ì´í¸ í/ë©ë´ ì¬ì© 13124 13125------------------------------------------*/ 13126//í,ë©ë´ ë¼ì´ë(ë¥ê·¼í ë리) on, off 13127MPL['set-circleTab'] = 'on'; 13128//ìë¸ìë¨(ììì¶ê° ë©ë´) íì ë¤ë¹ê²ì´ì ë©ë´ ë ¸ì¶ ì¬ì©ì¤ì on, off 13129MPL['use-mplAddSubTab'] = 'on'; 13130//모ë°ì¼ ìë¨ ë©ë´ ë ¸ì¶ ì¬ì©ì¤ì on, off 13131MPL['use-mplCategoryMobile'] = 'on'; 13132//모ë°ì¼ íë¨ ê³ ì ìì ë ¸ì¶ ì¬ì©ì¤ì on, off 13133MPL['use-m_mobile_bottom_fixed_box'] = 'on'; 13134//모ë°ì¼ íë¨ ê³ ì ìì íì ì¤ì íì ë°°ê²½ ì¬ì©ì white // ë¸ë ë°°ê²½ ì¬ì©ì black // íì ë°°ê²½ ì¬ì©ì grey 13135MPL['set-m_mobile_bottom_fixed_type'] = 'white'; 13136 13137 13138/*----------------------------------------- 13139 13140â ìí ì ë³´ ë ¸ì¶ ê´ë ¨ on, off 13141 13142------------------------------------------*/ 13143//ìíì¸ë¤ì¼ ë¼ì´ë(ë¥ê¸ê²) 13144MPL['set-radiusPrdThumb'] = 'on'; 13145//ìí리ì¤í¸(Pc) ë ¸ì¶ì ë³´ ì ë ¬ center , left 13146MPL['set-prdAlign'] = 'left'; 13147//ìí리ì¤í¸(Mobile) ë ¸ì¶ì ë³´ ì ë ¬ center , left 13148MPL['set-mPrdAlign'] = 'left'; 13149//ì ê° í매 íì¤íì 13150MPL['set-prdInline'] = 'on'; 13151//í ì¸ì¨ íì 13152MPL['set-dcSaleUse'] = 'on'; 13153//ìí í ì¸ì¨ íìì¤ì í ì¸ì¨ : per , í ì¸ê¸ì¡ : won 13154MPL['set-saleDisplay'] = 'per'; 13155//ìí ìì¸ ìë¨ ë¦¬ë·° ì¹´ì´í¸ ë ¸ì¶ ( ìíì ë³´íìì¤ì ìíìì¸ : ìíí기 íìí¨ > ì¹´ì´í¸ê° 0ê° ì´ìì¼ ê²½ì° ë³´ì¬ì§ê² ë©ëë¤. ) 13156MPL['use-reviewCntTop'] = 'on'; 13157//ìí ìì¸ ìë¨ ë¦¬ë·° ì¹´ì´í¸ ë ¸ì¶ í ì¤í¸ 13158MPL['txt-reviewCntTop'] = '리뷰'; 13159//ì¥ë°êµ¬ë, ì°í기, ìµì 보기, ì¢ìì ìì´ì½ ë ¸ì¶ì¤ì on, off 13160MPL['set-itemBtnUse'] = 'on'; 13161//ì¥ë°êµ¬ë, ì°í기, ì¢ìì ìì´ì½ 모ë°ì¼ ë ¸ì¶ì¤ì 13162MPL['set-itemBtnMobileUse'] = 'off'; 13163//ìíì¹´í ê³ ë¦¬ ìë¨ ì´ë¯¸ì§ ì¬ë¼ì´ë ì¬ì© 13164MPL['set-subTopBannerSliderUse'] = 'on'; 13165//íì´ì§ íì¬ìì¹ íì ì¬ì© , 모ë°ì¼ì 기본ì ì¼ë¡ ë ¸ì¶ëì§ ììµëë¤. 13166MPL['set-subTopPosiTxt'] = 'off'; 13167//ìíì¹´í ê³ ë¦¬ ë©ë´ ì¬ë¼ì´ë ì¬ì© ( ë°ìí ì¬ì´í¸ë onì¼ë¡ êµ¬ì± ) 13168MPL['set-subTopMenuSlider'] = 'on'; 13169//ìí íìì¸ì¼ ë ¸ì¶ ì¤ì on, off 13170MPL['class-timeSaleZone'] = 'on'; 13171//ìí íìì¸ì¼ ë ¸ì¶ ìì¹ê° Center, topRight, bottomLeft, bottomFixd 13172MPL['set-goodsTimePosi'] = 'Center'; 13173//모ë°ì¼ í´ìë íìì¸ì¼ ë ¸ì¶ on , off 13174MPL['class-container'] = 'on'; 13175//ìí íìì¸ì¼ ììì íì ë ¸ì¶ on , off 13176MPL['set-yetTime'] = 'on'; 13177//ì¶ì² ìí ìì best item ììíì ì¬ì© on , off 13178MPL['set-bestItem'] = 'on'; 13179 13180//ìíì¸ë¤ì¼ ì´ë¯¸ì§ ì íí¨ê³¼ ì¬ì© 13181// changePrdThumb : ì¤ë²ì ì´ë¯¸ì§ ë³ê²½ ( 기본 : ëª©ë¡ ì´ë¯¸ì§ , ì¤ë²ì : ì¶ì ì´ë¯¸ì§ ) 13182// productEffect : ì¤ë²ì íëí¨ê³¼ 13183// off í¨ê³¼ 미ì¬ì© 13184MPL['set-overPrdThumb'] = 'changePrdThumb'; 13185 13186/*----------------------------------------- 13187 13188â ë©ì¸ ì¸í¸ë¡ íì 13189 13190------------------------------------------*/ 13191//ì¬ì©ì¤ì on, off ëë ë°°ë매ëì ìì í´ë¹ ìì 미ì¬ì© 13192MPL['set-introPop'] = 'on'; 13193 13194/*----------------------------------------- 13195 13196 13197/*----------------------------------------- 13198 13199â ë©ì¸ ì¢ì¸¡ íë¨ ëª¨ì íì 13200 13201------------------------------------------*/ 13202//ì¬ì©ì¤ì on, off ëë ë°°ë매ëì ìì í´ë¹ ìì 미ì¬ì© 13203MPL['set-bottomLeftPop'] = 'on'; 13204//모ë°ì¼ ì¬ì©ì¤ì on, off 13205MPL['set-bottomLeftPopUseMobile'] = 'off'; 13206 13207/*----------------------------------------- 13208 13209â ë©ì¸ ì°ì¸¡ íë¨ ì¬ë¼ì´ë íì 13210 13211------------------------------------------*/ 13212//ì¬ì©ì¤ì on, off ëë ë°°ë매ëì ìì í´ë¹ ìì 미ì¬ì© 13213MPL['set-bottomRightPop'] = 'on'; 13214 13215 13216/*----------------------------------------- 13217 13218â ì¬ì´í¸ ê³ ê°ì¼í° 13219 13220------------------------------------------*/ 13221//ê³ ê°ì¼í° ì°ë½ì² 13222MPL['set-csTel'] = '070-4239-3683'; 13223//ê³ ê°ì¼í° ì´ììê° 13224MPL['set-csOpeningTime'] = 'ì´ììê° : 10:00 ~ 17:00 / ì ì¬ìê° : 12:00 ~ 13:00 / í , ì¼, ê³µí´ì¼ í´ë¬´ (ê²ìíì ì´ì©í´ì£¼ì¸ì)'; 13225 13226 13227/*----------------------------------------- 13228 13229â ì¬ì´í¸íë¨ êµ¬ë§¤ìì ìë¹ì¤ ë ¸ì¶ (ìì¤í¬ë¡) 13230------------------------------------------*/ 13231//ì¬ì©ì¤ì on, off 13232MPL['use-footerContents4'] = 'on'; 13233//ë ¸ì¶ PGì¬ ( ì¬ì³, KGì´ëìì¤, NHNíêµì¬ì´ë²ê²°ì , íêµì ë³´íµì , ì¼ì´ìì¤ë·, ëì´ì¤íì´ë¨¼ì¸ , í ì¤íì´ë¨¼ì¸ , ì¸íë± í¬, ì¤ë§í¸ë¡ ) 13234MPL['set-escrowSelect'] = 'ì¼ì´ìì¤ë·'; 13235//ì°ê²° ë§í¬ ì½ì 13236MPL['set-escrowLink'] = 'https://nims.ksnet.co.kr/pg_infoc/src/dealinfo/pg_shop_info.jsp?shop_id=2005803780'; 13237 13238 13239/*----------------------------------------- 13240 13241â ìë¨ í ë ë°°ë 13242 13243------------------------------------------*/ 13244// íë°°ë ì ì²´ ì¬ì©ì¤ì 13245MPL['use-topBanner'] = 'off'; 13246 13247 13248MPL['set-topBanner'][0] = []; 13249//첫ë²ì§¸ ë°°ë ì¬ì©ì¤ì on, off 13250MPL['set-topBanner'][0]['use'] = 'on'; 13251//ë°°ê²½ìì ì½ë #í¬í¨í ììì½ë 13252MPL['set-topBanner'][0]['ë°°ê²½ìì'] = '#000000'; 13253//í°í¸ì»¬ë¬ #í¬í¨í ììì½ë 13254MPL['set-topBanner'][0]['í°í¸ì»¬ë¬'] = '#ffffff'; 13255//í°í¸ì¬ì´ì¦ ì«ìpx 13256MPL['set-topBanner'][0]['í°í¸ì¬ì´ì¦'] = '13px'; 13257//ì°ê²°ë§í¬ #none ì ê±°í ì°ê²° url ì½ì 13258MPL['set-topBanner'][0]['ë§í¬'] = '#none'; 13259//ìì°½ì´ê¸° ìì°½ì¼ë¡ ì°ê²°ì on 13260MPL['set-topBanner'][0]['ìì°½ì´ê¸°'] = 'on'; 13261//ë ¸ì¶ í ì¤í¸ ì ë ¥ 13262MPL['set-topBanner'][0]['ë ¸ì¶í ì¤í¸'] = 'ë³´ì±êµ° ì¨ë¼ì¸ ì¼í몰 ë³´ì±ëª°ì ëë¤.'; 13263 13264 13265MPL['set-topBanner'][1] = []; 13266//ëë²ì§¸ ë°°ë ì¬ì©ì¤ì on, off 13267MPL['set-topBanner'][1]['use'] = 'on'; 13268//ë°°ê²½ìì ì½ë #í¬í¨í ììì½ë 13269MPL['set-topBanner'][1]['ë°°ê²½ìì'] = '#997054';
13270//í°í¸ì»¬ë¬ #í¬í¨í ììì½ë 13271MPL['set-topBanner'][1]['í°í¸ì»¬ë¬'] = '#ffffff'; 13272//í°í¸ì¬ì´ì¦ ì«ìpx 13273MPL['set-topBanner'][1]['í°í¸ì¬ì´ì¦'] = '13px'; 13274//ì°ê²°ë§í¬ #none ì ê±°í ì°ê²° url ì½ì 13275MPL['set-topBanner'][1]['ë§í¬'] = '#none'; 13276//ìì°½ì´ê¸° ìì°½ì¼ë¡ ì°ê²°ì on 13277MPL['set-topBanner'][1]['ìì°½ì´ê¸°'] = 'off'; 13278//ë ¸ì¶ í ì¤í¸ ì ë ¥ 13279MPL['set-topBanner'][1]['ë ¸ì¶í ì¤í¸'] = 'ë¤ìí 기ë¥ì ì´ì©íì¬ ì¬ì´í¸ë¥¼ 꾸며보ì¸ì.'; 13280 13281 13282MPL['set-topBanner'][2] = []; 13283//ì¸ë²ì§¸ ë°°ë ì¬ì©ì¤ì on, off 13284MPL['set-topBanner'][2]['use'] = 'on'; 13285//ë°°ê²½ìì ì½ë #í¬í¨í ììì½ë 13286MPL['set-topBanner'][2]['ë°°ê²½ìì'] = '#54a0de'; 13287//í°í¸ì»¬ë¬ #í¬í¨í ììì½ë 13288MPL['set-topBanner'][2]['í°í¸ì»¬ë¬'] = '#ffffff'; 13289//í°í¸ì¬ì´ì¦ ì«ìpx 13290MPL['set-topBanner'][2]['í°í¸ì¬ì´ì¦'] = '13px'; 13291//ì°ê²°ë§í¬ #none ì ê±°í ì°ê²° url ì½ì 13292MPL['set-topBanner'][2]['ë§í¬'] = '#none'; 13293//ìì°½ì´ê¸° ìì°½ì¼ë¡ ì°ê²°ì on 13294MPL['set-topBanner'][2]['ìì°½ì´ê¸°'] = 'on'; 13295//ë ¸ì¶ í ì¤í¸ ì ë ¥ 13296MPL['set-topBanner'][2]['ë ¸ì¶í ì¤í¸'] = '구매ì ì ê³µëë 매ë´ì¼ì ê¼ íì¸í´ë³´ì¸ì.'; 13297 13298 13299/*----------------------------------------- 13300 13301â ë©ì¸ ë ì´ìì ê´ë ¨ 13302ì¬ì©ì¤ì on, off ëë ë°°ë매ëì ìì í´ë¹ ìì 미ì¬ì© 13303------------------------------------------*/ 13304//ìë¨ ìì´ë ì¬ë¼ì´ë ìì ì¬ì©ì¤ì 13305MPL['use-mainSectionWideSlider'] = 'on'; 13306//ë©ì¸ ìë¨ 3ë¨ ë°°ë ì¬ì©ì¤ì or ë°°ë매ëì ìì í´ë¹ ìì 미ì¬ì© 13307MPL['use-banner_grid3_slider'] = 'on'; 13308//ë©ì¸ 3ë¨ ë°°ë2 ìì ì¬ì©ì¤ì 13309MPL['use-banner_grid3_slider2'] = 'on'; 13310//ë©ì¸ íì¤ë°°ë ì¬ì©ì¤ì 13311MPL['use-banner_grid1_full'] = 'on'; 13312//ë©ì¸ íì¤ë°°ë2 ì¬ì©ì¤ì 13313MPL['use-banner_grid1_middle'] = 'on'; 13314//ë©ì¸ íë¨ ë¦¬ë·°ë ¸ì¶ ì¬ì©ì¤ì 13315MPL['use-mainReviewContainer'] = 'on'; 13316//ë©ì¸ 컨í ì¸ ëª¨ë°ì¼ íì´í ì ë ¬ center, left 13317MPL['set-mTitAlign'] = 'left'; 13318 13319 13320/*----------------------------------------- 13321 13322â ë©ì¸ ìí ì§ì´ íìí ì§ì´ 13323 13324- í ìíì 5ê°ê¹ì§ ì¬ì©ê°ë¥ í©ëë¤. ( ë©ì¸ ì§ì´ ì´ì© 기본ì¸í ) 13325- í ì ëª©ì´ ìì ê²½ì° í´ë¹ íì´ ë ¸ì¶ë©ëë¤. ì) í 3ê°ë§ ì¬ì©ì tab-name4,tab-name5 ì ì 목ì 공백ì¼ë¡ '' ì¤ì 13326- ë©ì¸ íì§ì´ì ì§ì´ë ìíì´ ìì ê²½ì° íì ë ¸ì¶ëì§ ììµëë¤. 13327- use ì¬ì© ì¤ì on, off 13328- txt-btit í ì§ì´ í° ì 목 13329- txt-stit í ì§ì´ ìì ì 목 13330- class-prdList í ìí íì¤ ë ¸ì¶ ê°¯ì grid2 ,grid3 ,grid4 13331- contain ìí ìì 컨í´ì¸ ëì´ basic 기본, small ìì ì¬ì´ì¦ 13332...... 13333 13334------------------------------------------*/ 13335MPL['mainTabPrd'] = []; 13336MPL['mainTabPrd']['use'] = 'on'; 13337MPL['mainTabPrd']['txt-btit'] = 'ë³´ì±ëª° ì ìí'; 13338MPL['mainTabPrd']['txt-stit'] = 'ìë¡ê² ì ê³ ë ì ìíì ë§ëë³´ì¸ì'; 13339MPL['mainTabPrd']['tab-name1'] = 'ì ìí'; 13340MPL['mainTabPrd']['tab-name2'] = ''; 13341MPL['mainTabPrd']['tab-name3'] = ''; 13342MPL['mainTabPrd']['tab-name4'] = ''; 13343MPL['mainTabPrd']['tab-name5'] = ''; 13344MPL['mainTabPrd']['class-prdList'] = 'grid5'; 13345MPL['mainTabPrd']['contain'] = 'basic'; 13346 13347 13348/*----------------------------------------- 13349 13350â ë©ì¸ ìí ì§ì´ 13351use-mainPrd : ì¬ì©ì¤ì on, off 13352txt-prd_btit : í° í ì¤í¸ 13353txt-prd_stit : ìì í ì¤í¸ 13354 13355class-typePrd : gallery, slider, scroll, scrollLR 13356contain : basic, small // 컨í ì¸ ëì´ 13357 13358ì«ì [0] ~ ë¶í° ë©ì¸ ìí ì§ì´ ìì°¨ì ì¸ ìì ì ëë¤. 13359 13360------------------------------------------*/ 13361 13362//ë©ì¸ ìíì§ì´ ë보기 íìì¬ë¶ ( gallery íì ììë§ ë ¸ì¶ ë©ëë¤ ) 13363MPL['set-mainPrd-moreUse'] = 'on'; 13364 13365//첫ë²ì§¸ ìí ì§ì´ìì 13366MPL['mainPrd'][0] = []; 13367MPL['mainPrd'][0]['use'] = 'on'; 13368MPL['mainPrd'][0]['type'] = 'gallery'; 13369MPL['mainPrd'][0]['txt-btit'] = 'ì¸ê¸°ìí'; 13370MPL['mainPrd'][0]['txt-stit'] = 'ì¸ê¸°ìíì íì¸í´ë³´ì¸ì'; 13371MPL['mainPrd'][0]['class-prdList'] = 'grid5'; 13372MPL['mainPrd'][0]['contain'] = 'basic'; 13373MPL['mainPrd'][0]['bgUse'] = 'off'; 13374MPL['mainPrd'][0]['bgColor'] = '#F7F7F7'; 13375 13376//ëë²ì§¸ ìí ì§ì´ìì 13377MPL['mainPrd'][1] = []; 13378MPL['mainPrd'][1]['use'] = 'on'; 13379MPL['mainPrd'][1]['type'] = 'gallery'; 13380MPL['mainPrd'][1]['txt-btit'] = 'MD PICK'; 13381MPL['mainPrd'][1]['txt-stit'] = 'MDì¶ì²ìíì íì¸í´ë³´ì¸ì'; 13382MPL['mainPrd'][1]['class-prdList'] = 'grid5'; 13383MPL['mainPrd'][1]['contain'] = 'basic'; 13384MPL['mainPrd'][1]['bgUse'] = 'off'; 13385MPL['mainPrd'][1]['bgColor'] = '#F7F7F7'; 13386 13387//ì¸ë²ì§¸ ìí ì§ì´ìì 13388MPL['mainPrd'][2] = []; 13389MPL['mainPrd'][2]['use'] = 'off'; 13390MPL['mainPrd'][2]['type'] = 'gallery'; 13391MPL['mainPrd'][2]['txt-btit'] = 'ì¶ê°ìí ì§ì´'; 13392MPL['mainPrd'][2]['txt-stit'] = 'íì´íì ìì í´ì ì¬ì©íì기 ë°ëëë¤.'; 13393MPL['mainPrd'][2]['class-prdList'] = 'grid5'; 13394MPL['mainPrd'][2]['contain'] = 'basic'; 13395MPL['mainPrd'][2]['bgUse'] = 'off'; 13396MPL['mainPrd'][2]['bgColor'] = '#F7F7F7'; 13397 13398 13399/*----------------------------------------- 13400 13401â ìí ì¹´í ê³ ë¦¬ ì§ì´ 13402- use ì¬ì© ì¤ì on, off 13403- txt-btit ì§ì´ í° ì 목 13404- txt-stit ì§ì´ ìì ì 목 13405- class-prdList ìí íì¤ ë ¸ì¶ ê°¯ì grid2 ,grid3 ,grid4 13406------------------------------------------*/ 13407//ì¶ì²ìí ìì 13408MPL['recommendPrd'] = []; 13409MPL['recommendPrd']['use'] = 'off'; 13410//type : gallery, slider, scroll 13411MPL['recommendPrd']['type'] = 'slider'; 13412MPL['recommendPrd']['txt-btit'] = ''; 13413MPL['recommendPrd']['txt-stit'] = ''; 13414MPL['recommendPrd']['class-prdList'] = 'grid5'; 13415 13416//ì ìí 13417MPL['newPrd'] = []; 13418MPL['newPrd']['use'] = 'off'; 13419//type : gallery, slider, scroll 13420MPL['newPrd']['type'] = 'scroll'; 13421MPL['newPrd']['txt-btit'] = 'New Item'; 13422MPL['newPrd']['txt-stit'] = ''; 13423MPL['newPrd']['class-prdList'] = 'grid5'; 13424 13425//ì¼ë°ìí리ì¤í¸ 13426MPL['normalPrd'] = []; 13427MPL['normalPrd']['class-prdList'] = 'grid5'; 13428 13429 13430 13431/*----------------------------------------- 13432 13433â ìí ìì¸ 13434 13435------------------------------------------*/ 13436//ìì¸ ì°ì¸¡ ìì ê³ ì ì¬ì©ì¤ì basic, flexd 13437MPL['class-detailArea'] = 'basic'; 13438//ìì¸ íë¨ ì»¨í ì¸ ëì´ basic 모ëì¼ë ì¬ì© wm, ws 13439//MPL['class-girdContent'] = 'ws'; 13440//ìì¸ì ë³´ í ì¬ì©ì¤ì basic, click 13441MPL['class-xans-product-additional'] = 'basic'; 13442//ìì¸ì ë³´ í ê³ ì ì¬ì© on, off 13443MPL['class-tabProduct_box'] = 'on'; 13444//ìì¸ì ë³´ í ìì¹ì¬ì© left, top 13445MPL['class-tabProduct'] = 'top'; 13446//ìíìì¸ êµíë° ë°í ì ë³´ ì´ê³ ë«ê¸° ì¬ì© on, off 13447MPL['class-detail_guide'] = 'on'; 13448//ì¹´ì¹´ì¤í¡, ë¤ì´ë², íì´ì¤ë¶, í¸ìí° ëª¨ë off ìíì¼ëë ê³µì ë²í¼ ìë ë¯¸ë ¸ì¶ë©ëë¤. 13449//snsê³µì í기 ì¬ì© ( ì¹´ì¹´ì¤ api í¤ ) 13450MPL['use-sns-share-kakao-key'] = ''; 13451//sns ì¹´ì¹´ì¤í¡ ê³µì ì¬ì©ì¤ì on, off 13452MPL['use-sns-share-kakao'] = 'off'; 13453//sns ë¤ì´ë² ê³µì ì¬ì©ì¤ì on, off 13454MPL['use-sns-share-naver'] = 'on'; 13455//sns íì´ì¤ë¶ ê³µì ì¬ì©ì¤ì on, off 13456MPL['use-sns-share-face'] = 'on'; 13457//sns í¸ìí° ê³µì ì¬ì©ì¤ì on, off 13458MPL['use-sns-share-twitter'] = 'on'; 13459/* 13460 * Copyright 2016 Small Batch, Inc. 13461 * 13462 * Licensed under the Apache License, Version 2.0 (the "License");
vendor: 10,137 bytes, lines 13462-13487
13462 you may not 13463 * use this file except in compliance with the License. You may obtain a copy of 13464 * the License at 13465 * 13466 * http://www.apache.org/licenses/LICENSE-2.0 13467 * 13468 * Unless required by applicable law or agreed to in writing, software 13469 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13470 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13471 * License for the specific language governing permissions and limitations under 13472 * the License. 13473 */ 13474/* Web Font Loader v1.6.26 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function p(a,b,c){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.m=b||a;this.c=this.m.document}var da=!!window.FontFace;function t(a,b,c,d){b=a.c.createElement(b);if(c)for(var e in c)c.hasOwnProperty(e)&&("style"==e?b.style.cssText=c[e]:b.setAttribute(e,c[e]));d&&b.appendChild(a.c.createTextNode(d));return b}function u(a,b,c){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)} 13475function w(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function y(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1} 13476function z(a){if("string"===typeof a.f)return a.f;var b=a.m.location.protocol;"about:"==b&&(b=a.a.location.protocol);return"https:"==b?"https:":"http:"}function ea(a){return a.m.location.hostname||a.a.location.hostname} 13477function A(a,b,c){function d(){k&&e&&f&&(k(g),k=null)}b=t(a,"link",{rel:"stylesheet",href:b,media:"all"});var e=!1,f=!0,g=null,k=c||null;da?(b.onload=function(){e=!0;d()},b.onerror=function(){e=!0;g=Error("Stylesheet failed to load");d()}):setTimeout(function(){e=!0;d()},0);u(a,"head",b)} 13478function B(a,b,c,d){var e=a.c.getElementsByTagName("head")[0];if(e){var f=t(a,"script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,c&&c(Error("Script load timeout")))},d||5E3);return f}return null};function C(){this.a=0;this.c=null}function D(a){a.a++;return function(){a.a--;E(a)}}function F(a,b){a.c=b;E(a)}function E(a){0==a.a&&a.c&&(a.c(),a.c=null)};function G(a){this.a=a||"-"}G.prototype.c=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.a)};function H(a,b){this.c=a;this.f=4;this.a="n";var c=(b||"n4").match(/^([nio])([1-9])$/i);c&&(this.a=c[1],this.f=parseInt(c[2],10))}function fa(a){return I(a)+" "+(a.f+"00")+" 300px "+J(a.c)}function J(a){var b=[];a=a.split(/,\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['"]/g,"");-1!=d.indexOf(" ")||/^\d/.test(d)?b.push("'"+d+"'"):b.push(d)}return b.join(",")}function K(a){return a.a+a.f}function I(a){var b="normal";"o"===a.a?b="oblique":"i"===a.a&&(b="italic");return b} 13479function ga(a){var b=4,c="n",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function ha(a,b){this.c=a;this.f=a.m.document.documentElement;this.h=b;this.a=new G("-");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c("wf","loading")]);L(a,"loading")}function M(a){if(a.g){var b=y(a.f,a.a.c("wf","active")),c=[],d=[a.a.c("wf","loading")];b||c.push(a.a.c("wf","inactive"));w(a.f,c,d)}L(a,"inactive")}function L(a,b,c){if(a.j&&a.h[b])if(c)a.h[b](c.c,K(c));else a.h[b]()};function ja(){this.c={}}function ka(a,b,c){var d=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&d.push(f(b[e],c))}return d};function N(a,b){this.c=a;this.f=b;this.a=t(this.c,"span",{"aria-hidden":"true"},this.f)}function O(a){u(a.c,"body",a.a)}function P(a){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+J(a.c)+";"+("font-style:"+I(a)+";font-weight:"+(a.f+"00")+";")};function Q(a,b,c,d,e,f){this.g=a;this.j=b;this.a=d;this.c=c;this.f=e||3E3;this.h=f||void 0}Q.prototype.start=function(){var a=this.c.m.document,b=this,c=q(),d=new Promise(function(d,e){function k(){q()-c>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,d){setTimeout(d,b.f)});Promise.race([e,d]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a= 13480P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)}; 13481function ma(a,b,c){for(var d in S)if(S.hasOwnProperty(d)&&b===a.f[S[d]]&&c===a.f[S[d]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f["sans-serif"])||(d=U()&&ma(a,b,c));d?q()-a.A>=a.w?U()&&ma(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)}; 13482W.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),d=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];c||d.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,d,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)}; 13483function ra(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=d||null||{};if(0===c.length&&f)M(b.a);else{b.f+=c.length;f&&(b.j=f);var h,m=[];for(h=0;h<c.length;h++){var l=c[h],n=k[l.c],r=b.a,x=l;r.g&&w(r.f,[r.a.c("wf",x.c,K(x).toString(),"loading")]);L(r,"fontloading",x);r=null;null===X&&(X=window.FontFace?(x=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent))?42<parseInt(x[1],10):!0:!1);X?r=new Q(p(b.g,b),p(b.h,b),b.c,l,b.s,n):r=new R(p(b.g,b),p(b.h,b),b.c,l,b.s,a, 13484n);m.push(r)}for(h=0;h<m.length;h++)m[h].start()}},0)}function qa(a,b,c){var d=[],e=c.timeout;ia(b);var d=ka(a.a,c,a.c),f=new W(a.c,b,e);a.h=d.length;b=0;for(c=d.length;b<c;b++)d[b].load(function(b,d,c){ra(a,f,b,d,c)})};function sa(a,b){this.c=a;this.a=b}function ta(a,b,c){var d=z(a.c);a=(a.a.api||"fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/,"");return d+"//"+a+"/"+b+".js"+(c?"?v="+c:"")} 13485sa.prototype.load=function(a){function b(){if(f["__mti_fntLst"+d]){var c=f["__mti_fntLst"+d](),e=[],h;if(c)for(var m=0;m<c.length;m++){var l=c[m].fontfamily;void 0!=c[m].fontStyle&&void 0!=c[m].fontWeight?(h=c[m].fontStyle+c[m].fontWeight,e.push(new H(l,h))):e.push(new H(l))}a(e)}else setTimeout(function(){b()},50)}var c=this,d=c.a.projectId,e=c.a.version;if(d){var f=c.c.m;B(this.c,ta(c,d,e),function(e){e?a([]):(f["__MonotypeConfiguration__"+d]=function(){return c.a},b())}).id="__MonotypeAPIScript__"+ 13486d}else a([])};function ua(a,b){this.c=a;this.a=b}ua.prototype.load=function(a){var b,c,d=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new C;b=0;for(c=d.length;b<c;b++)A(this.c,d[b],D(g));var k=[];b=0;for(c=e.length;b<c;b++)if(d=e[b].split(":"),d[1])for(var h=d[1].split(","),m=0;m<h.length;m+=1)k.push(new H(d[0],h[m]));else k.push(new H(d[0]));F(g,function(){a(k,f)})};function va(a,b,c){a?this.c=a:this.c=b+wa;this.a=[];this.f=[];this.g=c||""}var wa="//fonts.googleapis.com/css";function xa(a,b){for(var c=b.length,d=0;d<c;d++){var e=b[d].split(":");3==e.length&&a.f.push(e.pop());var f="";2==e.length&&""!=e[1]&&(f=":");a.a.push(e.join(f))}} 13487function ya(a){if(0==a.a.length)throw Error("No fonts to load!");if(-1!=a.c.indexOf("kit="))return a.c;for(var b=a.a.length,c=[],d=0;d<b;d++)c.push(a.a[d].replace(/ /g,"+"));b=a.c+"?family="+c.join("%7C");0<a.f.length&&(b+="&subset="+a.f.join(","));0<a.g.length&&(b+="&text="+encodeURIComponent(a.g));return b};function za(a){this.f=a;this.a=[];this.c={}}
13488var Aa={latin:"BESbswy","latin-ext":"\u00e7\u00f6\u00fc\u011f\u015f",cyrillic:"\u0439\u044f\u0416",greek:"\u03b1\u03b2\u03a3",khmer:"\u1780\u1781\u1782",Hanuman:"\u1780\u1781\u1782"},Ba={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ca={i:"i",italic:"i",n:"n",normal:"n"}, 13489Da=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/; 13490function Ea(a){for(var b=a.f.length,c=0;c<b;c++){var d=a.f[c].split(":"),e=d[0].replace(/\+/g," "),f=["n4"];if(2<=d.length){var g;var k=d[1];g=[];if(k)for(var k=k.split(","),h=k.length,m=0;m<h;m++){var l;l=k[m];if(l.match(/^[\w-]+$/)){var n=Da.exec(l.toLowerCase());if(null==n)l="";else{l=n[2];l=null==l||""==l?"n":Ca[l];n=n[1];if(null==n||""==n)n="4";else var r=Ba[n],n=r?r:isNaN(n)?"4":n.substr(0,1);l=[l,n].join("")}}else l="";l&&g.push(l)}0<g.length&&(f=g);3==d.length&&(d=d[2],g=[],d=d?d.split(","): 13491g,0<d.length&&(d=Aa[d[0]])&&(a.c[e]=d))}a.c[e]||(d=Aa[e])&&(a.c[e]=d);for(d=0;d<f.length;d+=1)a.a.push(new H(e,f[d]))}};function Fa(a,b){this.c=a;this.a=b}var Ga={Arimo:!0,Cousine:!0,Tinos:!0};Fa.prototype.load=function(a){var b=new C,c=this.c,d=new va(this.a.api,z(c),this.a.text),e=this.a.families;xa(d,e);var f=new za(e);Ea(f);A(c,ya(d),D(b));F(b,function(){a(f.a,f.c,Ga)})};function Ha(a,b){this.c=a;this.a=b}Ha.prototype.load=function(a){var b=this.a.id,c=this.c.m;b?B(this.c,(this.a.api||"https://use.typekit.net")+"/"+b+".js",function(b){if(b)a([]);else if(c.Typekit&&c.Typekit.config&&c.Typekit.config.fn){b=c.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],k=b[f+1],h=0;h<k.length;h++)e.push(new H(g,k[h]));try{c.Typekit.load({events:!1,classes:!1,async:!0})}catch(m){}a(e)}},2E3):a([])};function Ia(a,b){this.c=a;this.f=b;this.a=[]}Ia.prototype.load=function(a){var b=this.f.id,c=this.c.m,d=this;b?(c.__webfontfontdeckmodule__||(c.__webfontfontdeckmodule__={}),c.__webfontfontdeckmodule__[b]=function(b,c){for(var g=0,k=c.fonts.length;g<k;++g){var h=c.fonts[g];d.a.push(new H(h.name,ga("font-weight:"+h.weight+";font-style:"+h.style)))}a(d.a)},B(this.c,z(this.c)+(this.f.api||"//f.fontdeck.com/s/css/js/")+ea(this.c)+"/"+b+".js",function(b){b&&a([])})):a([])};var Y=new pa(window);Y.a.c.custom=function(a,b){return new ua(b,a)};Y.a.c.fontdeck=function(a,b){return new Ia(b,a)};Y.a.c.monotype=function(a,b){return new sa(b,a)};Y.a.c.typekit=function(a,b){return new Ha(b,a)};Y.a.c.google=function(a,b){return new Fa(b,a)};var Z={load:p(Y.load,Y)};"function"===typeof define&&define.amd?define(function(){return Z}):"undefined"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}()); 13492 13493WebFont.load({ google: { families: ['Material Icons']} }); 13494$(document).ready(function(){ 13495 if(MPL['use-topBanner'] == 'on' && $(".topBanner").length > 0){ 13496 var _0x4c4796=_0x35ae;function _0x43aa(){var _0x1ebac7=['ë°°ê²½ìì','</a></div>','<div\x20class=\x22bannerItem\x20swiper-slide\x22\x20style=\x22background-color:','ìì°½ì´ê¸°','set-topBanner','0px','setProperty','2582455jUJsKR',';\x20\x22\x20\x20','each','5849npzfzw',';\x20font-size:','documentElement','append','style','target=\x27_blank\x27','6244VSvOhY','130iEwdjS',':visible','8qPRoxR','9491448kgvKAI','512083AJmFkM','outerHeight','--t-b-h','15412014xqsNuP','10424071jnPxaA','6VPIuIK','í°í¸ì»¬ë¬','\x22><a\x20href=\x22','52LJPqjG','2811MTEZhN','css','172GzyGvr','.topBanner','find'];_0x43aa=function(){return _0x1ebac7;};return _0x43aa();}(function(_0x50d422,_0x2dfa83){var _0x260148=_0x35ae,_0x107585=_0x50d422();while(!![]){try{var _0x23e49f=-parseInt(_0x260148(0x1b6))/0x1*(parseInt(_0x260148(0x1cc))/0x2)+-parseInt(_0x260148(0x1ca))/0x3*(parseInt(_0x260148(0x1bc))/0x4)+parseInt(_0x260148(0x1b3))/0x5*(parseInt(_0x260148(0x1c6))/0x6)+-parseInt(_0x260148(0x1c5))/0x7*(-parseInt(_0x260148(0x1bf))/0x8)+-parseInt(_0x260148(0x1c4))/0x9+-parseInt(_0x260148(0x1bd))/0xa*(parseInt(_0x260148(0x1c1))/0xb)+-parseInt(_0x260148(0x1c0))/0xc*(-parseInt(_0x260148(0x1c9))/0xd);if(_0x23e49f===_0x2dfa83)break;
13496else _0x107585['push'](_0x107585['shift']());}catch(_0x1d28a1){_0x107585['push'](_0x107585['shift']());}}}(_0x43aa,0xd858a),$[_0x4c4796(0x1b5)](MPL[_0x4c4796(0x1b0)],function(_0x18fb68,_0x1282a4){var _0x3e958d=_0x4c4796;if(_0x1282a4['use']=='on'){var _0x19b3f7='';_0x1282a4[_0x3e958d(0x1af)]=='on'&&(_0x19b3f7=_0x3e958d(0x1bb)),$('.topBannerContainer')[_0x3e958d(0x1b9)](_0x3e958d(0x1ae)+_0x1282a4[_0x3e958d(0x1cf)]+_0x3e958d(0x1c8)+_0x1282a4['ë§í¬']+'\x22\x20style=\x22color:'+_0x1282a4[_0x3e958d(0x1c7)]+_0x3e958d(0x1b7)+_0x1282a4['í°í¸ì¬ì´ì¦']+_0x3e958d(0x1b4)+_0x19b3f7+'>'+_0x1282a4['ë ¸ì¶í ì¤í¸']+_0x3e958d(0x1d0)),$(_0x3e958d(0x1cd))[_0x3e958d(0x1ce)]('.closeBtn')[_0x3e958d(0x1cb)]({'color':_0x1282a4[_0x3e958d(0x1c7)]});}}));function _0x35ae(_0x6cda0f,_0x4f6ec7){var _0x43aa16=_0x43aa();return _0x35ae=function(_0x35ae0b,_0xff2cbf){_0x35ae0b=_0x35ae0b-0x1ae;var _0x6858af=_0x43aa16[_0x35ae0b];return _0x6858af;},_0x35ae(_0x6cda0f,_0x4f6ec7);}var tbanner=new Swiper(_0x4c4796(0x1cd),{'direction':'vertical','updateOnWindowResize':!![],'speed':0x258,'autoplay':{'delay':0x1388,'disableOnInteraction':![]},'loop':!![],'grabCursor':!![],'roundLengths':!![]});topBanner($(_0x4c4796(0x1cd)));const root=document[_0x4c4796(0x1b8)];if($(_0x4c4796(0x1cd))['is'](_0x4c4796(0x1be))==![])root['style'][_0x4c4796(0x1b2)](_0x4c4796(0x1c3),_0x4c4796(0x1b1));else{var tbh=$(_0x4c4796(0x1cd))[_0x4c4796(0x1c2)]()+'px';root[_0x4c4796(0x1ba)][_0x4c4796(0x1b2)](_0x4c4796(0x1c3),tbh);} 13497 } 13498 if($(".topBanner").is(":visible") == false || MPL['use-topBanner'] == 'off'){ 13499 const root = document.documentElement; 13500 root.style.setProperty('--t-b-h', '0px'); 13501 } 13502}); 13503 13504// topbanner action 13505function topBanner(target) { 13506 var $this = target, 13507 closeBtn = $this.find('.closeBtn'); 13508 13509 closeBtn.on("click",function(){ 13510 $this.slideUp(); 13511 }); 13512} 13513/** 13514 * ì¹´í ê³ ë¦¬ ë§ì°ì¤ ì¤ë² ì´ë¯¸ì§ 13515 * ì¹´í ê³ ë¦¬ ë,ì¤,ì,íìë¶ë¥ê¹ì§ ì¶ë ¥ - ì¸ë¡í 13516 * 210827 ìì í ìì 13517 */ 13518$(function() { 13519 $(document).ready(function(){ 13520 13521 var methods = { 13522 aCategory : [], 13523 aSubCategory : {}, 13524 13525 get: function() 13526 { 13527 $.ajax({ 13528 url : '/exec/front/Product/SubCategory', 13529 dataType: 'json', 13530 success: function(aData) { 13531 13532 if (aData == null || aData == 'undefined') return; 13533 for (var i=0; i<aData.length; i++) 13534 { 13535 var sParentCateNo = aData[i].parent_cate_no; 13536 13537 if (!methods.aSubCategory[sParentCateNo]) { 13538 methods.aSubCategory[sParentCateNo] = []; 13539 } 13540 methods.aSubCategory[sParentCateNo].push( aData[i] ); 13541 } 13542 13543 var locationPathname = document.location.pathname, 13544 locationSearch = document.location.search, 13545 PageUrl = locationPathname + locationSearch, 13546 PageUrl = PageUrl.replace("?&","?"); 13547 13548 var NowCateVal = $('.path').find('li').eq(1).children('a').attr('href'); 13549 if(NowCateVal){ 13550 var NowCateNo = EC_ROUTE.getCleanUrl(NowCateVal).split('/')[3]; 13551 } 13552 var NowBoardVal = getQueryString('board_no'); 13553 if(!NowBoardVal){ 13554 var NowBoardVal = Number(methods.getParamSeo(locationPathname)); 13555 } 13556 if(!NowCateNo && !NowBoardVal){ 13557 var NowPageVal = $('.path').find('li').last().text(); 13558 } 13559 var currentCateChk = footerCompany = false; 13560 var $subAddTab = $("#subAddTab"); 13561 13562 if($('#header .gnbMenuBox .menuCategory > li').length > 0 ){ 13563 function _0x3406(_0x3d4cf0,_0x366ec0){var _0x4b5846=_0x4b58();return _0x3406=function(_0x34067d,_0x5c6fd0){_0x34067d=_0x34067d-0xe5;var _0x53de78=_0x4b5846[_0x34067d];return _0x53de78;},_0x3406(_0x3d4cf0,_0x366ec0);}function _0x4b58(){var _0x4a1ff2=['board','101727bRGgbF','select','getParam','483uwTEyh','38860RMRENk','a[href*=\x27','length','each','924449UlWpIB','find','html','/shopinfo/company.html','addClass','subAddTab','.subCategory','978747KQsXkD','.mplAddTab','4847117WiBEat','text','append','300fCNckX','hide','show','clone','currentCategory','#subAddTab','</div></div>','hvr-overline-reveal','2KmvfVX','getParamSeo','cate_no','#header\x20.gnbMenuBox\x20.menuCategory\x20\x20>\x20li','2047818GiQHVc','36bQrCTe','<div\x20class=\x27categoryBanner\x27>','.footerLink','href','hasClass','attr','10QkcCKI','parent','div:contains(\x27_','swiper-slide','data','board_no','_\x27)','.subAddTab','children','class','>\x20div','94416tbIiZz'];_0x4b58=function(){return _0x4a1ff2;};return _0x4b58();}var _0x3d9cf7=_0x3406;(function(_0x148102,_0x4b847a){var _0x186b98=_0x3406,_0xb78534=_0x148102();while(!![]){try{var _0x42c3d2=-parseInt(_0x186b98(0x118))/0x1*(-parseInt(_0x186b98(0xf8))/0x2)+parseInt(_0x186b98(0xeb))/0x3+parseInt(_0x186b98(0x114))/0x4+-parseInt(_0x186b98(0x103))/0x5*(parseInt(_0x186b98(0xfc))/0x6)+parseInt(_0x186b98(0x113))/0x7*(-parseInt(_0x186b98(0x10e))/0x8)+parseInt(_0x186b98(0x110))/0x9*(-parseInt(_0x186b98(0xf0))/0xa)+-parseInt(_0x186b98(0xed))/0xb*(-parseInt(_0x186b98(0xfd))/0xc);if(_0x42c3d2===_0x4b847a)break;
13563else _0xb78534['push'](_0xb78534['shift']());}catch(_0x1797c9){_0xb78534['push'](_0xb78534['shift']());}}}(_0x4b58,0xb6350),$(_0x3d9cf7(0xfb))[_0x3d9cf7(0x117)](function(_0x2e4bc7){var _0x236021=_0x3d9cf7,_0x4a1fae=$(this);if(_0x4a1fae[_0x236021(0x101)]('originCategory')===!![]){var _0xc1c22e=Number(methods['getParam'](_0x4a1fae[_0x236021(0xe5)]('a')[_0x236021(0x102)](_0x236021(0x100)),_0x236021(0xfa)));!_0xc1c22e&&(_0xc1c22e=Number(methods[_0x236021(0xf9)](_0x4a1fae[_0x236021(0xe5)]('a')[_0x236021(0x102)]('href'))));if(!_0xc1c22e)return;_0xc1c22e==NowCateNo&¤tCateChk==![]&&(_0x4a1fae[_0x236021(0xe8)](_0x236021(0xf4)),currentCateChk=!![]),methods[_0x236021(0xf2)](_0x4a1fae,_0xc1c22e);}else currentCateChk==![]&&_0x4a1fae[_0x236021(0xe5)]('a')['each'](function(){var _0x112a91=_0x236021,_0x1abf52=Number(methods[_0x112a91(0x112)]($(this)[_0x112a91(0x102)]('href'),_0x112a91(0x108)));!_0x1abf52&&(_0x1abf52=Number(methods[_0x112a91(0xf9)]($(this)[_0x112a91(0x102)](_0x112a91(0x100))))),_0x1abf52!=0x0&&_0x1abf52==NowBoardVal&&(_0x4a1fae[_0x112a91(0xe8)](_0x112a91(0xf4))['attr']('data-board',NowBoardVal),$(this)[_0x112a91(0x104)]('li')[_0x112a91(0xe8)](_0x112a91(0x111))),_0x1abf52==0x0&&$(this)[_0x112a91(0xee)]()==NowPageVal&&_0x4a1fae[_0x112a91(0xe8)](_0x112a91(0xf4));});var _0x5a26ed=$('.categoryBannerArea'),_0x435cb5=_0x4a1fae['children'](_0x236021(0xea)),_0x4b0a6b=_0x435cb5[_0x236021(0x116)]>0x0?!![]:![],_0x97fd40=_0x4a1fae[_0x236021(0x10b)]('a')[_0x236021(0xee)](),_0x26de53=new Array(),_0xc7622=![];if(MPL['use-mplAddSubTab']=='on'&&_0x4a1fae[_0x236021(0x101)]('originCategory')==![]){var _0x23d8a0=_0x4a1fae[_0x236021(0x107)](_0x236021(0x10f)),_0x420cfa=_0x4a1fae['children']('a[href*=\x27'+PageUrl+'\x27]'),_0x3b20d8;_0x420cfa['length']>0x0&&PageUrl!='/'?_0x4b0a6b==!![]&&($subAddTab['addClass'](_0x236021(0xe9)+_0x2e4bc7),_0xc7622=!![]):(_0x3b20d8=_0x4a1fae[_0x236021(0xe5)]('ul')['find'](_0x236021(0x115)+PageUrl+'\x27]'),_0x3b20d8[_0x236021(0x116)]>0x0&&PageUrl!='/'&&(_0x4b0a6b==!![]&&($subAddTab[_0x236021(0xe8)](_0x236021(0xe9)+_0x2e4bc7),_0xc7622=!![]))),_0x435cb5['children']('ul')['children']('li')['children'](_0x236021(0x115)+PageUrl+'\x27]')[_0x236021(0x116)]>0x0&&PageUrl!='/'&&($subAddTab[_0x236021(0x116)]>
135630x0&&_0x4b0a6b==!![]&&(_0x26de53[_0x2e4bc7]=_0x4a1fae[_0x236021(0x10b)]('.subCategory')[_0x236021(0x10b)]('ul')[_0x236021(0x10b)]('li')[_0x236021(0xe8)](_0x236021(0x106))[_0x236021(0xf3)](),$thisAnchorCloneSelect=_0x26de53[_0x2e4bc7][_0x236021(0x10b)](_0x236021(0x115)+PageUrl+'\x27]'),$thisAnchorCloneSelect[_0x236021(0x116)]>0x0&&PageUrl!='/'&&$thisAnchorCloneSelect[_0x236021(0x104)]('li')[_0x236021(0xe8)](_0x236021(0x111)),$subAddTab[_0x236021(0x101)]('subAddTab'+_0x2e4bc7)&&($(_0x236021(0x10a)+_0x2e4bc7)['children']('ul')[_0x236021(0xef)](_0x26de53[_0x2e4bc7]),_0xc7622=!![]))),_0xc7622==![]&&(_0x4a1fae[_0x236021(0x107)](_0x236021(0x10f))==NowBoardVal&&(_0x4b0a6b==!![]&&($subAddTab[_0x236021(0xe8)]('subAddTab'+_0x2e4bc7),_0x26de53[_0x2e4bc7]=_0x4a1fae[_0x236021(0x10b)](_0x236021(0xea))['children']('ul')['children']('li')[_0x236021(0xe8)](_0x236021(0x106))[_0x236021(0xf3)](),$subAddTab[_0x236021(0x101)](_0x236021(0xe9)+_0x2e4bc7)&&($(_0x236021(0x10a)+_0x2e4bc7)[_0x236021(0x10b)]('ul')[_0x236021(0xef)](_0x26de53[_0x2e4bc7]),_0xc7622=!![])))),_0x4a1fae[_0x236021(0x10b)]('a')['attr'](_0x236021(0x100))==_0x236021(0xe7)&&(footerCompany=!![]);}if(_0x5a26ed[_0x236021(0xe5)](_0x236021(0x10d))[_0x236021(0x10b)]('div:contains(\x27_'+_0x97fd40+'_\x27)')['length']>0x0)var _0x2df7de=_0x5a26ed['find']('>\x20div')[_0x236021(0x10b)](_0x236021(0x105)+_0x97fd40+_0x236021(0x109))[_0x236021(0xe6)]();else var _0x2df7de='';_0x2df7de&&(_0x4b0a6b?_0x435cb5['append'](_0x236021(0xfe)+_0x2df7de+'</div>'):_0x4a1fae[_0x236021(0xef)]('<div\x20class=\x27subCategory\x20depth1\x27><div\x20class=\x27categoryBanner\x27>'+_0x2df7de+_0x236021(0xf6))),_0x4a1fae[_0x236021(0x102)](_0x236021(0x10c))!='tailCategory'&&_0x4a1fae['addClass'](_0x236021(0xf7));}));$(_0x3d9cf7(0xf5))['find']('li')[_0x3d9cf7(0x116)]<0x1&&$(_0x3d9cf7(0xec))['remove']();footerCompany==![]&&$(_0x3d9cf7(0xff))[_0x3d9cf7(0xe5)]('a[href=\x27/shopinfo/company.html\x27]')[_0x3d9cf7(0xf1)](); 13564 } 13565 //모ë°ì¼ ì¢ì¸¡ ì ì²´ ë©ë´ì ì¶ê° 13566 asideCategoryLoad(); 13567 //모ë°ì¼ ìë¨ ë©ë´ì ì¶ê° 13568 if(MPL['use-mplCategoryMobile'] == 'on'){ mCategoryLoad(); } 13569 //ì¹´í ê³ ë¦¬ ì¬ë¼ì´ë 구í 13570 $(".headerGnb .categorySlide .gnbMenuBox").categorySlide(); 13571 13572 } 13573 }); 13574 }, 13575 13576 getParam: function(sUrl, sKey) { 13577 13578 var aUrl = sUrl.split('?'); 13579 var sQueryString = aUrl[1]; 13580 var aParam = {}; 13581
13582 if (sQueryString) { 13583 var aFields = sQueryString.split("&"); 13584 var aField = []; 13585 for (var i=0; i<aFields.length; i++) { 13586 aField = aFields[i].split('='); 13587 aParam[aField[0]] = aField[1]; 13588 } 13589 } 13590 return sKey ? aParam[sKey] : aParam; 13591 }, 13592 13593 getParamSeo: function(sUrl) { 13594 var aUrl = EC_ROUTE.getCleanUrl(sUrl).split('/'); 13595 return aUrl[3] ? aUrl[3] : null; 13596 }, 13597 13598 show: function(overNode, iCateNo) { 13599 var oParentNode = overNode; 13600 var aHtml = ""; 13601 var sMyCateList = localStorage.getItem("myCateList"); 13602 13603 if (methods.aSubCategory[iCateNo] != undefined) { 13604 aHtml += '<div class="subCategory depth1"><ul>'; 13605 $(methods.aSubCategory[iCateNo]).each(function() { 13606 var sNextParentNo = this.cate_no; 13607 var sCateSelected = (checkInArray(sMyCateList, this.cate_no) == true) ? ' selected' : ''; 13608 if (methods.aSubCategory[sNextParentNo] == undefined) { 13609 aHtml += '<li id="cate'+this.cate_no+'">'; 13610 var sHref = '/product/list.html'+this.param; 13611 } else { 13612 aHtml += '<li class="hasChild" id="cate'+this.cate_no+'">'; 13613 var sHref = '#none'; 13614 } 13615 aHtml += '<a href="/product/list.html'+this.param+'" class="view" cate="'+this.param+'" data-i18n="LIST.PRD_CATE_NO_'+this.cate_no+'" onmouseover="subMenuon(this);" data-i18n-new>'+this.name+'</a>'; 13616 13617 if (methods.aSubCategory[sNextParentNo] != undefined) { 13618 aHtml += '<div class="subCategory depth2"><ul>'; 13619 $(methods.aSubCategory[sNextParentNo]).each(function() { 13620 var sNextParentNo2 = this.cate_no; 13621 var sCateSelected = (checkInArray(sMyCateList, this.cate_no) == true) ? ' selected' : ''; 13622 if (methods.aSubCategory[sNextParentNo2] == undefined) { 13623 aHtml += '<li id="cate'+this.cate_no+'">'; 13624 var sHref = '/product/list.html'+this.param; 13625 } else { 13626 aHtml += '<li class="hasChild" id="cate'+this.cate_no+'">'; 13627 var sHref = '#none'; 13628 } 13629 aHtml += '<a href="/product/list.html'+this.param+'" class="view" cate="'+this.param+'" data-i18n="LIST.PRD_CATE_NO_'+this.cate_no+'" onmouseover="subMenuon(this);" data-i18n-new>'+this.name+'</a>'; 13630 13631 if (methods.aSubCategory[sNextParentNo2] != undefined) { 13632 aHtml += '<div class="subCategory depth3"><ul>'; 13633 13634 $(methods.aSubCategory[sNextParentNo2]).each(function() { 13635 aHtml += '<li id="cate'+this.cate_no+'">'; 13636 var sCateSelected = (checkInArray(sMyCateList, this.cate_no) == true) ? ' selected' : ''; 13637 aHtml += '<a href="/product/list.html'+this.param+'" class="view" cate="'+this.param+'" onmouseover="subMenuon(this);" data-i18n="LIST.PRD_CATE_NO_'+this.cate_no+'" data-i18n-new>'+this.name+'</a>'; 13638 aHtml += '</li>'; 13639 }); 13640 aHtml += '</ul></div><button class="categoryMore"></button>'; 13641 } 13642 13643 aHtml += '</li>'; 13644 }); 13645 aHtml += '</ul></div><button class="categoryMore"></button>'; 13646 } 13647 aHtml += '</li>'; 13648 }); 13649 aHtml += '</ul></div><button class="categoryMore"></button>'; 13650 } 13651 13652 $(oParentNode).append(aHtml); 13653 13654 if (window.i18nextCafe24) { 13655 i18nextCafe24.translate('data-i18n-new'); 13656 } 13657 }, 13658 13659 close: function(e) { 13660 e.find('.subCategory').remove(); 13661 } 13662 }; 13663 13664 methods.get(); 13665 13666 /* ìë¸ ì¹´í ê³ ë¦¬ ë¤ë¹ ì¬ë¼ì´ë */ 13667 var _0x30afdb=_0x5a02;(function(_0x2b3847,_0x49f4c5){var _0x7b6c74=_0x5a02,_0x5459a7=_0x2b3847();while(!![]){try{var _0xa3dc12=parseInt(_0x7b6c74(0x206))/0x1+-parseInt(_0x7b6c74(0x200))/0x2+parseInt(_0x7b6c74(0x1f1))/0x3+-parseInt(_0x7b6c74(0x207))/0x4+parseInt(_0x7b6c74(0x1fa))/0x5+parseInt(_0x7b6c74(0x1f4))/0x6*(parseInt(_0x7b6c74(0x214))/0x7)+parseInt(_0x7b6c74(0x201))/0x8;if(_0xa3dc12===_0x49f4c5)break;else _0x5459a7['push'](_0x5459a7['shift']());}catch(_0x54a56c){_0x5459a7['push'](_0x5459a7['shift']());}}}(_0x2f2d,0x9a7e6));$(_0x30afdb(0x1f6))['children'](_0x30afdb(0x20d))['length']>0x0&&$(_0x30afdb(0x202))[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x20e)]('ul')[_0x30afdb(0x20e)]('li')[_0x30afdb(0x1f5)](_0x30afdb(0x217));$(_0x30afdb(0x1fe))[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0&&$(_0x30afdb(0x216))[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x1fc)]('ul')[_0x30afdb(0x1fc)]('li')[_0x30afdb(0x1f5)](_0x30afdb(0x217));$('.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth0')['children'](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0&&($('.subPrdMenuCategory\x20ul.depth0')[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x215)]('ul.depth1')[_0x30afdb(0x203)]()!=''&&$(_0x30afdb(0x211))['append'](_0x30afdb(0x204)+$(_0x30afdb(0x1fb))[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x215)](_0x30afdb(0x20b))[_0x30afdb(0x203)]()+_0x30afdb(0x213)));$('.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth1')[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0&&($('.subPrdMenuCategory\x20ul.depth1')[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x215)]('ul.depth2')['html']()!=''&&$(_0x30afdb(0x1fd))[_0x30afdb(0x209)](_0x30afdb(0x204)+$(_0x30afdb(0x202))[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x215)](_0x30afdb(0x210))['html']()+_0x30afdb(0x213)));if($(_0x30afdb(0x1ff))[_0x30afdb(0x1f7)]>0x0){var list_category=new Swiper(_0x30afdb(0x1f8),{'slidesPerView':'auto','spaceBetween':0x0}),eq=$(_0x30afdb(0x1f8))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x20e)]('.swiper-slide')[_0x30afdb(0x1f9)]();eq>
13667=0x0&&list_category[_0x30afdb(0x20a)](eq,0xc8,![]);}function _0x2f2d(){var _0x55101e=['.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth0','.mplTab','1658556hSDfoo','addClass','.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth1','length','.subPrdMenuCategory','index','3131520ibMMGy','.subPrdMenuCategory\x20ul.depth0','parents','.list_item_sub_category.depth2','.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth2','.subPrdMenuCategory:not(.SupplyListMenu)','1291988lkpFLO','3944904UybgeS','.subPrdMenuCategory\x20ul.depth1','html','<ul\x20class=\x27swiper-wrapper\x20justify\x27>','auto','97580roYrvp','1599520uIHNKd','.swiper-slide','append','slideTo','ul.depth1','.select','li.selected','parent','.mplAddSubTab','ul.depth2','.list_item_sub_category.depth1','find','</ul>','7boJRgo','children','.subPrdMenuCategory\x20ul.depth2','selected','555771pEfSJx'];_0x2f2d=function(){return _0x55101e;};return _0x2f2d();}if($(_0x30afdb(0x1f2))[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0){var list_category_sub1=new Swiper(_0x30afdb(0x211),{'slidesPerView':_0x30afdb(0x205),'spaceBetween':0x0}),eq=$(_0x30afdb(0x211))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x20e)](_0x30afdb(0x208))[_0x30afdb(0x1f9)]();eq>=0x0&&list_category_sub1['slideTo'](eq,0xc8,![]);}if($(_0x30afdb(0x1f6))['children'](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0){var list_category_sub2=new Swiper(_0x30afdb(0x1fd),{'slidesPerView':'auto','spaceBetween':0x0}),eq=$('.list_item_sub_category.depth2')[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x20e)](_0x30afdb(0x208))[_0x30afdb(0x1f9)]();eq>=0x0&&list_category_sub2[_0x30afdb(0x20a)](eq,0xc8,![]);}function _0x5a02(_0x1c4027,_0x8b904d){var _0x2f2d63=_0x2f2d();return _0x5a02=function(_0x5a0290,_0x28267c){_0x5a0290=_0x5a0290-0x1f1;var _0x2c16ee=_0x2f2d63[_0x5a0290];return _0x2c16ee;},_0x5a02(_0x1c4027,_0x8b904d);}if($(_0x30afdb(0x1f3))[_0x30afdb(0x1f7)]>0x0){var list_tab=new Swiper(_0x30afdb(0x1f3),{'slidesPerView':_0x30afdb(0x205),'spaceBetween':0x0}),eq=$(_0x30afdb(0x1f3))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x1f9)]();eq>=0x0&&list_tab[_0x30afdb(0x20a)](eq,0xc8,![]);}if($(_0x30afdb(0x20f))[_0x30afdb(0x1f7)]>0x0){var list_tab2=new Swiper('.mplAddSubTab',{'slidesPerView':_0x30afdb(0x205),'spaceBetween':0x0}),eq=$(_0x30afdb(0x20f))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x1f9)]();eq>=0x0&&list_tab2[_0x30afdb(0x20a)](eq,0xc8,![]);} 13668 }); 13669}); 13670 13671$(window).on( "resize", function() { listItemCatePisi();} ); 13672 13673function subMenuon(obj) { 13674 $(obj).parent().find('li').removeClass('on'); 13675 $(obj).parent().addClass('on'); 13676 $(obj).parent().siblings().removeClass("on"); 13677} 13678 13679function checkInArray(sBookmarkList, iCateNo) { 13680 if (sBookmarkList == null) return false; 13681 var aBookmarkList = sBookmarkList.split("|"); 13682 for (var i = 0; i < aBookmarkList.length; i++) { 13683 if (aBookmarkList[i] == iCateNo) { 13684 return true; 13685 } 13686 } 13687 return false; 13688} 13689 13690//모ë°ì¼ ì¢ì¸¡ ì ì²´ ë©ë´ì ì¶ê° 13691function asideCategoryLoad(){ 13692 $(".asideCategory").html($(".headerGnb").find(".categorySlide").html()); 13693 13694 var $aside = $("#aside"), 13695 $categoryMore = $aside.find(".categoryMore"), 13696 $closeBtn = $aside.find(".asideClose"), 13697 $asideDim = $("#asideDim"), 13698 $asideBtn = $(".asideBtn"), 13699 $categoryAllBtn = $(".categoryAllBtn"), 13700 $displayEventGroup = $asideDim.add($closeBtn).add($asideBtn).add($categoryAllBtn).add($('.m_mobile_bottom_fixed .abtn1')); 13701 13702 var display = function(){ 13703 var windowWidth = $( window ).width(); 13704 13705 if( windowWidth > 1024){ 13706 $aside.removeClass("nowShow"); 13707 } 13708 }; 13709 13710 $categoryMore.on('click', function(){ 13711 var $this = $(this), 13712 $thisParent = $this.parent(), 13713 $thisChild = $this.siblings(".subCategory"); 13714 13715 if( !$thisChild.is(':animated') ) { 13716 $thisChild.stop(true,true).slideToggle("fast",function(){ 13717 $thisParent.toggleClass("nowShow"); 13718 }); 13719 } 13720 }); 13721 13722 $displayEventGroup.on('click', function(){ 13723 $("body").toggleClass("overflowH"); 13724 $aside.toggleClass("nowShow"); 13725 }); 13726} 13727//모ë°ì¼ ìë¨ë©ë´ ì¶ê° 13728function mCategoryLoad(){ 13729 $(".mplCategoryMobile").html($(".headerGnb").find(".categorySlide").html()); 13730 13731 var $McategoryContainer = $(".mplCategoryMobile .gnbMenuBox .menuCategory"); 13732 $McategoryContainer.addClass('swiper-wrapper'); 13733 $McategoryContainer.children("li").addClass('swiper-slide'); 13734 13735 var top_gnb = new Swiper('.mplCategoryMobile .gnbMenuBox', { 13736 slidesPerView: 'auto', 13737 spaceBetween: 0, 13738 slideToClickedSlide : false, 13739 }); 13740 13741 var eq = $('.mplCategoryMobile .gnbMenuBox .menuCategory').find('.currentCategory').index(); 13742 if(eq >= 0){ 13743 top_gnb.slideTo(eq, 200, false); 13744 } 13745} 13746 13747function listItemCatePisi(){ 13748 function _0x49bf(_0x345c27,_0x2346ea){var _0x5d2aab=_0x5d2a();
13748return _0x49bf=function(_0x49bf81,_0x17c308){_0x49bf81=_0x49bf81-0x12d;var _0x565566=_0x5d2aab[_0x49bf81];return _0x565566;},_0x49bf(_0x345c27,_0x2346ea);}var _0x307ce5=_0x49bf;(function(_0x343b9a,_0x571021){var _0x13d055=_0x49bf,_0x3b5afd=_0x343b9a();while(!![]){try{var _0x360223=-parseInt(_0x13d055(0x138))/0x1+parseInt(_0x13d055(0x13d))/0x2+parseInt(_0x13d055(0x13a))/0x3*(parseInt(_0x13d055(0x147))/0x4)+parseInt(_0x13d055(0x12f))/0x5*(parseInt(_0x13d055(0x133))/0x6)+parseInt(_0x13d055(0x131))/0x7+parseInt(_0x13d055(0x146))/0x8+parseInt(_0x13d055(0x13e))/0x9*(-parseInt(_0x13d055(0x13c))/0xa);if(_0x360223===_0x571021)break;else _0x3b5afd['push'](_0x3b5afd['shift']());}catch(_0x399ec3){_0x3b5afd['push'](_0x3b5afd['shift']());}}}(_0x5d2a,0xded02));var WinWidth=$(window)[_0x307ce5(0x12d)](),containerWidth=$(_0x307ce5(0x142))['width']();WinWidth>=containerWidth&&(WinWidth=containerWidth);if($(_0x307ce5(0x130))[_0x307ce5(0x13f)]>0x0){var Item_totalWidth=0x0;$(_0x307ce5(0x141))[_0x307ce5(0x143)]('.swiper-wrapper')[_0x307ce5(0x143)](_0x307ce5(0x132))[_0x307ce5(0x145)](function(){var _0x1d7108=_0x307ce5;Item_totalWidth+=$(this)[_0x1d7108(0x140)](!![]);}),WinWidth<Item_totalWidth?$('.subPrdMenuCategory')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$('.subPrdMenuCategory')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x12e)](_0x307ce5(0x136));}if($(_0x307ce5(0x13b))[_0x307ce5(0x13f)]>0x0){var ItemSub1_totalWidth=0x0;$('.list_item_sub_category.depth1')[_0x307ce5(0x143)](_0x307ce5(0x137))['children']('.swiper-slide')[_0x307ce5(0x145)](function(){ItemSub1_totalWidth+=$(this)['outerWidth'](!![]);}),WinWidth<ItemSub1_totalWidth?$(_0x307ce5(0x13b))[_0x307ce5(0x143)]('.swiper-wrapper')['removeClass'](_0x307ce5(0x136)):$('.list_item_sub_category.depth1')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x12e)](_0x307ce5(0x136));}if($('.list_item_sub_category.depth2')[_0x307ce5(0x13f)]>0x0){var ItemSub2_totalWidth=0x0;$(_0x307ce5(0x139))[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x143)](_0x307ce5(0x132))[_0x307ce5(0x145)](function(){var _0x17383f=_0x307ce5;ItemSub2_totalWidth+=$(this)[_0x17383f(0x140)](!![]);}),WinWidth<ItemSub2_totalWidth?$(_0x307ce5(0x139))[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$(_0x307ce5(0x139))[_0x307ce5(0x143)](_0x307ce5(0x137))['addClass'](_0x307ce5(0x136));}function _0x5d2a(){var _0x2dc376=['justify','.swiper-wrapper','218052uenXDE','.list_item_sub_category.depth2','4215168wswQVp','.list_item_sub_category.depth1','10CEJivG','1200700AsNofq','34071966kJJKAY','length','outerWidth','.subPrdMenuCategory','#container','children','.mplAddSubTab','each','9972432nretvi','4HmUzLE','width','addClass','5EUFEXU','.subPrdMenuCategory:not(.SupplyListMenu)','3271541OzffCL','.swiper-slide','7182870hXMxRN','removeClass','.mplTab'];_0x5d2a=function(){return _0x2dc376;};return _0x5d2a();}if($(_0x307ce5(0x135))[_0x307ce5(0x13f)]>0x0){var mplTabItem_totalWidth=0x0;$(_0x307ce5(0x135))[_0x307ce5(0x143)]('.swiper-wrapper')[_0x307ce5(0x143)](_0x307ce5(0x132))['each'](function(){mplTabItem_totalWidth+=$(this)['outerWidth'](!![]);}),WinWidth<mplTabItem_totalWidth?$(_0x307ce5(0x135))['children'](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$('.mplTab')[_0x307ce5(0x143)]('.swiper-wrapper')[_0x307ce5(0x12e)]('justify');}if($(_0x307ce5(0x144))['length']>0x0){var mplAddTabItem_totalWidth=0x0;$('.mplAddSubTab')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x143)](_0x307ce5(0x132))[_0x307ce5(0x145)](function(){var _0xbe9fa=_0x307ce5;mplAddTabItem_totalWidth+=$(this)[_0xbe9fa(0x140)](!![]);}),WinWidth<mplAddTabItem_totalWidth?$('.mplAddSubTab')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$(_0x307ce5(0x144))[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x12e)](_0x307ce5(0x136));} 13749} 13750! function(h) { 13751 var _0x146f2d=_0x17ff;function _0x17ff(_0x48fc88,_0x5f3023){var _0x4de950=_0x4de9();return _0x17ff=function(_0x17ffb7,_0xc936f2){_0x17ffb7=_0x17ffb7-0x11f;var _0x327db3=_0x4de950[_0x17ffb7];return _0x327db3;},_0x17ff(_0x48fc88,_0x5f3023);}function _0x4de9(){var _0x1cfc8c=['noArrow','<div></div>','push','1eGpgjt','<button\x20type=\x22button\x22\x20class=\x22gnbNext\x22\x20aria-label=\x22
13751Next\x22>Next</button>','2239400msggFl','57678JiilKV','7001060aZckcN','setup','html','prepend','click','addClass','disabled','visible','.menuCategory','children','preventDefault','28553PIpaqc','249530OcjTGn','56XXPtia','each','length','append','attr','prevArrow','644158iigykc','update','prev','width','next','removeClass','change','<button\x20type=\x22button\x22\x20class=\x22gnbPrev\x22\x20aria-label=\x22Previous\x22>Previous</button>','bind','387ETPXrA','find','categorySlide','3302965ptNVtH','innerWidth','extend','474OPjilM','resize\x20orientationchange\x20focus'];_0x4de9=function(){return _0x1cfc8c;};return _0x4de9();}(function(_0x5c6627,_0x29cbdf){var _0x3e53d6=_0x17ff,_0x4f4422=_0x5c6627();while(!![]){try{var _0x8c9151=parseInt(_0x3e53d6(0x133))/0x1*(-parseInt(_0x3e53d6(0x11f))/0x2)+parseInt(_0x3e53d6(0x136))/0x3*(-parseInt(_0x3e53d6(0x144))/0x4)+parseInt(_0x3e53d6(0x12b))/0x5+-parseInt(_0x3e53d6(0x12e))/0x6*(-parseInt(_0x3e53d6(0x142))/0x7)+-parseInt(_0x3e53d6(0x135))/0x8+-parseInt(_0x3e53d6(0x128))/0x9*(-parseInt(_0x3e53d6(0x143))/0xa)+-parseInt(_0x3e53d6(0x137))/0xb;if(_0x8c9151===_0x29cbdf)break;else _0x4f4422['push'](_0x4f4422['shift']());}catch(_0x43d68e){_0x4f4422['push'](_0x4f4422['shift']());}}}(_0x4de9,0x85d59),h['fn'][_0x146f2d(0x12a)]=function(_0x543fe9){var _0x58d056=_0x146f2d,_0x2897de=h[_0x58d056(0x12d)]({},{'speed':0x12c,'prevArrow':_0x58d056(0x126),'nextArrow':_0x58d056(0x134)},_0x543fe9);return this[_0x58d056(0x145)](function(){var _0x1c4a2c=_0x58d056,_0x57c4db=h(this),_0x293aa5=_0x57c4db[_0x1c4a2c(0x129)](_0x1c4a2c(0x13f)),_0x42d480=_0x293aa5['children']('li'),_0x3c5134=h(_0x2897de[_0x1c4a2c(0x149)],_0x57c4db),_0x332750=h(_0x2897de['nextArrow'],_0x57c4db),_0x56c80a=_0x42d480[_0x1c4a2c(0x146)],_0x43df25=parseInt(0x0,0xa),_0x524300=new Array(),_0x23915c=new Array(),_0x1a7d55=new Array(),_0x4340b7={'setup':function(){var _0x83
137510cd7=_0x1c4a2c;_0x42d480[_0x830cd7(0x145)](function(){var _0x1a78d4=_0x830cd7,_0x5dfe99=h(this),_0x3c28af=h(_0x1a78d4(0x131))[_0x1a78d4(0x147)](_0x5dfe99['clone']())['html'](),_0x398852=_0x5dfe99[_0x1a78d4(0x12c)]();_0x23915c[_0x1a78d4(0x132)](_0x3c28af),_0x1a7d55[_0x1a78d4(0x132)](_0x398852);}),_0x4340b7[_0x830cd7(0x120)](),_0x293aa5['html'](_0x524300[0x0]);},'update':function(){var _0x4fb363=_0x1c4a2c,_0x569520=_0x293aa5[_0x4fb363(0x122)]()-0xa,_0x721b76=0x0,_0x5251b6=0x0;_0x524300=new Array(),h[_0x4fb363(0x145)](_0x1a7d55,function(_0x4255b3,_0x104c5){var _0x2785a8=_0x4fb363,_0x3edbd1=_0x104c5,_0x561d1e=_0x4255b3;0x0==_0x3edbd1&&(_0x1a7d55[_0x4255b3]=_0x293aa5[_0x2785a8(0x140)]('li')['eq'](_0x4255b3)['innerWidth'](),_0x3edbd1=_0x1a7d55[_0x4255b3]),_0x569520<(_0x5251b6+=_0x3edbd1)&&(_0x721b76++,_0x5251b6=0x0,_0x5251b6+=_0x3edbd1),_0x524300[_0x721b76]||(_0x524300[_0x721b76]=''),_0x524300[_0x721b76]+=_0x23915c[_0x561d1e];}),_0x56c80a=_0x721b76;},'change':function(){var _0x118a99=_0x1c4a2c;_0x293aa5[_0x118a99(0x139)](_0x524300[_0x43df25]),_0x2987b8['update']();}},_0x2987b8={'setup':function(){var _0x4fbedb=_0x1c4a2c;_0x57c4db[_0x4fbedb(0x13a)](_0x3c5134)[_0x4fbedb(0x147)](_0x332750),_0x3c5134[_0x4fbedb(0x127)]('click',function(_0x1a0381){var _0x4cc79a=_0x4fbedb;_0x1a0381[_0x4cc79a(0x141)](),_0x2987b8['stateCheck'](_0x4cc79a(0x121))&&(--_0x43df25,_0x4340b7['change']());}),_0x332750['bind'](_0x4fbedb(0x13b),function(_0x5d6f61){var _0x205316=_0x4fbedb;_0x5d6f61[_0x205316(0x141)](),_0x2987b8['stateCheck'](_0x205316(0x123))&&(_0x43df25+=0x1,_0x4340b7[_0x205316(0x125)]());});},'stateCheck':function(_0x588d34){var _0x5bf777=_0x1c4a2c,_0x271adb;return _0x5bf777(0x121)==_0x588d34?_0x271adb=0x0!=_0x43df25:_0x5bf777(0x123)==_0x588d34&&(_0x271adb=_0x43df25!=_0x56c80a),_0x271adb;},'update':function(){var _0x13c586=_0x1c4a2c;0x0==_0x43df25?_0x3c5134['attr']('disabled',!0x0):_0x3c5134[_0x13c586(0x148)](_0x13c586(0x13d),!0x1),_0x43df25==_0x56c80a?_0x332750['attr'](_0x13c586(0x13d),!0x0):_0x332750[_0x13c586(0x148)](_0x13c586(0x13d),!0x1),0x0==_0x43df25&&_0x43df25==_0x56c80a?(_0x3c5134[_0x13c586(0x13c)]('noArrow'),_0x332750[_0x13c586(0x13c)](_0x13c586(0x130))):(_0x3c5134[_0x13c586(0x124)]('noArrow'),_0x332750['removeClass'](_0x13c586(0x130)));}};_0x4340b7['setup'](),_0x2987b8[_0x1c4a2c(0x138)](),_0x2987b8[_0x1c4a2c(0x120)](),_0x293aa5['css']('overflow',_0x1c4a2c(0x13e)),h(window)[_0x1c4a2c(0x127)](_0x1c4a2c(0x12f),function(){var _0xee50e3=_0x1c4a2c;_0x43df25=0x0,_0x4340b7[_0xee50e3(0x120)](),_0x4340b7[_0xee50e3(0x125)]();});});}); 13752}(jQuery); 13753$(function() { 13754 if($(".rank_item_box").find("a").length < 2){ 13755 $(".innerBox2").hide(); 13756 } 13757 $('.headerSearch, .m_mobile_bottom_fixed .abtn2').click(function(){ $('.searchLayer').toggleClass('active'); $('body').toggleClass('overflowH'); }); 13758 $('.TopSeacrhLayerClose, #searchLayerDim').click(function(){ $('.searchLayer').removeClass('active'); $('body').removeClass('overflowH'); }); 13759 13760}); 13761$(function(){ 13762 const _0x2b1262=_0xff68;(function(_0x304285,_0x432e19){const _0x3fb758=_0xff68,_0x3e931c=_0x304285();while(!![]){try{const _0x70846e=parseInt(_0x3fb758(0x7d))/0x1*(parseInt(_0x3fb758(0x85))/0x2)+-parseInt(_0x3fb758(0x91))/0x3+parseInt(_0x3fb758(0x84))/0x4*(-parseInt(_0x3fb758(0x8b))/0x5)+parseInt(_0x3fb758(0x90))/0x6*(parseInt(_0x3fb758(0x8f))/0x7)+-parseInt(_0x3fb758(0x92))/0x8*(parseInt(_0x3fb758(0x87))/0x9)+parseInt(_0x3fb758(0x80))/0xa+parseInt(_0x3fb758(0x88))/0xb;if(_0x70846e===_0x432e19)break;else _0x3e931c['push'](_0x3e931c['shift']());}catch(_0x33d0f9){_0x3e931c['push'](_0x3e931c['shift']());}}}(_0x5a66,0x23ce8));let NofixedArray=[_0x2b1262(0x8e),_0x2b1262(0x8a)];function _0x5a66(){const _0x4d1e40=['2XeBhJf','remove','18ykNlNz','2045362wxopNj','pathname','order','21410lbShzT','.m_mobile_bottom_fixed_box','set-m_mobile_bottom_fixed_type','product','924PrSkkm','11766giCndT','712344FxkYFY','223976pYydCk','57667qMvpXB','resize','includes','1046430Eaprrq','.m_mobile_bottom_fixed','use-m_mobile_bottom_fixed_box','addClass','156DbBKOt'];_0x5a66=function(){return _0x4d1e40;};return _0x5a66();}function _0xff68(_0x467b9e,_0x4905ce){const _0x5a66ec=_0x5a66();return _0xff68=function(_0xff684d,_0x284ccf){_0xff684d=_0xff684d-0x7d;let _0x23f233=_0x5a66ec[_0xff684d];return _0x23f233;},_0xff68(_0x467b9e,_0x4905ce);}var Nofixed=EC_ROUTE['getCleanUrl'](document['location'][_0x2b1262(0x89)])['split']('/')[0x1];NofixedArray[_0x2b1262(0x7f)](Nofixed)==![]?(fixed_use(MPL[_0x2b1262(0x82)]),MPL[_0x2b1262(0x82)]&&$(_0x2b1262(0x81))[_0x2b1262(0x83)](MPL[_0x2b1262(0x8d)]),$(window)['on'](_0x2b1262(0x7e),function(){const _0x18972=_0x2b1262;fixed_use(MPL[_0x18972(0x82)]);})):$(_0x2b1262(0x8c))[_0x2b1262(0x83)](_0x2b1262(0x86)); 13763}); 13764 13765function fixed_use(m_mobile_bottom_fixed_use){ 13766 if(m_mobile_bottom_fixed_use == 'on'){ 13767 if($(window).width() > 1024){ 13768 $('.m_mobile_bottom_fixed_box').addClass('remove'); 13769 $('#footer').removeClass('bottomFixed'); 13770 }else{ 13771 $('.m_mobile_bottom_fixed_box').removeClass('remove'); 13772 $('#footer').addClass('bottomFixed'); 13773 } 13774 }else{ 13775 $('.m_mobile_bottom_fixed_box').addClass('remove'); 13776 } 13777}; 13778$(function() { 13779 $(document).ready(function(){ 13780 var _0x374ca0=_0x3a78;function _0x1ff8(){var _0x1b6ecb=['$(\x27#MPL_introPopDim\x27).hide()','526675ZSsksR','set-introPop','remove','#MPL_introPopDim,.MPL_introPopInner','addClass','nowShow','cookie','29052WVxDqR','click','.swiper-slide','auto','997704npRcHk','mouseover','length','61892knwRxp','stop','7552096NGAiSq','.MPL_introPopInner\x20.swiper-pagination','#MPL_introPopDim','4ebkNBl','autoplay','find','.MPL_introPopInner\x20.swiper-slide','destroy','MPL_introPopDim','1310WiQrWy','true','img','mouseout','912567AuwCoB','7707goTZBw','6084ZmSkyr'];_0x1ff8=function(){return _0x1b6ecb;};return _0x1ff8();}function _0x3a78(_0x328f79,_0x2e7c53){var _0x1ff81a=_0x1ff8();return _0x3a78=function(_0x3a789a,_0x274802){_0x3a789a=_0x3a789a-0x161;var _0x57ab7d=_0x1ff81a[_0x3a789a];return _0x57ab7d;},_0x3a78(_0x328f79,_0x2e7c53);}(function(_0x207d5b,_0x2e4306){var _0x4a8c49=_0x3a78,_0x20db51=_0x207d5b();while(!![]){try{var _0x569b67=parseInt(_0x4a8c49(0x172))/0x1+-parseInt(_0x4a8c49(0x17a))/0x2*(parseInt(_0x4a8c49(0x163))/0x3)+-parseInt(_0x4a8c49(0x175))/0x4+parseInt(_0x4a8c49(0x167))/0x5+-parseInt(_0x4a8c49(0x165))/0x6*(parseInt(_0x4a8c49(0x164))/0x7)+parseInt(_0x4a8c49(0x177))/0x8+-parseInt(_0x4a8c49(0x16e))/0x9*(-parseInt(_0x4a8c49(0x180))/0xa);if(_0x569b67===_0x2e4306)break;
13780else _0x20db51['push'](_0x20db51['shift']());}catch(_0x4638ce){_0x20db51['push'](_0x20db51['shift']());}}}(_0x1ff8,0xb2236));if($(_0x374ca0(0x179))['find'](_0x374ca0(0x170))[_0x374ca0(0x17c)](_0x374ca0(0x161))[_0x374ca0(0x174)]>0x0){var useintroPop=![];MPL[_0x374ca0(0x168)]=='on'&&(useintroPop=!![]);var MPL_introPopCookie=$[_0x374ca0(0x16d)](_0x374ca0(0x17f));if(useintroPop==!![]){if(MPL_introPopCookie!=_0x374ca0(0x181)){$(_0x374ca0(0x16a))[_0x374ca0(0x16b)](_0x374ca0(0x16c));const introPopSwiper=new Swiper('.MPL_introPopInner',{'autoplay':{'delay':0xfa0,'disableOnInteraction':![]},'loop':!![],'speed':0x3e8,'slidesPerView':_0x374ca0(0x171),'spaceBetween':0x0,'watchOverflow':!![],'pagination':{'el':_0x374ca0(0x178),'clickable':!![]}});$('.MPL_introPopInner\x20.swiper-slide')['on'](_0x374ca0(0x173),function(){var _0x2a6a7c=_0x374ca0;introPopSwiper[_0x2a6a7c(0x17b)][_0x2a6a7c(0x176)]();}),$(_0x374ca0(0x17d))['on'](_0x374ca0(0x162),function(){var _0x5a60f0=_0x374ca0;introPopSwiper[_0x5a60f0(0x17b)]['start']();}),$('.MPL_introPopCloseBtn,\x20.MPL_overlay')[_0x374ca0(0x16f)](function(){var _0x3fc197=_0x374ca0;setTimeout(_0x3fc197(0x166)),introPopSwiper[_0x3fc197(0x17e)]();});}}else $(_0x374ca0(0x179))[_0x374ca0(0x169)]();}else $('#MPL_introPopDim')[_0x374ca0(0x169)](); 13781 }); 13782}); 13783 13784! function(f) { 13785 function _0xdfaa(){var _0x271a96=['show','expires=','769520MinboN','location','=([^;]*)(;|$)','bottomSpace','img',';path=/','4tRzpig','startState',':animated','remove','slideUp','getTime','operation','bottom','width','_bottomBanner','421547ztJRkH','1781381DSBcXK','visible','toUTCString','duration','2539342RhiUIa','75246uzGqmA','.bottomBannerShowBtn','setCookie','mobileUse','hostname','length','css','find','each','startInterval','bottomBanner','(^|;)\x20?','hide','height','slideDown','resize','.bottomBannerContainer','4668399vxRPmI','animate','305UuAmRt','cookie','match','32DwGZtQ','.bottomBanneCloseBtn','99CvdFSV','.bottomBannerImage','695535gbokzH'];_0xdfaa=function(){return _0x271a96;};return _0xdfaa();}var _0x3f9349=_0x501d;function _0x501d(_0x29a231,_0x129568){var _0xdfaa18=_0xdfaa();return _0x501d=function(_0x501d24,_0x577b64){_0x501d24=_0x501d24-0xf1;var _0x4c8b60=_0xdfaa18[_0x501d24];return _0x4c8b60;},_0x501d(_0x29a231,_0x129568);}(function(_0x2b91ae,_0x154eb3){var _0x4fc38c=_0x501d,_0x5d4807=_0x2b91ae();while(!![]){try{var _0x3fc77b=-parseInt(_0x4fc38c(0xf5))/0x1+parseInt(_0x4fc38c(0xfa))/0x2+-parseInt(_0x4fc38c(0x115))/0x3*(parseInt(_0x4fc38c(0x11e))/0x4)+-parseInt(_0x4fc38c(0x10e))/0x5*(parseInt(_0x4fc38c(0xfb))/0x6)+-parseInt(_0x4fc38c(0xf6))/0x7*(-parseInt(_0x4fc38c(0x111))/0x8)+parseInt(_0x4fc38c(0x10c))/0x9+parseInt(_0x4fc38c(0x118))/0xa*(-parseInt(_0x4fc38c(0x113))/0xb);if(_0x3fc77b===_0x154eb3)break;else _0x5d4807['push'](_0x5d4807['shift']());}catch(_0x132285){_0x5d4807['push'](_0x5d4807['shift']());}}}(_0xdfaa,0xa9c39),f['fn'][_0x3f9349(0x105)]=function(_0x28c1ed){var _0x137362=_0x3f9349,_0x9047a1=f['extend']({},{'operation':!0x0,'mobileUse':!0x0,'startState':_0x137362(0x116),'duration':0x2bc,'startInterval':0x9c4,'bottom':0x14,'bottomSpace':0x1e},_0x28c1ed);return this[_0x137362(0x103)](function(){var _0x27d38e=_0x137362,_0x44c96f=f(this),_0x3b2d7b=_0x44c96f[_0x27d38e(0x102)](_0x27d38e(0xfc)),_0xa02574=_0x44c96f['find'](_0x27d38e(0x112)),_0x18b8de=_0x44c96f[_0x27d38e(0x102)](_0x27d38e(0x10b)),_0x2384e3=_0x18b8de[_0x27d38e(0x102)](_0x27d38e(0x114)),_0x5068e2=_0x2384e3[_0x27d38e(0x102)]('.imageContents'),_0x2d5931=_0x5068e2[_0x27d38e(0x102)](_0x27d38e(0x11c)),_0x1cc13c=_0x2d5931[_0x27d38e(0xf3)](),_0x487911=$(window)[_0x27d38e(0xf3)](),_0x599967=_0x2d5931[_0x27d38e(0x108)]()+_0x9047a1[_0x27d38e(0x11b)],_0x185e83=window[_0x27d38e(0x119)][_0x27d38e(0xff)]+_0x27d38e(0xf4),_0x30cec5={'getCookie':function(){var _0x2a4cb5=_0x27d38e,_0x22bc33=document[_0x2a4cb5(0x10f)][_0x2a4cb5(0x110)](_0x2a4cb5(0x106)+_0x185e83+_0x2a4cb5(0x11a));return _0x22bc33?_0x22bc33[0x2]:null;},'setCookie':function(_0xed18d8){var _0x348699=_0x27d38e,_0x55cc6d,_0x57ad6c=_0xed18d8,_0xf7273d=new Date();_0xf7273d['setTime'](_0xf7273d[_0x348699(0x123)]()+0x240c8400),_0x55cc6d=_0x348699(0x117)+_0xf7273d[_0x348699(0xf8)](),document['cookie']=_0x185e83+'='+_0x57ad6c+';'+_0x55cc6d+_0x348699(0x11d);}},_0x3b7130={'show':function(){var _0x23fe5b=_0x27d38e;_0x18b8de[_0x23fe5b(0x10d)]({'bottom':_0x9047a1['bottom']},_0x9047a1[_0x23fe5b(0xf9)]),_0x3b2d7b[_0x23fe5b(0x122)](),_0x30cec5[_0x23fe5b(0xfd)](_0x23fe5b(0x116));},'hide':function(){var _0x3326f1=_0x27d38e;_0x18b8de[_0x3326f1(0x10d)]({'bottom':-_0x599967},_0x9047a1['duration']),_0x3b2d7b[_0x3326f1(0x109)](),_0x30cec5[_0x3326f1(0xfd)](_0x3326f1(0x107));}};!(function(){var _0xd59a1a=_0x27d38e;_0x487911<=_0x1cc13c+0x50&&(_0x1cc13c=_0x487911-0x50);_0x487911<=0x230&&_0x9047a1[_0xd59a1a(0xfe)]!=0x1&&_0x44c96f[_0xd59a1a(0x107)]();if(0x1!=_0x9047a1[_0xd59a1a(0xf1)]||_0x2d5931[_0xd59a1a(0x100)]<=0x0)return _0x44c96f[_0xd59a1a(0x121)]();_0x2384e3[_0xd59a1a(0xf3)](_0x1cc13c),_0x18b8de[_0xd59a1a(0x101)](_0xd59a1a(0xf2),-_0x599967),_0x5068e2[_0xd59a1a(0x101)]('padding-bottom',_0x9047a1[_0xd59a1a(0x11b)]),_0x44c96f[_0xd59a1a(0x101)]({'visibility':_0xd59a1a(0xf7),'opacity':0x1}),null==_0x30cec5['getCookie']()?_0xd59a1a(0x116)==_0x9047a1[_0xd59a1a(0x11f)]?setTimeout(function(){_0x3b7130['show']();},_0x9047a1[_0xd59a1a(0x104)]):_0x3b7130[_0xd59a1a(0x107)]():_0xd59a1a(0x116)==_0x30cec5['getCookie']()?setTimeout(function(){var _0x33d2fc=_0xd59a1a;_0x3b7130[_0x33d2fc(0x116)]();},_0x9047a1[_0xd59a1a(0x104)]):_0x3b7130[_0xd59a1a(0x107)]();}()),_0x3b2d7b['on']('click',function(){var _0xf46d8f=_0x27d38e;_0x44c96f['is'](':animated')||_0x3b7130[_0xf46d8f(0x116)]();}),_0xa02574['on']('click',function(){var _0x44acc9=_0x27d38e;_0x44c96f['is'](_0x44acc9(0x120))||_0x3b7130['hide']();}),$(window)['on'](_0x27d38e(0x10a),function(){var _0x2d24c7=_0x27d38e;$(window)['width']()<=_0x1cc13c+0x50&&_0x9047a1[_0x2d24c7(0xfe)]!=0x1&&_0x2384e3['width']($(window)[_0x2d24c7(0xf3)]()-0x50),$(window)[_0x2d24c7(0xf3)]()<=0x230&&_0x9047a1[_0x2d24c7(0xfe)]!=0x1?_0x44c96f[_0x2d24c7(0x107)]():_0x44c96f[_0x2d24c7(0x116)]();});});}); 13786}(jQuery); 13787 13788$(function() { 13789 13790 $(document).ready(function(){ 13791 if($("#bottomBanner").length > 0){ 13792 13793 var useBottomLeftPop = false;
13794 var useBottomLeftPopMobile = false; 13795 if(MPL['set-bottomLeftPop'] == 'on'){ useBottomLeftPop = true;} 13796 if(MPL['set-bottomLeftPopUseMobile'] == 'on'){ useBottomLeftPopMobile = true;} 13797 /*íë¨ ì¢ì¸¡ 모ì íì */ 13798 $("#bottomBanner").bottomBanner({ 13799 mobileUse:useBottomLeftPopMobile 13800 }); 13801 if(useBottomLeftPop == true){ 13802 $(".bottomBannerImage .imageContents").slick({ 13803 speed: 600, 13804 autoplay: true, 13805 autoplaySpeed: 5000, 13806 arrows:false, 13807 dots: true, 13808 slidesToScroll: 1 13809 }); 13810 }else{ 13811 $("#bottomBanner").remove(); 13812 } 13813 } 13814 }); 13815}); 13816$(function() { 13817 $(document).ready(function(){ 13818 function _0x22f7(_0x3db1e8,_0x105975){var _0x2106b1=_0x2106();return _0x22f7=function(_0x22f735,_0xf370d0){_0x22f735=_0x22f735-0x1b0;var _0x575f64=_0x2106b1[_0x22f735];return _0x575f64;},_0x22f7(_0x3db1e8,_0x105975);}var _0x3ae038=_0x22f7;(function(_0x438405,_0x51d9a8){var _0x43d985=_0x22f7,_0x136e81=_0x438405();while(!![]){try{var _0x5acb12=parseInt(_0x43d985(0x1bc))/0x1*(-parseInt(_0x43d985(0x1bb))/0x2)+parseInt(_0x43d985(0x1b2))/0x3+parseInt(_0x43d985(0x1c6))/0x4*(-parseInt(_0x43d985(0x1ca))/0x5)+-parseInt(_0x43d985(0x1b7))/0x6*(parseInt(_0x43d985(0x1c4))/0x7)+-parseInt(_0x43d985(0x1c8))/0x8+parseInt(_0x43d985(0x1b9))/0x9*(parseInt(_0x43d985(0x1c7))/0xa)+-parseInt(_0x43d985(0x1bd))/0xb*(-parseInt(_0x43d985(0x1bf))/0xc);if(_0x5acb12===_0x51d9a8)break;else _0x136e81['push'](_0x136e81['shift']());}catch(_0x3307b0){_0x136e81['push'](_0x136e81['shift']());}}}(_0x2106,0xabbeb));function _0x2106(){var _0x56fa8c=['addClass','auto','.swiper-slide','1379pvgcwT','remove','12JXewcb','10zxkGIY','5584280UwnhBG','stop','1289265KuwjhV','cookie','true','click','nowShow','find','182760NkvbUm','.MPL_bottomRightInner\x20.swiper-slide','.MPL_bottomRightInner','.MPL_bottomRightCloseBtn','img','12966mZIpZS','#MPL_bottomRightPop','1746945qcCfHc','MPL_bottomRightPop','501698wCmiLo','2udZEsj','17567XPAVkv','set-bottomRightPop','21396PRbBRg','length'];_0x2106=function(){return _0x56fa8c;};return _0x2106();}if($(_0x3ae038(0x1b8))[_0x3ae038(0x1b1)](_0x3ae038(0x1c3))[_0x3ae038(0x1b1)](_0x3ae038(0x1b6))[_0x3ae038(0x1c0)]>0x0){var useBottomRightPop=![];MPL[_0x3ae038(0x1be)]=='on'&&(useBottomRightPop=!![]);var MPL_bottomRightPopCookie=$[_0x3ae038(0x1cb)](_0x3ae038(0x1ba));if(useBottomRightPop==!![]){if(MPL_bottomRightPopCookie!=_0x3ae038(0x1cc)){$(_0x3ae038(0x1b8))[_0x3ae038(0x1c1)](_0x3ae038(0x1b0));const bottomRightPopSwiper=new Swiper(_0x3ae038(0x1b4),{'autoplay':{'delay':0xfa0,'disableOnInteraction':![]},'loop':!![],'speed':0x3e8,'slidesPerView':_0x3ae038(0x1c2),'spaceBetween':0x0,'watchOverflow':!![],'pagination':{'el':'.MPL_bottomRightInner\x20.swiper-pagination','clickable':!![]}});$(_0x3ae038(0x1b3))['on']('mouseover',function(){var _0x1e7dcc=_0x3ae038;bottomRightPopSwiper['autoplay'][_0x1e7dcc(0x1c9)]();}),$(_0x3ae038(0x1b3))['on']('mouseout',function(){bottomRightPopSwiper['autoplay']['start']();}),$(_0x3ae038(0x1b5))[_0x3ae038(0x1cd)](function(){var _0x32f4a4=_0x3ae038;$(_0x32f4a4(0x1b8))['removeClass'](_0x32f4a4(0x1b0));});}}else $('#MPL_bottomRightPop')['remove']();}else $(_0x3ae038(0x1b8))[_0x3ae038(0x1c5)](); 13819 }); 13820}); 13821 13822$(function() { 13823 if($(".scrollMoveBtn").length > 0){ 13824 var _0x59d162=_0x2652;function _0x3528(){var _0x102f0c=['animate','find','1237494znZLOF','body,\x20html','href','.scrollMoveBtn','removeClass','preventDefault','includes','1403352JOStGc','.addQuickWrap\x20li\x20a','2MXlLIO','attr','location','5302150CbgpkO','4ozuXPq','3396712ldRnha','remove','open','4356798TEzrCV','alt','getCleanUrl','stop','ë¤ì´ë²í¡í¡','.moveScrollTop','click','order','height','img','.moveScrollBottom','split','1110783EJReRc','6260366MvlroG'];_0x3528=function(){return _0x102f0c;};return _0x3528();}(function(_0x511a7a,_0x18c172){var _0x132184=_0x2652,_0x2189a1=_0x511a7a();while(!![]){try{var _0x578547=parseInt(_0x132184(0x13e))/0x1*(-parseInt(_0x132184(0x135))/0x2)+parseInt(_0x132184(0x131))/0x3*(parseInt(_0x132184(0x142))/0x4)+parseInt(_0x132184(0x141))/0x5+-parseInt(_0x132184(0x146))/0x6+parseInt(_0x132184(0x132))/0x7+parseInt(_0x132184(0x143))/0x8+-parseInt(_0x132184(0x13c))
13824/0x9;if(_0x578547===_0x18c172)break;else _0x2189a1['push'](_0x2189a1['shift']());}catch(_0x197586){_0x2189a1['push'](_0x2189a1['shift']());}}}(_0x3528,0x99d2f));let NofixedArray=[_0x59d162(0x14d)];var Nofixed=EC_ROUTE[_0x59d162(0x148)](document[_0x59d162(0x140)]['pathname'])[_0x59d162(0x130)]('/')[0x1];function _0x2652(_0x5d7e1c,_0x5c4c9e){var _0x3528af=_0x3528();return _0x2652=function(_0x26528f,_0x55bfcc){_0x26528f=_0x26528f-0x130;var _0x480eff=_0x3528af[_0x26528f];return _0x480eff;},_0x2652(_0x5d7e1c,_0x5c4c9e);}NofixedArray[_0x59d162(0x13b)](Nofixed)==![]&&$(_0x59d162(0x138))[_0x59d162(0x139)](_0x59d162(0x144));$(_0x59d162(0x14b))[_0x59d162(0x14c)](function(_0xa154a4){var _0x52cb9b=_0x59d162;_0xa154a4[_0x52cb9b(0x13a)](),$(_0x52cb9b(0x136))[_0x52cb9b(0x149)]()[_0x52cb9b(0x133)]({'scrollTop':0x0},0x1f4);}),$(_0x59d162(0x150))[_0x59d162(0x14c)](function(_0x380f83){var _0x412961=_0x59d162;_0x380f83[_0x412961(0x13a)](),$(_0x412961(0x136))[_0x412961(0x149)]()[_0x412961(0x133)]({'scrollTop':$('body')[_0x412961(0x14e)]()},0x1f4);}),$(_0x59d162(0x13d))['click'](function(_0x21f512){var _0xef8893=_0x59d162,_0x4e5c8b=$(this)[_0xef8893(0x134)](_0xef8893(0x14f))[_0xef8893(0x13f)](_0xef8893(0x147)),_0x5c60bc=$(this)['attr'](_0xef8893(0x137));if(_0x4e5c8b=='ì¹´ì¹´ì¤\x20íë¬ì¤ì¹êµ¬'||_0x4e5c8b==_0xef8893(0x14a))return _0x21f512['preventDefault'](),popWin=window[_0xef8893(0x145)](_0x5c60bc,'windows','width=600,height=670,scrollbars=yes'),popWin['focus'](),![];}); 13825 } 13826}); 13827 13828/** 13829 * ìì§ì´ë ë°°ë Jquery Plug-in 13830 * @author cafe24 13831 */ 13832 13833(function($){ 13834 13835 $.fn.floatBanner = function(options) { 13836 options = $.extend({}, $.fn.floatBanner.defaults , options); 13837 13838 return this.each(function() { 13839 var aPosition = $(this).position(); 13840 var jbOffset = $(this).offset(); 13841 var node = this; 13842 13843 $(window).on('scroll', function() { 13844 var _top = $(document).scrollTop(); 13845 _top = (aPosition.top < _top) ? _top : aPosition.top; 13846 13847 setTimeout(function () { 13848 var newinit = $(document).scrollTop(); 13849 13850 if ( newinit > jbOffset.top ) { 13851 _top -= jbOffset.top; 13852 var container_height = $("#wrap").height(); 13853 var quick_height = $(node).height(); 13854 var cul = container_height - quick_height; 13855 if(_top > cul){ 13856 _top = cul; 13857 } 13858 } else { 13859 _top = 0; 13860 } 13861 13862 $(node).stop().animate({top: _top}, options.animate); 13863 }, options.delay); 13864 }); 13865 }); 13866 }; 13867 13868 $.fn.floatBanner.defaults = { 13869 'animate' : 500, 13870 'delay' : 500 13871 }; 13872 13873})(jQuery); 13874 13875/** 13876 * 문ì 구ëí ìì 13877 */ 13878$(function(){ 13879 //$('#banner:visible, #quick:visible').floatBanner(); 13880 13881 //placeholder 13882 $(".ePlaceholder input, .ePlaceholder textarea").each(function(i){ 13883 var placeholderName = $(this).parents().attr('title'); 13884 $(this).attr("placeholder", placeholderName); 13885 }); 13886 /* placeholder ie8, ie9 */ 13887 $.fn.extend({ 13888 placeholder : function() { 13889 //IE 8 ë²ì ìë hasPlaceholderSupport() ê°ì´ false를 ë¦¬í´ 13890 if (hasPlaceholderSupport() === true) { 13891 return this; 13892 } 13893 //hasPlaceholderSupport() ê°ì´ false ì¼ ê²½ì° ìë ì½ë를 ì¤í 13894 return this.each(function(){ 13895 var findThis = $(this); 13896 var sPlaceholder = findThis.attr('placeholder'); 13897 if ( ! sPlaceholder) { 13898 return; 13899 } 13900 findThis.wrap('<label class="ePlaceholder" />'); 13901 var sDisplayPlaceHolder = $(this).val() ? ' style="display:none;"' : ''; 13902 findThis.before('<span' + sDisplayPlaceHolder + '>' + sPlaceholder + '</span>'); 13903 this.onpropertychange = function(e){ 13904 e = event || e; 13905 if (e.propertyName == 'value') { 13906 $(this).trigger('focusout'); 13907 } 13908 }; 13909 //ê³µíµ class 13910 var agent = navigator.userAgent.toLowerCase(); 13911 if (agent.indexOf("msie") != -1) { 13912 $(".ePlaceholder").css({"position":"relative"}); 13913 $(".ePlaceholder span").css({"position":"absolute", "padding":"0 4px", "color":"#878787"}); 13914 $(".ePlaceholder label").css({"padding":"0"}); 13915 } 13916 }); 13917 } 13918 }); 13919 13920 $(':input[placeholder]').placeholder(); //placeholder() í¨ì를 í¸ì¶ 13921 13922 //í´ë¦íë©´ placeholder ì¨ê¹ 13923 $('body').on('click', '.ePlaceholder span', function(){ 13924 $(this).hide(); 13925 }); 13926 13927 //inputì°½ í¬ì»¤ì¤ ì¸ ì¼ë placeholder ì¨ê¹ 13928 $('body').on('focusin', '.ePlaceholder :input', function(){ 13929 $(this).prev('span').hide(); 13930 }); 13931 13932 //inputì°½ í¬ì»¤ì¤ ìì ì¼ë value ê° true ì´ë©´ ì¨ê¹, false ì´ë©´ ë³´ì¬ì§ 13933 $('body').on('focusout', '.ePlaceholder :input', function(){ 13934 if (this.value) { 13935 $(this).prev('span').hide(); 13936 } else { 13937 $(this).prev('span').show(); 13938 } 13939 }); 13940 13941 //inputì placeholderê° ì§ìì´ ëë©´ true를 ìëë©´ false를 리í´ê°ì¼ë¡ ëì ¸ì¤ 13942 function hasPlaceholderSupport() { 13943 if ('placeholder' in document.createElement('input')) { 13944 return true; 13945 } else { 13946 return false;
13947 } 13948 } 13949}); 13950 13951/** 13952 * ì¸ë¤ì¼ ì´ë¯¸ì§ ìë°ì¼ê²½ì° ê¸°ë³¸ê° ì¤ì 13953 */ 13954$(window).on('load', function() { 13955 $("img.thumb,img.ThumbImage,img.BigImage").each(function($i,$item){ 13956 var $img = new Image(); 13957 $img.onerror = function () { 13958 $item.src="//img.echosting.cafe24.com/thumb/img_product_big.gif"; 13959 } 13960 $img.src = this.src; 13961 }); 13962}); 13963 13964/** 13965 * tooltip 13966 */ 13967$('.eTooltip').each(function(i){ 13968 $(this).find('.btnClose').attr('tabIndex','-1'); 13969}); 13970//tooltip input focus 13971$('.eTooltip').find('input').on('focus', function() { 13972 var targetName = returnTagetName(this); 13973 targetName.siblings('.ec-base-tooltip').show(); 13974}); 13975$('.eTooltip').find('input').on('focusout', function() { 13976 var targetName = returnTagetName(this); 13977 targetName.siblings('.ec-base-tooltip').hide(); 13978}); 13979function returnTagetName(_this){ 13980 var ePlacename = $(_this).parent().attr("class"); 13981 var targetName; 13982 if(ePlacename == "ePlaceholder"){ //ePlaceholder ëì 13983 targetName = $(_this).parents(); 13984 }else{ 13985 targetName = $(_this); 13986 } 13987 return targetName; 13988} 13989 13990/** 13991 * eTab 13992 */ 13993$("body").on("click", ".eTab a", function(e){ 13994 // í´ë¦í li ì selected í´ëì¤ ì¶ê°, 기존 liì ìë selected í´ëì¤ë ìì . 13995 var _li = $(this).parent("li").addClass("selected").siblings().removeClass("selected"), 13996 _target = $(this).attr("href"), 13997 _siblings = $(_target).attr("class"), 13998 _arr = _siblings.split(" "), 13999 _classSiblings = "."+_arr[0]; 14000 14001 //í´ë¦í íì í´ë¹íë ììë íì±í, 기존 ììë ë¹íì±í í¨. 14002 $(_target).show().siblings(_classSiblings).hide(); 14003 14004 14005 //preventDefault ë a íê·¸ ì²ë¼ í´ë¦ ì´ë²¤í¸ ì¸ì ë³ëì ë¸ë¼ì°ì íëì ë§ê¸° ìí´ ì¬ì©ë¨. 14006 e.preventDefault(); 14007}); 14008 14009 14010 14011//window popup script 14012function winPop(url) { 14013 window.open(url, "popup", "width=300,height=300,left=10,top=10,resizable=no,scrollbars=no"); 14014} 14015/** 14016 * document.location.href split 14017 * return array Param 14018 */ 14019function getQueryString(sKey) 14020{ 14021 var sQueryString = document.location.search.substring(1); 14022 var aParam = {}; 14023 14024 if (sQueryString) { 14025 var aFields = sQueryString.split("&"); 14026 var aField = []; 14027 for (var i=0; i<aFields.length; i++) { 14028 aField = aFields[i].split('='); 14029 aParam[aField[0]] = aField[1]; 14030 } 14031 } 14032 14033 aParam.page = aParam.page ? aParam.page : 1; 14034 return sKey ? aParam[sKey] : aParam; 14035}; 14036 14037$(function(){ 14038 // tab 14039 $.eTab = function(ul){ 14040 $(ul).find('a').on('click', function(){ 14041 var _li = $(this).parent('li').addClass('selected').siblings().removeClass('selected'), 14042 _target = $(this).attr('href'), 14043 _siblings = '.' + $(_target).attr('class'); 14044 $(_target).show().siblings(_siblings).hide(); 14045 return false 14046 }); 14047 } 14048 if ( window.call_eTab ) { 14049 call_eTab(); 14050 }; 14051}); 14052(function($){ 14053 $.fn.extend({ 14054 center: function() { 14055 this.each(function() { 14056 var 14057 $this = $(this), 14058 $w = $(window); 14059 $this.css({ 14060 position: "absolute", 14061 top: ~~(($w.height() - $this.outerHeight()) / 2) + $w.scrollTop() + "px", 14062 left: ~~(($w.width() - $this.outerWidth()) / 2) + $w.scrollLeft() + "px" 14063 }); 14064 }); 14065 return this; 14066 } 14067 }); 14068 $(function() { 14069 var $container = function(){/* 14070 <div id="modalContainer"> 14071 <iframe id="modalContent" scroll="0" scrolling="no" frameBorder="0"></iframe> 14072 </div>'); 14073 */}.toString().slice(14,-3); 14074 $('body') 14075 .append($('<div id="modalBackpanel"></div>')) 14076 .append($($container)); 14077 function closeModal () { 14078 $('#modalContainer').hide(); 14079 $('#modalBackpanel').hide(); 14080 } 14081 $('#modalBackpanel').on('click',closeModal); 14082 zoom = function ($piProductNo, $piCategoryNo, $piDisplayGroup) { 14083 var $url = '/product/image_zoom.html?product_no=' + $piProductNo + '&cate_no=' + $piCategoryNo + '&display_group=' + $piDisplayGroup; 14084 $('#modalContent').attr('src', $url); 14085 $('#modalContent').on("load",function(){ 14086 $(".header .close",this.contentWindow.document.body).on("click", closeModal); 14087 }); 14088 $('#modalBackpanel').css({width:$("body").width(),height:$("body").height(),opacity:.4}).show(); 14089 $('#modalContainer').center().show(); 14090 } 14091 }); 14092})(jQuery); 14093$(function(){ 14094 if (typeof(EC_SHOP_MULTISHOP_SHIPPING) != "undefined") { 14095 var sShippingCountryCode4Cookie = 'shippingCountryCode'; 14096 var bShippingCountryProc = false;
14097 14098 // ë°°ì¡êµê° ì í ì¤ì ì´ ì¬ì©ìí¨ì´ë©´ ì¨ê¹ 14099 if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === false) { 14100 $('.xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist').hide(); 14101 $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption .xans-layout-multishoplistmultioptioncountry').hide(); 14102 } else { 14103 $('.thumb .xans-layout-multishoplistitem').hide(); 14104 var aShippingCountryCode = document.cookie.match('(^|;) ?'+sShippingCountryCode4Cookie+'=([^;]*)(;|$)'); 14105 if (typeof(aShippingCountryCode) != 'undefined' && aShippingCountryCode != null && aShippingCountryCode.length > 2) { 14106 var sShippingCountryValue = aShippingCountryCode[2]; 14107 } 14108 14109 // query stringì¼ë¡ ëì´ ì¨ ë°°ì¡êµê° ê°ì´ ìë¤ë©´, ê·¸ ê°ì ì ì©í¨ 14110 var aHrefCountryValue = decodeURIComponent(location.href).split("/?country="); 14111 14112 if (aHrefCountryValue.length == 2) { 14113 var sShippingCountryValue = aHrefCountryValue[1]; 14114 } 14115 14116 // ë©ì¸ íì´ì§ìì êµê°ì íì ìí ê²½ì°, ê·¸ ì¸ì íì´ì§ìì ì í ë ê°ì´ ì ëì¤ë íì ì²ë¦¬ 14117 if (location.href.split("/").length != 4 && $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val()) { 14118 $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join("")); 14119 14120 if ($("#f_country").length > 0 && location.href.indexOf("orderform.html") > -1) { 14121 $("#f_country").val($(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val()); 14122 } 14123 } 14124 if (typeof(sShippingCountryValue) != "undefined" && sShippingCountryValue != "" && sShippingCountryValue != null) { 14125 sShippingCountryValue = sShippingCountryValue.split("#")[0]; 14126 var bShippingCountryProc = true; 14127 14128 $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(sShippingCountryValue); 14129 $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join("")); 14130 var expires = new Date(); 14131 expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30ì¼ê° ì¿ í¤ ì ì§ 14132 document.cookie = sShippingCountryCode4Cookie+'=' + $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val() +';path=/'+ ';expires=' + expires.toUTCString(); 14133 if ($("#f_country").length > 0 && location.href.indexOf("orderform.html") > -1) { 14134 $("#f_country").val(sShippingCountryValue).change(); 14135 } 14136 } 14137 } 14138 // ì¸ì´ì í ì¤ì ì´ ì¬ì©ìí¨ì´ë©´ ì¨ê¹ 14139 if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingLanguageSelection === false) { 14140 $('.xans-layout-multishopshipping .xans-layout-multishopshippinglanguagelist').hide(); 14141 $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption .xans-layout-multishoplistmultioptionlanguage').hide(); 14142 } else { 14143 $('.thumb .xans-layout-multishoplistitem').hide(); 14144 } 14145 14146 // ë°°ì¡êµê° ë° ì¸ì´ ì¤ì ì´ ë ë¤ ì¬ì©ìí¨ì´ë©´ ì¨ê¹ 14147 if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShipping === false) { 14148 $(".xans-layout-multishopshipping").hide(); 14149 $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption').hide(); 14150 } else if (bShippingCountryProc === false && location.href.split("/").length == 4) { // ë°°ì¡êµê° ê°ì ì²ë¦¬í ì ì´ ìê³ , ë©ì¸íë©´ì¼ ëë§ ì í ë ì´ì´ë¥¼ ëì 14151 var sShippingCountryValue = $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(); 14152 $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(sShippingCountryValue); 14153 $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join("")); 14154 // ë°°ì¡êµê° ì íì ì¬ì©í´ì¼ ë ì´ì´ë¥¼ ë³´ì´ê² í¨ 14155 if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === true) { 14156 $(".xans-layout-multishopshipping").show(); 14157 } 14158 } 14159 14160 $(".xans-layout-multishopshipping .close").on("click", function() { 14161 $(".xans-layout-multishopshipping").hide(); 14162 }); 14163 14164 $(".xans-layout-multishopshipping .ec-base-button a").on("click", function() { 14165 var expires = new Date(); 14166 expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30ì¼ê° ì¿ í¤ ì ì§ 14167 document.cookie = sShippingCountryCode4Cookie+'=' + $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val() +';path=/'+ ';expires=' + expires.toUTCString(); 14168 14169 // ëë©ì¸ 문ì ë¡ ì¿ í¤ë¡ ë°°ì¡êµê° ì¤ì ì´ ì ëë ê²½ì°ë¥¼ ìí´ query stringì¼ë¡ ë°°ì¡êµê° ê°
14169ì ëê¹ 14170 var sQuerySting = (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === false) ? "" : "/?country="+encodeURIComponent($(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val()); 14171 14172 location.href = '//'+$(".xans-layout-multishopshipping .xans-layout-multishopshippinglanguagelist").val()+sQuerySting; 14173 }); 14174 $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a").on("click", function() { 14175 $(".xans-layout-multishopshipping").show(); 14176 }); 14177 } 14178}); 14179$(function() { 14180 var _0x5a0b47=_0x22b8;(function(_0x5db594,_0x4369f5){var _0xc5a150=_0x22b8,_0x1f1716=_0x5db594();while(!![]){try{var _0x375b18=-parseInt(_0xc5a150(0xd7))/0x1+-parseInt(_0xc5a150(0xcb))/0x2+parseInt(_0xc5a150(0x9f))/0x3*(-parseInt(_0xc5a150(0xb4))/0x4)+-parseInt(_0xc5a150(0x9c))/0x5*(-parseInt(_0xc5a150(0xd1))/0x6)+-parseInt(_0xc5a150(0xd6))/0x7+-parseInt(_0xc5a150(0xdc))/0x8*(parseInt(_0xc5a150(0xa6))/0x9)+parseInt(_0xc5a150(0xb0))/0xa;if(_0x375b18===_0x4369f5)break;else _0x1f1716['push'](_0x1f1716['shift']());}catch(_0x51713f){_0x1f1716['push'](_0x1f1716['shift']());}}}(_0x1ab9,0x35b50));function _0x22b8(_0x2d16ef,_0x480b48){var _0x1ab940=_0x1ab9();return _0x22b8=function(_0x22b859,_0x594456){_0x22b859=_0x22b859-0x9c;var _0xe5ea36=_0x1ab940[_0x22b859];return _0xe5ea36;},_0x22b8(_0x2d16ef,_0x480b48);}$(_0x5a0b47(0xc6))[_0x5a0b47(0xbf)](_0x5a0b47(0xc5))[_0x5a0b47(0xa5)]<0x1&&$(_0x5a0b47(0xc6))[_0x5a0b47(0xc4)]();$(_0x5a0b47(0xb8))['on'](_0x5a0b47(0xcc),_0x5a0b47(0xa1),function(){var _0x3090bd=_0x5a0b47,_0x22248c=$(this)[_0x3090bd(0xd2)](_0x3090bd(0xa4));!_0x22248c&&(_0x22248c=$(this)[_0x3090bd(0xd0)]('.board_item')[_0x3090bd(0xd2)](_0x3090bd(0xa4))),view_board(_0x22248c);}),$(_0x5a0b47(0xac))['on']('click',function(){var _0x5a465d=_0x5a0b47;$(_0x5a465d(0xad))['removeClass']('on'),$(_0x5a465d(0xad))[_0x5a465d(0xbf)](_0x5a465d(0xbc))[_0x5a465d(0xc4)](),$(_0x5a465d(0xcd))[_0x5a465d(0xc1)](_0x5a465d(0xc9),'visible');});function _0x1ab9(){var _0xa73975=['.board_item','hasClass','.content2','#wrap','.thumb\x20.product_img','.thumb\x20img','displaynone','#reviewReadframe','removeClass','content_image','find','slideUp','css','attr','clone','remove','.bestReview','.bestReviewContainer','background-image','.attached','overflow','html','772682qdYhdF','click','body','.bestReviewContainer\x20.swiper-scrollbar','split','closest','6726sjWOnC','data','#search_date\x20option[value=\x22all\x22]','/exec/front/Board/Get','ajax','2596251CLgWPP','333152NfIDol','json','ready','each','fade-out','80IqILNn','no=','selected','1130KHRSzK','.thumb','#search_key\x20option[value=\x22product\x22]','19263uJOffX','addClass','.review_read','.thumb_img','.bestReviewContainer\x20.swiper-button-prev','param','length','275283tUGOiZ','.thumb_img2','thumbnail_image','.board_contents\x20.more','slideDown','thumb','.reviewReadframe\x20.closeBtn,\x20.reviewReadframe\x20.reviewReadframe_load,\x20.reviewReadframe\x20.headerLine\x20img','.reviewReadframe','img','siblings','13757360acSNQt','.content','querySelectorAll','.bestReviewContainer\x20.swiper-button-next','8ESOljk'];_0x1ab9=function(){return _0xa73975;};return _0x1ab9();}$(_0x5a0b47(0xb5))[_0x5a0b47(0xa5)]>0x0&&$(_0x5a0b47(0xb5))[_0x5a0b47(0xda)](function(){var _0x53872f=_0x5a0b47,_0x491218=$(this),_0x4f92bd=_0x491218['find'](_0x53872f(0xc8)),_0x1a885a=_0x491218[_0x53872f(0xbf)](_0x53872f(0xa7));$thumb_img=_0x491218['find'](_0x53872f(0x9d))[_0x53872f(0xd2)](_0x53872f(0xab));_0x491218[_0x53872f(0xbf)](_0x53872f(0xb9))[_0x53872f(0xb6)](_0x53872f(0xbb))&&_0x491218[_0x53872f(0xbf)](_0x53872f(0x9d))[_0x53872f(0xca)](_0x491218[_0x53872f(0xbf)](_0x53872f(0xba))[_0x53872f(0xc3)]());$thumb_img&&CheckImagefiles($thumb_img)&&_0x1a885a['css'](_0x53872f(0xc7),'url('+$thumb_img+')');var _0x35ac68=_0x491218[_0x53872f(0xd2)](_0x53872f(0xa4))[_0x53872f(0xcf)]('&'),_0x4bd88a=_0x35ac68[0x0]['split'](_0x53872f(0xdd))[0x1];$[_0x53872f(0xd5)]({'url':_0x53872f(0xd4),'dataType':_0x53872f(0xd8),'data':{'no':_0x4bd88a,'board_no':0x4},'success':function(_0x51ae49){var _0x158833=_0x53872f;if(CheckImagefiles2(_0x51ae49[_0x158833(0xd2)][_0x158833(0xa8)])){var _0x41e769=create_element
14180(_0x51ae49[_0x158833(0xd2)][_0x158833(0xa8)])[_0x158833(0xb2)](_0x158833(0xae));image_set2(_0x41e769,_0x1a885a);}var _0x68bda2=create_element(_0x51ae49['data'][_0x158833(0xbe)])[_0x158833(0xb2)](_0x158833(0xae)),_0x5c6c73=create_element(_0x51ae49[_0x158833(0xd2)]['content'])['querySelectorAll'](_0x158833(0xae));image_set(_0x68bda2,_0x4f92bd),image_set(_0x5c6c73,_0x4f92bd),_0x491218[_0x158833(0xbf)](_0x158833(0xa2))['show']();}});});$(_0x5a0b47(0xa9))['on'](_0x5a0b47(0xcc),function(){var _0x1ab36c=_0x5a0b47,_0x225b48=$(this)[_0x1ab36c(0xaf)](_0x1ab36c(0xb1)),_0x44361c=$(this)['siblings'](_0x1ab36c(0xb7));$(this)[_0x1ab36c(0xb6)]('on')?($(this)['removeClass']('on'),_0x44361c['slideUp'](0x190),_0x225b48[_0x1ab36c(0xaa)](0x190),setTimeout(function(){var _0xc5590d=_0x1ab36c;_0x225b48[_0xc5590d(0xbd)](_0xc5590d(0xdb));},0x190)):($(this)[_0x1ab36c(0xa0)]('on'),_0x225b48['addClass']('fade-out'),setTimeout(function(){var _0x315291=_0x1ab36c;_0x225b48[_0x315291(0xc0)](0x190),_0x44361c['slideDown'](0x190);},0xc8));}),$(_0x5a0b47(0x9e))[_0x5a0b47(0xc2)](_0x5a0b47(0xde),!![]),$(_0x5a0b47(0xd3))[_0x5a0b47(0xc2)](_0x5a0b47(0xde),!![]),$(document)[_0x5a0b47(0xd9)](function(){var _0x243fc0=_0x5a0b47;if($(_0x243fc0(0xc5))['length']>0x0)var _0x45f4a4=new Swiper(_0x243fc0(0xc5),{'slidesPerView':0x2,'spaceBetween':0xa,'breakpoints':{0x320:{'slidesPerView':0x3,'spaceBetween':0xa},0x400:{'slidesPerView':0x4,'spaceBetween':0xf},0x5c8:{'slidesPerView':0x5,'spaceBetween':0xf}},'navigation':{'nextEl':_0x243fc0(0xb3),'prevEl':_0x243fc0(0xa3)},'scrollbar':{'el':_0x243fc0(0xce),'draggable':!![]}});}); 14181}); 14182function view_board(data_param) { 14183 function _0x322f(_0x55d436,_0x30da37){var _0x2ca1ca=_0x2ca1();return _0x322f=function(_0x322fa6,_0x2d5e97){_0x322fa6=_0x322fa6-0x9b;var _0x4684ed=_0x2ca1ca[_0x322fa6];return _0x4684ed;},_0x322f(_0x55d436,_0x30da37);}var _0x47f9c8=_0x322f;(function(_0x2d4d6b,_0x14908f){var _0x391e7c=_0x322f,_0x39db2d=_0x2d4d6b();while(!![]){try{var _0x33f396=-parseInt(_0x391e7c(0xa4))/0x1*(parseInt(_0x391e7c(0xa5))/0x2)+parseInt(_0x391e7c(0xa3))/0x3+-parseInt(_0x391e7c(0xb5))/0x4*(-parseInt(_0x391e7c(0xad))/0x5)+-parseInt(_0x391e7c(0xb9))/0x6+parseInt(_0x391e7c(0xa2))/0x7*(-parseInt(_0x391e7c(0xb2))/0x8)+parseInt(_0x391e7c(0xb6))/0x9+-parseInt(_0x391e7c(0xa1))/0xa*(-parseInt(_0x391e7c(0x9f))/0xb);if(_0x33f396===_0x14908f)break;else _0x39db2d['push'](_0x39db2d['shift']());}catch(_0x4c6435){_0x39db2d['push'](_0x39db2d['shift']());}}}(_0x2ca1,0x9e2e6));function _0x2ca1(){var _0x20554c=['find','/review/','css','remove','body','width','prepend','overflow','/product/','/secret.html','5701916RZJgjV','createElement','30DcPKHi','7oSVcUH','1838394fjMJbd','811961fCxCeu','2wsDrRw','ì½ê¸°\x20ê¶íì´\x20ìë\x20ê²ìê¸ì ëë¤.\x20\x20ë¹ë°ë²í¸\x20ì ë ¥\x20ì°½ì¼ë¡\x20ì´ëíìê² ìµëê¹?','frameborder','contentWindow','reviewReadframe','visible','setAttribute','removeClass','5rIyozx','replace','hidden','iframe','.reviewReadframe','2085856OVPsxQ','.reviewReadframe_contents','height','399436iFlYGH','1140930cWEiiu','100%','location','4043352iiaYHW','indexOf','href','/board/review/read.html'];_0x2ca1=function(){return _0x20554c;};return _0x2ca1();}var $iframe=document[_0x47f9c8(0xa0)](_0x47f9c8(0xb0));$iframe[_0x47f9c8(0xab)]('id',_0x47f9c8(0xa9)),$iframe[_0x47f9c8(0xab)](_0x47f9c8(0xa7),'0'),$iframe[_0x47f9c8(0xab)](_0x47f9c8(0xb4),_0x47f9c8(0xb7)),$iframe['style'][_0x47f9c8(0xc2)]='100%',$iframe['src']=_0x47f9c8(0xbc)+data_param,$(_0x47f9c8(0xb3))[_0x47f9c8(0x9b)]($iframe),$('.reviewReadframe')['addClass']('on'),$(_0x47f9c8(0xc1))[_0x47f9c8(0xbf)](_0x47f9c8(0x9c),_0x47f9c8(0xaf)),setTimeout(function(){var _0x56b26c=_0x47f9c8;if($iframe[_0x56b26c(0xa8)]){var _0xfcbb84=$iframe[_0x56b26c(0xa8)][_0x56b26c(0xb8)][_0x56b26c(0xbb)];if(_0xfcbb84[_0x56b26c(0xba)](_0x56b26c(0x9e))!==-0x1)return $(_0x56b26c(0xb1))[_0x56b26c(0xac)]('on'),$(_0x56b26c(0xb1))[_0x56b26c(0xbd)]('#reviewReadframe')[_0x56b26c(0xc0)](),$(_0x56b26c(0xc1))[_0x56b26c(0xbf)]('overflow',_0x56b26c(0xaa)),confirm(_0x56b26c(0xa6))&&(_0xfcbb84=_0xfcbb84[_0x56b26c(0xae)](_0x56b26c(0xbe),_0x56b26c(0x9d)),location[_0x56b26c(0xbb)]=_0xfcbb84),![];}},0x3e8); 14184}
14185function create_element(e) { 14186 var element = document.createElement("div"); 14187 element.innerHTML = e; 14188 return element 14189} 14190function image_set(data, e) { 14191 for (var i = 0; i < data.length; i++) { 14192 var attached_item = document.createElement("li"); 14193 14194 attached_item.classList.add("attached_item"); 14195 data[i].removeAttribute("width"); 14196 attached_item.append(data[i]); 14197 e.append(attached_item); 14198 } 14199} 14200function image_set2(data, e) { 14201 if( data[0].src ){ 14202 e.css("background-image","url("+data[0].src+")"); 14203 } 14204} 14205function CheckImagefiles(fileName) { 14206 var result = false; 14207 if(typeof fileName != "undefined" && fileName != null && fileName != ""){ 14208 var ext = fileName.substring(fileName.lastIndexOf('.') + 1); 14209 if(!ext){ 14210 return result; 14211 } 14212 var imgs = ['gif', 'jpg', 'jpeg', 'png', 'bmp' ,'ico', 'apng']; 14213 ext = ext.toLocaleLowerCase(); 14214 imgs.forEach( function(element) { 14215 if(ext == element){ 14216 result = true; 14217 } 14218 }); 14219 } 14220 return result; 14221} 14222function CheckImagefiles2(fileName) { 14223 var result = false; 14224 if(typeof fileName != "undefined" && fileName != null && fileName != ""){ 14225 var ext = fileName.substring(fileName.lastIndexOf('.') + 1); 14226 if(!ext){ 14227 return result; 14228 } 14229 var imgs = ['gif" height="80" alt="" />', 'jpg" height="80" alt="" />', 'jpeg" height="80" alt="" />', 'png" height="80" alt="" />', 'bmp" height="80" alt="" />' ,'ico" height="80" alt="" />', 'apng" height="80" alt="" />']; 14230 ext = ext.toLocaleLowerCase(); 14231 imgs.forEach( function(element) { 14232 if(ext == element){ 14233 result = true; 14234 } 14235 }); 14236 } 14237 return result; 14238}
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.