{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/list.js/src/index.js","webpack:///./node_modules/list.js/src/utils/events.js","webpack:///./node_modules/list.js/src/utils/classes.js","webpack:///./includes/assets/js/components/user-review/stats.js","webpack:///./includes/assets/js/components/user-review/form.js","webpack:///./includes/assets/js/components/photo-reviews/upload.js","webpack:///./node_modules/list.js/src/utils/get-by-class.js","webpack:///./node_modules/list.js/src/utils/extend.js","webpack:///./node_modules/list.js/src/utils/index-of.js","webpack:///./node_modules/list.js/src/utils/to-array.js","webpack:///./node_modules/list.js/src/utils/to-string.js","webpack:///./node_modules/list.js/src/item.js","webpack:///./includes/assets/js/components/photo-reviews/slider.js","webpack:///./includes/assets/js/main.js","webpack:///./includes/assets/js/components/user-review.js","webpack:///./includes/assets/js/components/user-review/pros-and-cons.js","webpack:///./includes/assets/js/components/user-review/reply.js","webpack:///./includes/assets/js/components/user-review/edit.js","webpack:///./includes/assets/js/components/user-review/voting.js","webpack:///./includes/assets/vendors/like-dislike.js","webpack:///./includes/assets/js/list-builder.js","webpack:///./includes/assets/js/blocks/list-control.js","webpack:///./node_modules/string-natural-compare/natural-compare.js","webpack:///./node_modules/list.js/src/utils/get-attribute.js","webpack:///./node_modules/list.js/src/add-async.js","webpack:///./node_modules/list.js/src/pagination.js","webpack:///./node_modules/list.js/src/parse.js","webpack:///./node_modules/list.js/src/templater.js","webpack:///./node_modules/list.js/src/search.js","webpack:///./node_modules/list.js/src/filter.js","webpack:///./node_modules/list.js/src/sort.js","webpack:///./node_modules/list.js/src/fuzzy-search.js","webpack:///./node_modules/list.js/src/utils/fuzzy.js","webpack:///./includes/assets/js/components/reviews-list.js","webpack:///./includes/assets/js/components/photo-reviews/photo-reviews.js","webpack:///./includes/assets/js/components/photo-reviews/gallery.js","webpack:///./includes/assets/js/components/photo-reviews/modal.js","webpack:///./includes/assets/js/comparison-table.js","webpack:///./includes/assets/js/components/user-reviews-list.js","webpack:///./node_modules/ssr-window/dist/ssr-window.esm.js","webpack:///./node_modules/dom7/dist/dom7.modular.js","webpack:///./node_modules/swiper/js/swiper.esm.bundle.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","naturalSort","getByClass","extend","indexOf","events","toString","classes","getAttribute","toArray","id","options","values","init","self","this","Item","addAsync","initPagination","start","listClass","searchClass","sortClass","page","items","visibleItems","matchingItems","searched","filtered","searchColumns","handlers","valueNames","utils","listContainer","document","getElementById","list","parse","templater","search","filter","sort","fuzzySearch","pagination","update","handler","on","add","il","length","reIndex","toJSON","json","push","callback","added","notCreate","item","show","remove","valueName","found","splice","matchedItems","size","clear","event","off","e","index","trigger","reset","is","matching","hide","window","addEventListener","unbind","removeEventListener","prefix","el","type","fn","capture","re","ClassList","nodeType","Error","classList","arr","array","className","join","toggle","force","has","replace","split","shift","contains","Stats","eventListener","getReviewStat","getReviewedStat","reviewed","jQuery","attr","find","each","reviewedItem","css","transition","width","props","getProps","getRatingStat","review","limit","steps","noRatedMessage","ratingElement","resultElement","that","element","elmentOffsetLeft","offset","left","elementWidth","pageX","originalEvent","touches","toFixed","statWidth","getStatWidth","score","getStatScore","parent","siblings","text","addStatClassesBasedOnScore","val","ii","scoreFloor","Math","floor","removeRatingClasses","isLastParitalIcon","addClass","rating","rounded_rating","roundUpToAny","number","rounding_factor","round","removeClass","match","divisor","statValue","formSubmitted","Form","formValidation","reCaptcha","click","setTimeout","fields","SCRForm","formFields","getRules","formX","inline","onSuccess","reviewForm","target","imageValidation","status","alert","message","preventDefault","submission","errors","method","form_data","ajax","url","scr_ajax","ajax_url","cache","data","processData","contentType","success","results","addon","location","reload","JSON","msgProps","title","Translations","reviewSuccessTitle","description","reviewSuccessDescription","html","getMessageTemplate","setInterval","fail","response","reviewFailTitle","reviewFailDescription","submittingForm","action","post_id","comment_id","methodType","FormData","uploadField","files","x","append","rules","identifier","prompt","email","pros0","cons0","src_recaptcha","ratingRules","SCROptions","global_stats","stat_name","getReviewTemplate","template","addons","pr","required_options","pr_enable","filesCount","uploadedImages","parseInt","pr_require_photo","pr_photo_quantity","allowedFileFormats","maxPhotoSize","pr_photo_size","fileSize","fileType","selectors","photos","addPhotos","maxFilesField","removePhotoLink","uploadHiddenField","photosPreviewGroup","Upload","eventHandlers","photoPreview","removePhoto","getEditFormPhotos","form","attachments","photosHTML","addPhotoHTMl","outerHTML","review_id","_showOrHideAddPhotosField","change","previewGroup","src","URL","createObjectURL","prepend","_getImageHTML","confirm","attachment","attachment_id","post","fadeOut","maxFiles","backendUpload","frame","addImgLink","upload","imgContainer","uploadedImagesGroup","open","wp","media","button","multiple","attachment_url","state","sizes","thumbnail","medium","large","container","single","test","getElementsByClassName","querySelector","querySelectorAll","classElements","els","getElementsByTagName","elsLen","pattern","RegExp","j","source","args","Array","slice","arguments","obj","collection","Function","initValues","_values","newValues","set","visible","elm","parentNode","Swiper","require","default","Slider","initSwiperSlider","sliderThumbs","spaceBetween","slidesPerView","touchRatio","slideToClickedSlide","keyboard","enabled","onlyInViewport","navigation","nextEl","prevEl","thumbs","swiper","watchSlidesProgress","showSlider","addInitialSlides","swiperListeners","reviewID","slides","next","last","prev","first","destroy","sliderHTML","wrapper","innerHTML","removeDoubleArrows","prevSlidesReviewID","nextSlidesReviewID","sliderTop","prependSlide","appendSlide","addDoubleArrows","hidesReviewSlides","translate","thisContext","documentElement","clientWidth","setTranslate","nextReview","prevReview","reverse","slideTo","activeSlide","btnPrev","btnNext","hasClass","removeAttr","UserReview","ListBuilder","PhotoReviews","StarcatReview","one","ready","ProsAndCons","Reply","Edit","Voting","formRules","getRepeater","selector","group","addItem","deleteItem","dropdownX","allowAdditions","duplicateItem","getDuplicateItem","indexedItem","setIndex","reinitiateEvents","placeholderText","updateIndex","setRules","dataAttr","children","field","indexedField","wrapAll","count","updateRules","showForm","thisModule","links","replyLinks","editLinks","formClone","getFormClone","replyLink","author","closest","trim","placeholder","replyto","after","cancelBtn","editForm","getEditForm","editLink","reviewContent","editProps","submitEditForm","save","clone","wrap","replyForm","placeholderContent","getPlaceholderContent","replaceWith","submit","form_action_type","editResult","comment_ID","comment_content","view","ID","editlinks","link","getReviewForm","postID","commentProps","modifyFormForEditing","content","sumbitBtn","cancel","user","website","getModifiedFormforStats","getModifiedFormforProsandCons","getModifiedFormforPhotos","stats","stat","listname","prosandcons","collectionOptions","itemOptions","getProsandConsOptions","prosAndConsField","concat","result","len","noOfForms","likeDislike","initialValue","likes","dislikes","vote","$","defaults","beforeClick","reverseMode","readOnly","likeBtnClass","dislikeBtnClass","activeClass","disabledClass","LikeDislike","opts","btns","activeBtn","btnDown","disable","notActiveBtns","not","enable","getBtn","btnType","error","btn","btnUp","triggerHandler","hasActive","isActive","ListControl","list_config","List","UserReviewsList","dropDownInit","distance","threshold","multiSearch","featureList","sorting","checkExists","filters","selectedItem","reviewCount","$selectedItem","order","alphabet","alphabetIndexMap","alphabetIndexMapLength","isNumberCode","code","naturalCompare","a","b","lengthA","lengthB","aIndex","bIndex","charCodeA","charCodeAt","charCodeB","numStartA","numStartB","numEndA","numEndB","difference","caseInsensitive","toLowerCase","defineProperties","attributes","nodeName","nodeValue","valuesToAdd","refresh","pagingList","pages","ceil","currentPage","innerWindow","outerWindow","right","dotted","addEvent","currentPageItem","dottedLeft","dottedRight","paginationClass","itemElements","parseAsync","itemsToIndex","parseComplete","nodes","childNodes","indexAsync","Templater","itemSource","clearSourceItem","jl","setAttribute","getItemSource","cloneNode","exec","tbody","createElement","firstChild","div","setValue","v","newItem","removeAttribute","removeChild","appendChild","hasChildNodes","columns","searchString","customSearch","prepare","resetList","setOptions","setColumns","setSearchString","tmpColumn","k","kl","column","searchMethod","str","searchStart","searchComplete","srcElement","filterStart","filterComplete","filterFunction","buttons","getOrder","predefinedOrder","getInSensitive","insensitive","setOrder","currentTarget","sortFunction","customSortFunction","multi","itemA","itemB","sortStart","sortComplete","fuzzy","searchArguments","foundArgument","searchArgument","Match_Location","Match_Distance","Match_Threshold","loc","q","charAt","match_bitapScore_","accuracy","proximity","abs","score_threshold","best_loc","min","lastIndexOf","bin_min","bin_mid","matchmask","last_rd","bin_max","max","finish","rd","charMatch","ReviewsList","nonce","clickCounter","ajaxRequest","my_scr_ajax_object","Gallery","PhotosReview","Modal","triggerOnce","eventHandler","showGallery","goBackToGallery","onReviewPhotosClick","onGalleryPhotosClick","onGalleryPhotosPreviewClick","stopPropagation","addRestOfThePhotosOnce","addRestOfThePhotos","shownGallery","gallery","shownCount","totalCount","from","placeholdersHTML","getCardPlaceholders","setImagesFromPlaceholder","singleReviewPhotos","singleGalleryPhotos","images","cardPlaceholder","card","image_src","sum","loopLimit","cardHTML","getCardPlaceholderHtml","active","closeSelector","appendTo","close","focus","blur","productsTable","table","features","featuresWidth","featureItems","tableHeight","height","productsWrapper","tableColumns","products","productsNumber","productWidth","eq","productsTopInfo","singleProductTopInfo","productCloseBtn","featuresTopInfo","featuresColumn","topInfoHeight","innerHeight","leftScrolling","filterBtn","resetBtn","filtering","selectedproductsNumber","filterActive","productsTopHeights","map","outerHeight","productsMaxHeight","apply","productsSearchContainer","bindEvents","requestAnimationFrame","updateLeftScrolling","product","parents","upadteFilterBtn","showSelection","resetSelection","updateSlider","noOfProducts","updateProductTable","search_data","ajax_nonce","onSelect","productContent","productElement","before","onResultsClose","image_url","createSCRProductStatList","refreshProductTable","scr_stat_table_column","getSCRTableColumns","productInfos","lastIndex","$parentElement","$parentProduct","singleProductStats","dataStat","table_stat_name","inArray","get_user_stats","user_stats","overall_stat","get_overall_stat","rating_view","dom","stat_list","review_stats","scr_ct_feature_columns","outerWidth","scrollLeft","checkMQ","setTranformX","updateNavigationVisibility","updateTopScrolling","scrollTop","offsetTop","top","updateProperties","filterProducts","resetProductsVisibility","selectedProducts","numberProducts","checkResize","containerOffsetLeft","leftTranslate","bool","animate","comparisonTables","windowResize","forEach","getComputedStyle","getPropertyValue","transform","category","isObject","constructor","keys","doc","ssrDocument","body","activeElement","createEvent","initEvent","style","createElementNS","importNode","hash","host","hostname","href","origin","pathname","protocol","win","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","Image","Date","screen","clearTimeout","matchMedia","Dom7","context","tempParent","toCreate","unique","uniqueArray","Class","Methods","toggleClass","attrs","attrName","dom7ElementDataStorage","dataKey","elStyle","webkitTransform","duration","webkitTransitionDuration","transitionDuration","eventType","targetSelector","listener","handleLiveEvent","eventData","dom7EventData","unshift","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","fireCallBack","includeMargins","styles","offsetWidth","parseFloat","offsetHeight","box","getBoundingClientRect","clientTop","clientLeft","scrollY","scrollX","prop","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","insertBefore","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","foundElements","toAdd","methodName","Utils","nextTick","delay","now","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","query","params","param","urlToParse","paramsPart","decodeURIComponent","to","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","observer","passiveListener","supportsPassive","gestures","SwiperClass","eventsListeners","eventName","priority","onceHandler","f7proxy","isArray","instanceParams","instance","moduleName","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","components","use","proto","static","install","installModule","updateSize","$el","clientHeight","isHorizontal","isVertical","updateSlides","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","previousSlidesLength","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","slidesNumberEvenToRows","slideSize","slidePosition","prevSlideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","slidesPerColumnFill","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","swiperSlideSize","centeredSlides","slidesPerGroupSkip","newSlidesGrid","effect","setWrapperSize","slidesGridItem","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","emit","watchOverflow","checkOverflow","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","progress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","getTranslate","virtualTranslate","currentTranslate","byController","wrapperEl","newProgress","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","destroyed","initialSlide","allowSlideNext","allowSlidePrev","direction","transitionStart","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","normalizedTranslate","normalizedSnapGrid","prevIndex","prevSnap","slideReset","slideToClosest","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","diff","loopDestroy","grabCursor","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","manipulation","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","platform","ua","device","ios","android","androidChrome","desktop","iphone","ipod","ipad","edge","ie","firefox","macos","windows","cordova","phonegap","electron","screenWidth","screenHeight","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","$targetEl","touchEventsTarget","isTouchEvent","which","isTouched","isMoved","noSwiping","noSwipingSelector","noSwipingClass","allowClick","swipeHandler","currentX","targetTouches","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","PI","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","touchEndTime","timeDiff","lastClickTime","currentPos","freeModeMomentum","lastMoveEvent","pop","velocityEvent","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","freeModeMomentumBounceRatio","needsLoopFix","freeModeMomentumBounce","freeModeSticky","once","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","updateOnWindowResize","uniqueNavElements","preloadImages","updateOnImagesReady","passiveListeners","containerModifierClass","wrapperClass","prototypes","dir","attachEvents","touchEvents","onClick","move","end","passive","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","directionChanged","needsReLoop","changeDirection","points","point","minRatio","substr","innerWidth","wasLocked","lastSlidePosition","addClasses","classNames","suffixes","suffix","removeClasses","loadImage","imageEl","srcset","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","super","prototypeGroup","protoMethod","moduleParamName","swiperParams","useModulesParams","passedParams","swipers","containerEl","newParams","shadowRoot","touchEventsTouch","touchEventsDesktop","clickTimeout","useModules","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","slideEl","deleteInstance","cleanStyles","deleteProps","newDefaults","Device$1","Support$1","support","isEdge","isSafari","isWebView","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","func","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","observe","childList","characterData","observers","observeParents","containerParents","attach","observeSlideChildren","disconnect","Observer$1","Virtual","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","prependIndexes","appendIndexes","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","Virtual$1","overwriteParams","Keyboard","kc","keyCode","charCode","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","inView","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","handle","Keyboard$1","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","isSupported","implementation","hasFeature","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","mouseEntered","mousewheel","eventsTarged","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent","sign","ignoreWheelEvents","sensitivity","timeout","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","raw","animateSlider","releaseScroll","getTime","handleMouseEnter","handleMouseLeave","Navigation","$nextEl","$prevEl","lockClass","onNextClick","onPrevClick","Pagination","current","total","paginationType","bullets","firstIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","progressbarFillClass","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","opacity","divider","moveDivider","display","clientX","clientY","dragStartPos","positionRatio","getPointerPosition","setDragPosition","dragTimeout","snapOnRelease","activeListener","onDragStart","onDragMove","onDragEnd","$swiperEl","dragClass","dragEl","draggable","enableDraggable","disableDraggable","Parallax","currentOpacity","currentScale","parallax","setTransform","parallaxEl","$parallaxEl","parallaxDuration","Zoom","x1","y1","x2","y2","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","getDistanceBetweenTouches","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","scaleMove","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","out","in","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomedSlideClass","activeListenerWithCapture","slideSelector","onGestureStart","onGestureChange","onGestureEnd","Lazy","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","imageIndex","background","$pictureEl","sourceIndex","sourceEl","$source","preloaderClass","slideOriginalIndex","originalSlide","loadInSlide","duplicatedSlide","slideExist","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Controller","LinearSpline","binarySearch","guess","i1","i3","interpolate","controller","spline","controlled","control","controlledTranslate","setControlledTranslate","by","getInterpolateFunction","inverse","setControlledTransition","a11y","makeElFocusable","makeElNotFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","notification","liveRegion","bulletEl","$bulletEl","paginationBulletMessage","onEnterKey","History","hashNavigation","paths","getPathValues","scrollToSlide","setHistoryPopState","pathArray","part","slugify","includes","currentState","HashNavigation","newHash","watchState","onHashCange","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","waitForTransition","onTransitionEnd","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","Cube","swiperWidth","swiperHeight","cubeEffect","$cubeShadowEl","wrapperRotate","shadow","slideAngle","tz","slideShadows","shadowBefore","shadowAfter","shadowOffset","shadowScale","shadowAngle","sin","cos","scale1","scale2","zFactor","Flip","flipEffect","limitRotation","rotateY","rotateX","zIndex","Coverflow","coverflowEffect","center","rotate","depth","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","prefixedPointerEvents","perspectiveOrigin","Thumbs","thumbsParams","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","initial","autoScrollOffset","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","hideOnClick","isHidden","render","loadOnTransitionStart","notificationClass","updateNavigation","updatePagination","setHistory","setHash","disableOnInteraction","pause","visibilityState","onVisibilityChange"],"mappings":"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","file":"main.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","var naturalSort = require('string-natural-compare'),\n getByClass = require('./utils/get-by-class'),\n extend = require('./utils/extend'),\n indexOf = require('./utils/index-of'),\n events = require('./utils/events'),\n toString = require('./utils/to-string'),\n classes = require('./utils/classes'),\n getAttribute = require('./utils/get-attribute'),\n toArray = require('./utils/to-array');\n\nmodule.exports = function(id, options, values) {\n\n var self = this,\n init,\n Item = require('./item')(self),\n addAsync = require('./add-async')(self),\n initPagination = require('./pagination')(self);\n\n init = {\n start: function() {\n self.listClass = \"list\";\n self.searchClass = \"search\";\n self.sortClass = \"sort\";\n self.page = 10000;\n self.i = 1;\n self.items = [];\n self.visibleItems = [];\n self.matchingItems = [];\n self.searched = false;\n self.filtered = false;\n self.searchColumns = undefined;\n self.handlers = { 'updated': [] };\n self.valueNames = [];\n self.utils = {\n getByClass: getByClass,\n extend: extend,\n indexOf: indexOf,\n events: events,\n toString: toString,\n naturalSort: naturalSort,\n classes: classes,\n getAttribute: getAttribute,\n toArray: toArray\n };\n\n self.utils.extend(self, options);\n\n self.listContainer = (typeof(id) === 'string') ? document.getElementById(id) : id;\n if (!self.listContainer) { return; }\n self.list = getByClass(self.listContainer, self.listClass, true);\n\n self.parse = require('./parse')(self);\n self.templater = require('./templater')(self);\n self.search = require('./search')(self);\n self.filter = require('./filter')(self);\n self.sort = require('./sort')(self);\n self.fuzzySearch = require('./fuzzy-search')(self, options.fuzzySearch);\n\n this.handlers();\n this.items();\n this.pagination();\n\n self.update();\n },\n handlers: function() {\n for (var handler in self.handlers) {\n if (self[handler]) {\n self.on(handler, self[handler]);\n }\n }\n },\n items: function() {\n self.parse(self.list);\n if (values !== undefined) {\n self.add(values);\n }\n },\n pagination: function() {\n if (options.pagination !== undefined) {\n if (options.pagination === true) {\n options.pagination = [{}];\n }\n if (options.pagination[0] === undefined){\n options.pagination = [options.pagination];\n }\n for (var i = 0, il = options.pagination.length; i < il; i++) {\n initPagination(options.pagination[i]);\n }\n }\n }\n };\n\n /*\n * Re-parse the List, use if html have changed\n */\n this.reIndex = function() {\n self.items = [];\n self.visibleItems = [];\n self.matchingItems = [];\n self.searched = false;\n self.filtered = false;\n self.parse(self.list);\n };\n\n this.toJSON = function() {\n var json = [];\n for (var i = 0, il = self.items.length; i < il; i++) {\n json.push(self.items[i].values());\n }\n return json;\n };\n\n\n /*\n * Add object to list\n */\n this.add = function(values, callback) {\n if (values.length === 0) {\n return;\n }\n if (callback) {\n addAsync(values, callback);\n return;\n }\n var added = [],\n notCreate = false;\n if (values[0] === undefined){\n values = [values];\n }\n for (var i = 0, il = values.length; i < il; i++) {\n var item = null;\n notCreate = (self.items.length > self.page) ? true : false;\n item = new Item(values[i], undefined, notCreate);\n self.items.push(item);\n added.push(item);\n }\n self.update();\n return added;\n };\n\n\tthis.show = function(i, page) {\n\t\tthis.i = i;\n\t\tthis.page = page;\n\t\tself.update();\n return self;\n\t};\n\n /* Removes object from list.\n * Loops through the list and removes objects where\n * property \"valuename\" === value\n */\n this.remove = function(valueName, value, options) {\n var found = 0;\n for (var i = 0, il = self.items.length; i < il; i++) {\n if (self.items[i].values()[valueName] == value) {\n self.templater.remove(self.items[i], options);\n self.items.splice(i,1);\n il--;\n i--;\n found++;\n }\n }\n self.update();\n return found;\n };\n\n /* Gets the objects in the list which\n * property \"valueName\" === value\n */\n this.get = function(valueName, value) {\n var matchedItems = [];\n for (var i = 0, il = self.items.length; i < il; i++) {\n var item = self.items[i];\n if (item.values()[valueName] == value) {\n matchedItems.push(item);\n }\n }\n return matchedItems;\n };\n\n /*\n * Get size of the list\n */\n this.size = function() {\n return self.items.length;\n };\n\n /*\n * Removes all items from the list\n */\n this.clear = function() {\n self.templater.clear();\n self.items = [];\n return self;\n };\n\n this.on = function(event, callback) {\n self.handlers[event].push(callback);\n return self;\n };\n\n this.off = function(event, callback) {\n var e = self.handlers[event];\n var index = indexOf(e, callback);\n if (index > -1) {\n e.splice(index, 1);\n }\n return self;\n };\n\n this.trigger = function(event) {\n var i = self.handlers[event].length;\n while(i--) {\n self.handlers[event][i](self);\n }\n return self;\n };\n\n this.reset = {\n filter: function() {\n var is = self.items,\n il = is.length;\n while (il--) {\n is[il].filtered = false;\n }\n return self;\n },\n search: function() {\n var is = self.items,\n il = is.length;\n while (il--) {\n is[il].found = false;\n }\n return self;\n }\n };\n\n this.update = function() {\n var is = self.items,\n\t\t\til = is.length;\n\n self.visibleItems = [];\n self.matchingItems = [];\n self.templater.clear();\n for (var i = 0; i < il; i++) {\n if (is[i].matching() && ((self.matchingItems.length+1) >= self.i && self.visibleItems.length < self.page)) {\n is[i].show();\n self.visibleItems.push(is[i]);\n self.matchingItems.push(is[i]);\n } else if (is[i].matching()) {\n self.matchingItems.push(is[i]);\n is[i].hide();\n } else {\n is[i].hide();\n }\n }\n self.trigger('updated');\n return self;\n };\n\n init.start();\n};\n","var bind = window.addEventListener ? 'addEventListener' : 'attachEvent',\n unbind = window.removeEventListener ? 'removeEventListener' : 'detachEvent',\n prefix = bind !== 'addEventListener' ? 'on' : '',\n toArray = require('./to-array');\n\n/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el, NodeList, HTMLCollection or Array\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\n\nexports.bind = function(el, type, fn, capture){\n el = toArray(el);\n for ( var i = 0; i < el.length; i++ ) {\n el[i][bind](prefix + type, fn, capture || false);\n }\n};\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el, NodeList, HTMLCollection or Array\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\n\nexports.unbind = function(el, type, fn, capture){\n el = toArray(el);\n for ( var i = 0; i < el.length; i++ ) {\n el[i][unbind](prefix + type, fn, capture || false);\n }\n};\n","/**\n * Module dependencies.\n */\n\nvar index = require('./index-of');\n\n/**\n * Whitespace regexp.\n */\n\nvar re = /\\s+/;\n\n/**\n * toString reference.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Wrap `el` in a `ClassList`.\n *\n * @param {Element} el\n * @return {ClassList}\n * @api public\n */\n\nmodule.exports = function(el){\n return new ClassList(el);\n};\n\n/**\n * Initialize a new ClassList for `el`.\n *\n * @param {Element} el\n * @api private\n */\n\nfunction ClassList(el) {\n if (!el || !el.nodeType) {\n throw new Error('A DOM element reference is required');\n }\n this.el = el;\n this.list = el.classList;\n}\n\n/**\n * Add class `name` if not already present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.add = function(name){\n // classList\n if (this.list) {\n this.list.add(name);\n return this;\n }\n\n // fallback\n var arr = this.array();\n var i = index(arr, name);\n if (!~i) arr.push(name);\n this.el.className = arr.join(' ');\n return this;\n};\n\n/**\n * Remove class `name` when present, or\n * pass a regular expression to remove\n * any which match.\n *\n * @param {String|RegExp} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.remove = function(name){\n // classList\n if (this.list) {\n this.list.remove(name);\n return this;\n }\n\n // fallback\n var arr = this.array();\n var i = index(arr, name);\n if (~i) arr.splice(i, 1);\n this.el.className = arr.join(' ');\n return this;\n};\n\n\n/**\n * Toggle class `name`, can force state via `force`.\n *\n * For browsers that support classList, but do not support `force` yet,\n * the mistake will be detected and corrected.\n *\n * @param {String} name\n * @param {Boolean} force\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.toggle = function(name, force){\n // classList\n if (this.list) {\n if (\"undefined\" !== typeof force) {\n if (force !== this.list.toggle(name, force)) {\n this.list.toggle(name); // toggle again to correct\n }\n } else {\n this.list.toggle(name);\n }\n return this;\n }\n\n // fallback\n if (\"undefined\" !== typeof force) {\n if (!force) {\n this.remove(name);\n } else {\n this.add(name);\n }\n } else {\n if (this.has(name)) {\n this.remove(name);\n } else {\n this.add(name);\n }\n }\n\n return this;\n};\n\n/**\n * Return an array of classes.\n *\n * @return {Array}\n * @api public\n */\n\nClassList.prototype.array = function(){\n var className = this.el.getAttribute('class') || '';\n var str = className.replace(/^\\s+|\\s+$/g, '');\n var arr = str.split(re);\n if ('' === arr[0]) arr.shift();\n return arr;\n};\n\n/**\n * Check if class `name` is present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.has =\nClassList.prototype.contains = function(name){\n return this.list ? this.list.contains(name) : !! ~index(this.array(), name);\n};\n","var Stats = {\r\n init: function () {\r\n console.log(\"Stats JS Loaded !!!\");\r\n this.eventListener();\r\n },\r\n\r\n eventListener: function () {\r\n this.getReviewStat();\r\n this.getReviewedStat();\r\n },\r\n\r\n getReviewedStat: function () {\r\n // Animating Reviewed Stat\r\n var reviewed = jQuery(\".reviewed-list\");\r\n var animate = reviewed.attr(\"data-animate\");\r\n\r\n if (animate == \"1\") {\r\n reviewed.find(\".reviewed-item\").each(function (i) {\r\n var reviewedItem = jQuery(this);\r\n var value = reviewedItem.find(\"input[name]\").attr(\"value\");\r\n\r\n reviewedItem\r\n .find(\".stars-result\")\r\n .css({ transition: \"width 1s\", width: value + \"%\" });\r\n reviewedItem\r\n .find(\".bars-result\")\r\n .css({ transition: \"width 1s\", width: value + \"%\" });\r\n });\r\n }\r\n },\r\n\r\n getReviewStat: function () {\r\n var props = Stats.getProps();\r\n\r\n this.getRatingStat(\".review-item-stars\", \".stars-result\", props);\r\n this.getRatingStat(\r\n \".review-item-bars .bars-wrapper\",\r\n \".bars-result\",\r\n props\r\n );\r\n },\r\n\r\n getProps: function () {\r\n var review = jQuery(\".review-list\");\r\n return {\r\n type: review.attr(\"data-type\"),\r\n limit: review.attr(\"data-limit\"),\r\n steps: review.attr(\"data-steps\"),\r\n noRatedMessage: review.attr(\"data-no-rated-message\"),\r\n };\r\n },\r\n\r\n getRatingStat: function (ratingElement, resultElement, props) {\r\n var that = this;\r\n jQuery(ratingElement)\r\n .on(\"mousemove touchmove\", function (e) {\r\n var element = jQuery(this);\r\n var elmentOffsetLeft = element.offset().left;\r\n var pageX = e.pageX || e.originalEvent.touches[0].pageX;\r\n var elementWidth = (\r\n ((pageX - elmentOffsetLeft) / element.width()) *\r\n 100\r\n ).toFixed();\r\n\r\n if (elementWidth <= 0) {\r\n elementWidth = 0;\r\n }\r\n if (elementWidth > 100) {\r\n elementWidth = 100;\r\n }\r\n\r\n var statWidth = Stats.getStatWidth(elementWidth, props);\r\n var score = Stats.getStatScore(statWidth, props);\r\n\r\n element = props.type == \"bar\" ? element.parent() : element;\r\n\r\n // Update Label Score\r\n element\r\n // .siblings(\".review-item-label\")\r\n .siblings(\".review-item-label__score\")\r\n .text(score);\r\n\r\n // Update Width\r\n element.find(resultElement).width(statWidth + \"%\");\r\n\r\n // Update icons\r\n that.addStatClassesBasedOnScore(element, score);\r\n\r\n // Update Titlescore if it rendered\r\n element\r\n // .attr(\"title\", score + \" / \" + props.limit)\r\n .find(\".bars-score\")\r\n .text(score + \" / \" + props.limit);\r\n\r\n // Update Result\r\n element.attr(\"result\", statWidth);\r\n })\r\n .on(\"mouseleave\", function () {\r\n var element = jQuery(this);\r\n element = props.type == \"bar\" ? element.parent() : element;\r\n var value = element.find(\"input\").val();\r\n var score = Stats.getStatScore(value, props);\r\n\r\n // Update Score\r\n element\r\n // .siblings(\".review-item-label\")\r\n .siblings(\".review-item-label__score\")\r\n .text(score);\r\n\r\n // Update Width\r\n element.find(resultElement).width(value + \"%\");\r\n\r\n // Update icons\r\n that.addStatClassesBasedOnScore(element, score);\r\n\r\n // Update Title and score\r\n score =\r\n score != 0\r\n ? score + \" / \" + props.limit\r\n : props.noRatedMessage;\r\n element\r\n .attr(\"title\", score)\r\n .find(\".bars-score\")\r\n .text(score);\r\n\r\n // Update Result\r\n element.attr(\"result\", value);\r\n })\r\n .on(\"click touchmove\", function () {\r\n var element = jQuery(this);\r\n element = props.type == \"bar\" ? element.parent() : element;\r\n var value = element.attr(\"result\");\r\n\r\n // Update Hidden Input Value\r\n element.find(\"input\").val(value);\r\n });\r\n },\r\n\r\n addStatClassesBasedOnScore: function(item, score){\r\n var that = this;\r\n console.log(\"addStatClassesBasedOnScore() score: \" + score);\r\n var ii = 1;\r\n\r\n // var score = 3.6; // test only\r\n var scoreFloor = Math.floor(score);\r\n\r\n \r\n // console.log(\"score: \" + score);\r\n // console.log(\"scoreFloor: \" + scoreFloor);\r\n\r\n // Remove previous rating classes\r\n that.removeRatingClasses(item);\r\n \r\n item.find('.scr-icon').each(function(){\r\n var isLastParitalIcon = (scoreFloor < ii) && (ii == scoreFloor + 1); // the last icon which is partial\r\n\r\n\r\n if(ii <= scoreFloor){\r\n jQuery(this).addClass('rating-100');\r\n } else if(isLastParitalIcon){ \r\n // console.log(\"else if --- ii: \" + ii);\r\n var rating = (score - scoreFloor) * 100;\r\n var rounded_rating = that.roundUpToAny(rating, 25);\r\n jQuery(this).addClass('rating-' + rounded_rating);\r\n }\r\n \r\n ii++;\r\n });\r\n },\r\n\r\n roundUpToAny:function(number, rounding_factor)\r\n {\r\n return Math.round(number / rounding_factor) * rounding_factor;\r\n },\r\n\r\n removeRatingClasses(item){\r\n item.find('.scr-icon').removeClass (function (index, className) {\r\n return (className.match (/(^|\\s)rating-\\S+/g) || []).join(' ');\r\n });\r\n },\r\n\r\n getStatWidth: function (elementWidth, props) {\r\n var divisor, statWidth;\r\n\r\n switch (props.steps) {\r\n case \"full\":\r\n divisor = props.limit == 5 ? 20 : 10;\r\n statWidth = Math.round(elementWidth / divisor) * divisor;\r\n break;\r\n\r\n case \"half\":\r\n divisor = props.limit == 5 ? 10 : 5;\r\n statWidth = Math.round(elementWidth / divisor) * divisor;\r\n break;\r\n\r\n case \"precise\":\r\n statWidth = elementWidth;\r\n break;\r\n\r\n default:\r\n // Default is Star 5\r\n divisor = props.limit == 5 ? 20 : 10;\r\n statWidth = Math.round(elementWidth / divisor) * divisor;\r\n }\r\n\r\n return statWidth;\r\n },\r\n\r\n getStatScore: function (statValue, props) {\r\n var score;\r\n\r\n score = statValue / (100 / props.limit);\r\n score = props.steps == \"precise\" ? score.toFixed(1) : score;\r\n\r\n return score;\r\n },\r\n};\r\n\r\nmodule.exports = Stats;\r\n","formSubmitted = false;\r\n\r\nvar Form = {\r\n init: function () {\r\n this.eventListener();\r\n console.log(\"formSubmitted\" + formSubmitted);\r\n console.log(\"Submission JS Loaded !!!\");\r\n },\r\n\r\n eventListener: function () {\r\n this.formValidation();\r\n this.reCaptcha();\r\n },\r\n\r\n reCaptcha: function () {\r\n console.log(\"recAptcha () \");\r\n jQuery(\"form.scr-user-review\").removeClass(\"active\");\r\n jQuery(\"form.scr-user-review:visible\").addClass(\"active\");\r\n jQuery(\".edit_link\").click(function () {\r\n setTimeout(function () {\r\n jQuery(\"form.scr-user-review\").removeClass(\"active\");\r\n jQuery(\"form.scr-user-review:visible\").addClass(\"active\");\r\n }, 1000);\r\n });\r\n },\r\n\r\n formValidation: function (fields) {\r\n var SCRForm = jQuery(\".scr-user-review\");\r\n var formFields = fields ? fields : Form.getRules();\r\n // console.log(\"*** formFields ***\");\r\n // console.log(formFields);\r\n SCRForm.formX({\r\n fields: formFields,\r\n inline: true,\r\n on: \"blur\",\r\n onSuccess: function (event, fields) {\r\n // get current review Form\r\n var reviewForm = jQuery(event.target);\r\n var imageValidation = Form.imageValidation(reviewForm);\r\n if (imageValidation.status === \"failed\") {\r\n alert(imageValidation.message);\r\n return false;\r\n }\r\n event.preventDefault();\r\n if (formSubmitted) {\r\n return;\r\n }\r\n formSubmitted = true;\r\n Form.submission(reviewForm, fields);\r\n },\r\n errors: {\r\n method: \"The method you called is not defined.\",\r\n },\r\n // onFailure: function (formErrors, fields) {\r\n // console.log(\"On Failure\");\r\n // console.log(formErrors);\r\n // console.log(fields);\r\n // },\r\n });\r\n },\r\n\r\n submission: function (SCRForm, fields) {\r\n var form_data = Form.getProps(SCRForm, fields);\r\n // return false;\r\n SCRForm.find(\".submit.button\").addClass(\"loading\");\r\n // Ajax Post Submiting\r\n jQuery\r\n .ajax({\r\n type: \"post\",\r\n url: scr_ajax.ajax_url,\r\n cache: false,\r\n data: form_data,\r\n processData: false, // Preventing default data parse behavior\r\n contentType: false,\r\n success: function (results) {\r\n // Photo Reviews json response\r\n if (results.addon === \"SCR_PR\") {\r\n if (results.status === \"failed\") {\r\n alert(results.message);\r\n // Reloading the page\r\n window.location.reload();\r\n return false;\r\n }\r\n }\r\n results = JSON.parse(results);\r\n\r\n // Success Message\r\n var msgProps = {\r\n type: \"positive\",\r\n title: Translations.reviewSuccessTitle,\r\n description: Translations.reviewSuccessDescription,\r\n };\r\n\r\n SCRForm.html(Form.getMessageTemplate(msgProps));\r\n\r\n // Reviewed item prepending to Reviews List\r\n // jQuery(\"#scr-cat-collection\").prepend(\r\n // Form.getReviewTemplate(props.title, props.description)\r\n // );\r\n\r\n // Reloading the page\r\n setInterval(\"window.location.reload()\", 5000);\r\n },\r\n })\r\n .fail(function (response) {\r\n console.log(\"!!! Submision Failed !!!\");\r\n console.log(response);\r\n // Fail Message\r\n var msgProps = {\r\n type: \"negative\",\r\n title: Translations.reviewFailTitle,\r\n description: Translations.reviewFailDescription,\r\n };\r\n SCRForm.html(Form.getMessageTemplate(msgProps));\r\n\r\n // Reloading the page\r\n setInterval(\"window.location.reload()\", 5000);\r\n }, JSON);\r\n },\r\n\r\n getProps: function (submittingForm, fields) {\r\n fields.action = submittingForm.attr(\"action\");\r\n fields.type = submittingForm.attr(\"method\");\r\n fields.post_id = submittingForm.attr(\"post_id\");\r\n fields.comment_id = submittingForm.attr(\"data-comment-id\");\r\n fields.methodType = submittingForm.attr(\"data-method\");\r\n\r\n var form_data = new FormData();\r\n var uploadField = document.getElementById(\"scr_pr_image_upload\");\r\n var files = uploadField ? uploadField.files : [];\r\n\r\n console.log(\"Files Length : \");\r\n console.log(files.length);\r\n\r\n // Appending Uploaded Image form Datas\r\n for (var x = 0; x < files.length; x++) {\r\n form_data.append(\"files[]\", files[x]);\r\n }\r\n\r\n // Appending Semantic Validated fields into form Data\r\n for (var key in fields) {\r\n form_data.append(key, fields[key]);\r\n }\r\n\r\n return form_data;\r\n },\r\n\r\n getRules: function () {\r\n var rules = {\r\n name: {\r\n identifier: \"name\",\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please enter your Name\",\r\n },\r\n ],\r\n },\r\n email: {\r\n identifier: \"email\",\r\n rules: [\r\n {\r\n type: \"email\",\r\n prompt: \"Please enter your E-mail\",\r\n },\r\n ],\r\n },\r\n // website: {\r\n // identifier: \"website\",\r\n // rules: [\r\n // {\r\n // type: \"empty\",\r\n // prompt: \"Please enter your Website URL\",\r\n // },\r\n // ],\r\n // },\r\n title: {\r\n identifier: \"title\",\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please enter your title\",\r\n },\r\n ],\r\n },\r\n description: {\r\n identifier: \"description\",\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please enter your description\",\r\n },\r\n ],\r\n },\r\n\r\n pros0: {\r\n identifier: \"pros[0]\",\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please select or type a pro\",\r\n },\r\n ],\r\n },\r\n\r\n cons0: {\r\n identifier: \"cons[0]\",\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please select or type a con\",\r\n },\r\n ],\r\n },\r\n\r\n src_recaptcha: {\r\n identifier: \"src_recaptcha\",\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please verify the reCaptcha\",\r\n },\r\n ],\r\n },\r\n };\r\n\r\n rules = Form.ratingRules(rules);\r\n\r\n return rules;\r\n },\r\n\r\n ratingRules: function (rules) {\r\n if (SCROptions.global_stats) {\r\n jQuery(SCROptions.global_stats).each(function (index, item) {\r\n // var identifier = \"scores[\" + item.stat_name.toLowerCase() + \"]\";\r\n var identifier = \"scr-stat-rating-\" + index;\r\n rules[identifier] = {\r\n identifier: identifier,\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please rate \" + item.stat_name,\r\n },\r\n {\r\n type: \"regExp[/^[1-9]+[0-9]*$/]\",\r\n prompt: \"Please rate \" + item.stat_name,\r\n },\r\n ],\r\n };\r\n });\r\n }\r\n return rules;\r\n },\r\n\r\n getMessageTemplate: function (props) {\r\n var message = '
';\r\n message += '
';\r\n message += props.title;\r\n message += \"
\";\r\n message += \"

\" + props.description + \"

\";\r\n message += \"
\";\r\n\r\n return message;\r\n },\r\n\r\n getReviewTemplate: function (title, description) {\r\n var template =\r\n '
';\r\n template += '< div class=\"scr-review-card\" > ';\r\n template += '
' + title + \"
\";\r\n template += '
' + description + \"
\";\r\n template += \"
\";\r\n\r\n return template;\r\n },\r\n imageValidation: function (SCRForm) {\r\n /**\r\n * check if photo review is active or not.\r\n * If activate then only validate the attachement, based on settings.else no need to validate.\r\n *\r\n * */\r\n if (\r\n !SCROptions.addons.pr ||\r\n SCROptions.required_options.pr_enable == 0\r\n ) {\r\n return true;\r\n }\r\n\r\n var filesCount = 0;\r\n var files = [];\r\n var uploadField = document.getElementById(\"scr_pr_image_upload\");\r\n files = uploadField ? uploadField.files : [];\r\n filesCount = files.length;\r\n\r\n var uploadedImageGroup = SCRForm.find(\r\n \".field .images.scr_pr_uploaded_image_group\"\r\n );\r\n var uploadedImages = uploadedImageGroup.find(\".deleteable.image\")\r\n .length;\r\n\r\n filesCount = parseInt(uploadedImages) + parseInt(filesCount);\r\n\r\n if (SCROptions.required_options.pr_require_photo == 1) {\r\n if (filesCount == 0 && uploadedImages == 0) {\r\n return {\r\n status: \"failed\",\r\n message: \"Photo is Required\",\r\n };\r\n }\r\n }\r\n\r\n // Checking Files Quantities\r\n if (filesCount > SCROptions.required_options.pr_photo_quantity) {\r\n return {\r\n status: \"failed\",\r\n message:\r\n \"Maximum number of files allowed is \" +\r\n SCROptions.required_options.pr_photo_quantity,\r\n };\r\n }\r\n\r\n var allowedFileFormats = [\r\n \"image/jpg\",\r\n \"image/jpeg\",\r\n \"image/bmp\",\r\n \"image/png\",\r\n \"image/gif\",\r\n ];\r\n\r\n // photo max file size checking\r\n var maxPhotoSize = SCROptions.required_options.pr_photo_size;\r\n for (ii = 0; ii < files.length; ii++) {\r\n var size = files[ii].size;\r\n var fileSize = Math.round(size / 1024);\r\n var fileType = files[ii].type;\r\n if (fileSize > maxPhotoSize) {\r\n return {\r\n status: \"failed\",\r\n message: \"Max size allowed: \" + maxPhotoSize + \"kB\",\r\n };\r\n }\r\n\r\n if (allowedFileFormats.indexOf(fileType) == -1) {\r\n return {\r\n status: \"failed\",\r\n message: \"Only JPG, JPEG, BMP, PNG and GIF are allowed\",\r\n };\r\n }\r\n }\r\n\r\n return {\r\n status: \"success\",\r\n message: \"Pass the attachment validations\",\r\n };\r\n },\r\n};\r\n\r\nmodule.exports = Form;\r\n","var selectors = {\r\n photos: \".scr_pr_uploaded_image_group .deleteable.image\",\r\n addPhotos: \".add-photos\",\r\n maxFilesField: \"#scr_pr_max_files\",\r\n removePhotoLink: \".scr_pr_uploaded_image_group .deleteable.image a\",\r\n uploadHiddenField: \"#scr_pr_image_upload\",\r\n photosPreviewGroup: \".scr_pr_uploaded_image_group\",\r\n};\r\n\r\nvar Upload = {\r\n\r\n init: function () {\r\n this.eventHandlers();\r\n },\r\n\r\n eventHandlers: function () {\r\n Upload.addPhotos();\r\n Upload.photoPreview();\r\n Upload.removePhoto();\r\n },\r\n\r\n // Used In for Edit forms\r\n getEditFormPhotos: function (props, form) {\r\n\r\n if (props.attachments && props.attachments.length && form.find(\".scr_pr_uploaded_image_group .add-photos\")[0]) {\r\n var photosHTML = '';\r\n var addPhotoHTMl = form.find(\".scr_pr_uploaded_image_group .add-photos\")[0].outerHTML;\r\n jQuery(props.attachments).each(function () {\r\n var attachment = this;\r\n photosHTML += \"
\";\r\n photosHTML += \"\";\r\n photosHTML += \"\";\r\n photosHTML += \"
\";\r\n });\r\n form.find(\".scr_pr_uploaded_image_group\").html(photosHTML + addPhotoHTMl);\r\n Upload.addPhotos();\r\n Upload.removePhoto();\r\n Upload._showOrHideAddPhotosField();\r\n }\r\n },\r\n\r\n addPhotos: function () {\r\n jQuery(selectors.addPhotos).on('click', function (e) {\r\n jQuery('#' + jQuery(this).attr(\"for\")).click();\r\n });\r\n\r\n Upload._showOrHideAddPhotosField();\r\n },\r\n\r\n photoPreview: function () {\r\n jQuery(selectors.uploadHiddenField).change(function (e) {\r\n\r\n var previewGroup = jQuery(selectors.photosPreviewGroup);\r\n previewGroup.find(\".ui.tiny.fluid.image\").remove();\r\n for (var index = 0; index < e.target.files.length; index++) {\r\n var src = URL.createObjectURL(e.target.files[index]);\r\n previewGroup.prepend(Upload._getImageHTML(src));\r\n }\r\n\r\n });\r\n },\r\n\r\n removePhoto: function () {\r\n jQuery(selectors.removePhotoLink).click(function () {\r\n if (confirm(\"Are you sure want to delete this attachment from the review ?\")) {\r\n var attachment = jQuery(this);\r\n console.log('Review ID : ' + attachment.parent().data('review-id'));\r\n console.log('Attachment ID : ' + attachment.parent().data('attachment-id'));\r\n\r\n props = {\r\n action: \"scr_pr_delete_attachment\",\r\n review_id: attachment.parent().data('review-id'),\r\n attachment_id: attachment.parent().data('attachment-id'),\r\n };\r\n\r\n console.log(\"@@@ Deleting Attachment Props @@@\");\r\n console.log(props);\r\n\r\n jQuery.post(scr_ajax.ajax_url, props, function (results) {\r\n attachment.parent().fadeOut(300, function () {\r\n jQuery(this).remove();\r\n Upload._showOrHideAddPhotosField();\r\n });\r\n });\r\n }\r\n });\r\n },\r\n\r\n _getImageHTML: function (src) {\r\n var html = \"
\";\r\n // html += \"\";\r\n html += \"\";\r\n html += \"
\";\r\n\r\n return html;\r\n },\r\n\r\n _showOrHideAddPhotosField: function () {\r\n var addPhotos = jQuery(selectors.addPhotos);\r\n var maxFiles = jQuery(selectors.maxFilesField).val();\r\n var photos = jQuery(selectors.photos).length;\r\n console.log('maxFiles : ' + maxFiles);\r\n console.log('attachments : ' + photos);\r\n\r\n addPhotos.show();\r\n if (photos >= maxFiles) {\r\n addPhotos.hide();\r\n }\r\n },\r\n\r\n backendUpload: function () {\r\n // Set all variables to be used in scope\r\n var frame,\r\n addImgLink = jQuery(selectors.upload),\r\n imgContainer = jQuery(selectors.uploadedImagesGroup);\r\n\r\n // ADD IMAGE LINK\r\n addImgLink.on('click', function (event) {\r\n event.preventDefault();\r\n\r\n // If the media frame already exists, reopen it.\r\n if (frame) {\r\n frame.open();\r\n return;\r\n }\r\n\r\n // Create a new media frame\r\n frame = wp.media({\r\n title: 'Select or Upload Media Of Your Chosen Persuasion',\r\n button: {\r\n text: 'Use this media'\r\n },\r\n multiple: true // Set to true to allow multiple files to be selected\r\n });\r\n\r\n\r\n // When an image is selected in the media frame...\r\n frame.on('select', function () {\r\n\r\n // Get media attachment details from the frame state\r\n var attachment = frame.state().get('selection').toJSON();\r\n var attachment_url;\r\n if (attachment.length > 0) {\r\n for (var i = 0; i < attachment.length; i++) {\r\n if (attachment[i].sizes.thumbnail) {\r\n attachment_url = attachment[i].sizes.thumbnail.url;\r\n } else if (attachment[i].sizes.medium) {\r\n attachment_url = attachment[i].sizes.medium.url;\r\n } else if (attachment[i].sizes.large) {\r\n attachment_url = attachment[i].sizes.large.url;\r\n } else if (attachment[i].url) {\r\n attachment_url = attachment[i].url;\r\n }\r\n // Send the attachment[i] URL to our custom image input field.\r\n imgContainer.append('
Remove
');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\nmodule.exports = Upload;\r\n","/**\n * A cross-browser implementation of getElementsByClass.\n * Heavily based on Dustin Diaz's function: http://dustindiaz.com/getelementsbyclass.\n *\n * Find all elements with class `className` inside `container`.\n * Use `single = true` to increase performance in older browsers\n * when only one element is needed.\n *\n * @param {String} className\n * @param {Element} container\n * @param {Boolean} single\n * @api public\n */\n\nvar getElementsByClassName = function(container, className, single) {\n if (single) {\n return container.getElementsByClassName(className)[0];\n } else {\n return container.getElementsByClassName(className);\n }\n};\n\nvar querySelector = function(container, className, single) {\n className = '.' + className;\n if (single) {\n return container.querySelector(className);\n } else {\n return container.querySelectorAll(className);\n }\n};\n\nvar polyfill = function(container, className, single) {\n var classElements = [],\n tag = '*';\n\n var els = container.getElementsByTagName(tag);\n var elsLen = els.length;\n var pattern = new RegExp(\"(^|\\\\s)\"+className+\"(\\\\s|$)\");\n for (var i = 0, j = 0; i < elsLen; i++) {\n if ( pattern.test(els[i].className) ) {\n if (single) {\n return els[i];\n } else {\n classElements[j] = els[i];\n j++;\n }\n }\n }\n return classElements;\n};\n\nmodule.exports = (function() {\n return function(container, className, single, options) {\n options = options || {};\n if ((options.test && options.getElementsByClassName) || (!options.test && document.getElementsByClassName)) {\n return getElementsByClassName(container, className, single);\n } else if ((options.test && options.querySelector) || (!options.test && document.querySelector)) {\n return querySelector(container, className, single);\n } else {\n return polyfill(container, className, single);\n }\n };\n})();\n","/*\n * Source: https://github.com/segmentio/extend\n */\n\nmodule.exports = function extend (object) {\n // Takes an unlimited number of extenders.\n var args = Array.prototype.slice.call(arguments, 1);\n\n // For each extender, copy their properties on our object.\n for (var i = 0, source; source = args[i]; i++) {\n if (!source) continue;\n for (var property in source) {\n object[property] = source[property];\n }\n }\n\n return object;\n};\n","var indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n if (indexOf) return arr.indexOf(obj);\n for (var i = 0; i < arr.length; ++i) {\n if (arr[i] === obj) return i;\n }\n return -1;\n};\n","/**\n * Source: https://github.com/timoxley/to-array\n *\n * Convert an array-like object into an `Array`.\n * If `collection` is already an `Array`, then will return a clone of `collection`.\n *\n * @param {Array | Mixed} collection An `Array` or array-like object to convert e.g. `arguments` or `NodeList`\n * @return {Array} Naive conversion of `collection` to a new `Array`.\n * @api public\n */\n\nmodule.exports = function toArray(collection) {\n if (typeof collection === 'undefined') return [];\n if (collection === null) return [null];\n if (collection === window) return [window];\n if (typeof collection === 'string') return [collection];\n if (isArray(collection)) return collection;\n if (typeof collection.length != 'number') return [collection];\n if (typeof collection === 'function' && collection instanceof Function) return [collection];\n\n var arr = [];\n for (var i = 0; i < collection.length; i++) {\n if (Object.prototype.hasOwnProperty.call(collection, i) || i in collection) {\n arr.push(collection[i]);\n }\n }\n if (!arr.length) return [];\n return arr;\n};\n\nfunction isArray(arr) {\n return Object.prototype.toString.call(arr) === \"[object Array]\";\n}\n","module.exports = function(s) {\n s = (s === undefined) ? \"\" : s;\n s = (s === null) ? \"\" : s;\n s = s.toString();\n return s;\n};\n","module.exports = function(list) {\n return function(initValues, element, notCreate) {\n var item = this;\n\n this._values = {};\n\n this.found = false; // Show if list.searched == true and this.found == true\n this.filtered = false;// Show if list.filtered == true and this.filtered == true\n\n var init = function(initValues, element, notCreate) {\n if (element === undefined) {\n if (notCreate) {\n item.values(initValues, notCreate);\n } else {\n item.values(initValues);\n }\n } else {\n item.elm = element;\n var values = list.templater.get(item, initValues);\n item.values(values);\n }\n };\n\n this.values = function(newValues, notCreate) {\n if (newValues !== undefined) {\n for(var name in newValues) {\n item._values[name] = newValues[name];\n }\n if (notCreate !== true) {\n list.templater.set(item, item.values());\n }\n } else {\n return item._values;\n }\n };\n\n this.show = function() {\n list.templater.show(item);\n };\n\n this.hide = function() {\n list.templater.hide(item);\n };\n\n this.matching = function() {\n return (\n (list.filtered && list.searched && item.found && item.filtered) ||\n (list.filtered && !list.searched && item.filtered) ||\n (!list.filtered && list.searched && item.found) ||\n (!list.filtered && !list.searched)\n );\n };\n\n this.visible = function() {\n return (item.elm && (item.elm.parentNode == list.list)) ? true : false;\n };\n\n init(initValues, element, notCreate);\n };\n};\n","var Swiper = require('swiper').default;\r\n\r\nvar selectors = {\r\n sliderTop: \".photos-review-slider-top\",\r\n sliderThumbs: \".photos-review-slider-thumbs\",\r\n\r\n // Navigation\r\n btnPrev: \".photos-review__button-prev\",\r\n btnNext: \".photos-review__button-next\",\r\n\r\n reviewPhotos: \".review-photos .image\",\r\n galleryPhotos: \".photos-gallery .card\",\r\n};\r\n\r\nvar Slider = {\r\n init: function () {\r\n this.initSwiperSlider();\r\n },\r\n\r\n initSwiperSlider: function () {\r\n\r\n var sliderThumbsArgs = {\r\n spaceBetween: 10,\r\n slidesPerView: \"auto\",\r\n touchRatio: 0.4,\r\n slideToClickedSlide: true,\r\n keyboard: {\r\n enabled: true,\r\n onlyInViewport: false\r\n },\r\n };\r\n\r\n var sliderThumbs = new Swiper(selectors.sliderThumbs, sliderThumbsArgs);\r\n\r\n var sliderTopArgs = {\r\n spaceBetween: 10,\r\n navigation: {\r\n nextEl: selectors.btnNext,\r\n prevEl: selectors.btnPrev,\r\n },\r\n\r\n keyboard: {\r\n enabled: true,\r\n },\r\n thumbs: {\r\n swiper: sliderThumbs,\r\n },\r\n watchSlidesProgress: true,\r\n };\r\n\r\n new Swiper(selectors.sliderTop, sliderTopArgs);\r\n },\r\n\r\n showSlider: function (props) {\r\n\r\n Slider.addInitialSlides(props);\r\n\r\n if (props.type == 'gallery') {\r\n Slider.swiperListeners(props);\r\n }\r\n },\r\n\r\n getProps: function (reviewID, type) {\r\n var group = (type == 'review') ? selectors.reviewPhotos : selectors.galleryPhotos;\r\n\r\n var photos = jQuery(group + \"[data-review-id=\" + reviewID + \"]\");\r\n var props = {\r\n type: type,\r\n slides: photos,\r\n reviewID: reviewID,\r\n next: photos.last().next().data('review-id'),\r\n prev: photos.first().prev().data('review-id'),\r\n };\r\n\r\n return props;\r\n },\r\n\r\n addInitialSlides: function (props) {\r\n\r\n // Destroy previous slider instance\r\n document.querySelector(selectors.sliderTop).swiper.destroy(true);\r\n document.querySelector(selectors.sliderThumbs).swiper.destroy(true);\r\n\r\n var sliderHTML = '';\r\n var wrapper = ' .photos-review-wrapper.swiper-wrapper';\r\n for (var index = 0; index < props.slides.length; index++) {\r\n sliderHTML += '
' + props.slides[index].innerHTML + '
';\r\n }\r\n\r\n jQuery(selectors.sliderTop + wrapper).html(sliderHTML);\r\n jQuery(selectors.sliderThumbs + wrapper).html(sliderHTML);\r\n\r\n // Re-Initiate swiper slider after destroyed\r\n Slider.initSwiperSlider();\r\n\r\n // Remove Prevously added Double arrows\r\n Slider.removeDoubleArrows();\r\n },\r\n\r\n swiperListeners: function (props) {\r\n\r\n var prevSlidesReviewID = props.prev;\r\n var nextSlidesReviewID = props.next;\r\n\r\n\r\n // swiper instances\r\n var swiper = {\r\n sliderTop: document.querySelector(selectors.sliderTop).swiper,\r\n sliderThumbs: document.querySelector(selectors.sliderThumbs).swiper\r\n };\r\n\r\n\r\n // On Init\r\n if (prevSlidesReviewID) {\r\n prevSlidesReviewID = Slider.prependSlide(swiper, prevSlidesReviewID);\r\n }\r\n if (nextSlidesReviewID) {\r\n nextSlidesReviewID = Slider.appendSlide(swiper, nextSlidesReviewID);\r\n }\r\n\r\n Slider.removeDoubleArrows();\r\n Slider.addDoubleArrows();\r\n\r\n swiper.sliderTop.on(\"transitionStart\", function () {\r\n Slider.removeDoubleArrows();\r\n Slider.addDoubleArrows();\r\n });\r\n\r\n swiper.sliderTop.on(\"reachBeginning\", function () {\r\n if (prevSlidesReviewID) {\r\n prevSlidesReviewID = Slider.prependSlide(swiper, prevSlidesReviewID);\r\n }\r\n });\r\n\r\n swiper.sliderTop.on(\"reachEnd\", function () {\r\n if (nextSlidesReviewID) {\r\n nextSlidesReviewID = Slider.appendSlide(swiper, nextSlidesReviewID);\r\n }\r\n });\r\n\r\n // Hide Slides excecpt Active Reviews\r\n swiper.sliderTop.on(\"slideChangeTransitionEnd\", function () {\r\n Slider.hidesReviewSlides();\r\n\r\n // var activeSlide = jQuery(selectors.sliderTop + ' .swiper-slide.swiper-slide-active').data('review-id');\r\n // var notShownSlideIndex = [];\r\n\r\n // var activeReviewID = this.slides[this.realIndex].getAttribute('data-review-id');\r\n // console.log(activeReviewID);\r\n // console.log('swiper.realIndex' + this.realIndex);\r\n // var activeElementSlide = '';\r\n // for (var index = 0; index < this.slides.length; index++) {\r\n // if (this.slides[index].getAttribute('data-review-id') !== activeReviewID) {\r\n // notShownSlideIndex.push(index);\r\n // }\r\n // }\r\n // console.log(notShownSlideIndex);\r\n // swiper.sliderTop.removeSlide(notShownSlideIndex);\r\n // swiper.sliderThumbs.removeSlide(notShownSlideIndex);\r\n // jQuery(selectors.sliderThumbs + ' .swiper-slide').hide();\r\n // jQuery(selectors.sliderThumbs + \" [data-review-id=\" + activeSlide + \"]\").css('display', 'flex');\r\n });\r\n\r\n\r\n swiper.sliderThumbs.on(\"setTranslate\", function (translate) {\r\n var thisContext = this;\r\n if (document.documentElement.clientWidth < 600) {\r\n setTimeout(function () {\r\n thisContext.setTranslate(0);\r\n }, 1);\r\n }\r\n });\r\n\r\n },\r\n\r\n appendSlide: function (swiper, nextSlidesReviewID) {\r\n var photos = jQuery(selectors.galleryPhotos + \"[data-review-id=\" + nextSlidesReviewID + \"]\");\r\n var nextReview = photos.last().next().data('review-id');\r\n\r\n for (var index = 0; index < photos.length; index++) {\r\n var sliderHTML = '
' + photos[index].innerHTML + '
';\r\n\r\n swiper.sliderTop.appendSlide(sliderHTML);\r\n swiper.sliderThumbs.appendSlide(sliderHTML);\r\n }\r\n\r\n jQuery(selectors.sliderThumbs + \" [data-review-id=\" + nextSlidesReviewID + \"]\").hide();\r\n\r\n return nextReview;\r\n },\r\n\r\n prependSlide: function (swiper, prevSlidesReviewID) {\r\n // console.log(\"reachBeginning\");\r\n // console.log(\"prevSlidesReviewID : \" + prevSlidesReviewID);\r\n\r\n var photos = jQuery(selectors.galleryPhotos + \"[data-review-id=\" + prevSlidesReviewID + \"]\");\r\n var prevReview = photos.first().prev().data('review-id');\r\n\r\n // Slides are prepending in Left\r\n photos = photos.get().reverse();\r\n\r\n for (var index = 0; index < photos.length; index++) {\r\n var sliderHTML = '
' + photos[index].innerHTML + '
';\r\n\r\n swiper.sliderTop.prependSlide(sliderHTML);\r\n swiper.sliderThumbs.prependSlide(sliderHTML);\r\n }\r\n\r\n jQuery(selectors.sliderThumbs + \" [data-review-id=\" + prevSlidesReviewID + \"]\").hide();\r\n\r\n // Go to active Slide\r\n setTimeout(function () {\r\n swiper.sliderTop.slideTo(photos.length);\r\n }, 1);\r\n\r\n return prevReview;\r\n },\r\n\r\n // Add double arrow for Prev / Next Review navigation\r\n addDoubleArrows: function () {\r\n var activeSlide = jQuery(selectors.sliderTop + ' .swiper-slide.swiper-slide-active').data('review-id');\r\n var photos = jQuery(selectors.sliderThumbs + \" [data-review-id=\" + activeSlide + \"]\");\r\n\r\n var btnPrev = jQuery(selectors.btnPrev);\r\n var btnNext = jQuery(selectors.btnNext);\r\n\r\n if (photos.first().hasClass('swiper-slide-thumb-active')) {\r\n btnPrev.find(\"i\").addClass(\"double\");\r\n btnPrev.attr(\"title\", \"Previous Review\");\r\n }\r\n if (photos.last().hasClass('swiper-slide-thumb-active')) {\r\n btnNext.find(\"i\").addClass(\"double\");\r\n btnNext.attr(\"title\", \"Next Review\");\r\n }\r\n },\r\n\r\n removeDoubleArrows: function () {\r\n var btnPrev = jQuery(selectors.btnPrev);\r\n var btnNext = jQuery(selectors.btnNext);\r\n\r\n btnPrev.find(\"i\").removeClass(\"double\");\r\n btnPrev.removeAttr(\"title\");\r\n\r\n btnNext.find(\"i\").removeClass(\"double\");\r\n btnNext.removeAttr(\"title\");\r\n },\r\n\r\n hidesReviewSlides: function () {\r\n var activeSlide = jQuery(selectors.sliderTop + ' .swiper-slide.swiper-slide-active').data('review-id');\r\n jQuery(selectors.sliderThumbs + ' .swiper-slide').hide();\r\n jQuery(selectors.sliderThumbs + \" [data-review-id=\" + activeSlide + \"]\").css('display', 'flex');\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Slider;","var UserReview = require(\"./components/user-review.js\");\r\nvar ListBuilder = require(\"./list-builder.js\");\r\n// var ListControl = require(\"./blocks/list-control.js\");\r\nvar ReviewsList = require(\"./components/reviews-list.js\");\r\nvar PhotoReviews = require(\"./components/photo-reviews/photo-reviews.js\");\r\nvar ComparisonTable = require(\"./comparison-table.js\");\r\nvar UserReviewsList = require(\"./components/user-reviews-list.js\");\r\n\r\nvar StarcatReview = {\r\n init: function () {\r\n UserReview.init();\r\n ListBuilder.init();\r\n PhotoReviews.init();\r\n // ListControl.init();\r\n // ComparisonTable.init(); \r\n this.eventHandlers();\r\n },\r\n\r\n eventHandlers: function () {\r\n\r\n // Refreshing PhotoReviews events for paginated List items\r\n jQuery(\".scr-pagination li\").one(\"click\", function (e) {\r\n PhotoReviews.init();\r\n });\r\n },\r\n};\r\n\r\njQuery(document).ready(function () {\r\n StarcatReview.init();\r\n});\r\n\r\nimport \"./../style.scss\";\r\n\r\n","var Stats = require(\"./user-review/stats.js\");\r\nvar Form = require(\"./user-review/form.js\");\r\nvar ProsAndCons = require(\"./user-review/pros-and-cons.js\");\r\nvar Reply = require(\"./user-review/reply.js\");\r\nvar Edit = require(\"./user-review/edit.js\");\r\nvar Voting = require(\"./user-review/voting.js\");\r\n\r\nvar UserReview = {\r\n init: function () {\r\n Stats.init();\r\n Form.init();\r\n ProsAndCons.init();\r\n Reply.init();\r\n Edit.init();\r\n Voting.init();\r\n\r\n this.eventListener();\r\n console.log(\"User Review Form JS Loaded !!!\");\r\n },\r\n\r\n eventListener: function () {\r\n jQuery(\"a.woocommerce-scr-review-link\").click(function () {\r\n jQuery(\".scr-reviews_tab a\").click();\r\n return true;\r\n });\r\n },\r\n};\r\n\r\nmodule.exports = UserReview;\r\n","var Form = require(\"./form.js\");\r\nvar formRules = Form.getRules();\r\nvar ProsAndCons = {\r\n init: function () {\r\n this.eventListener();\r\n },\r\n\r\n eventListener: function () {\r\n this.getRepeater(\".review-pros-repeater\", \"pros\");\r\n this.getRepeater(\".review-cons-repeater\", \"cons\");\r\n },\r\n\r\n getRepeater: function (selector, group) {\r\n var list = jQuery(selector).find(\"[data-repeater-list=\" + group + \"]\");\r\n\r\n ProsAndCons.addItem(selector, list, group);\r\n ProsAndCons.deleteItem(selector, list, group);\r\n\r\n // Already loaded element Pros and Cons Dropdown\r\n jQuery(selector + \" .ui.prosandcons.dropdown\").dropdownX({\r\n allowAdditions: true,\r\n });\r\n },\r\n\r\n addItem: function (selector, list, group) {\r\n var duplicateItem = ProsAndCons.getDuplicateItem(list, group);\r\n\r\n jQuery(selector + \" [data-repeater-create]\").on(\"click\", function () {\r\n var indexedItem = ProsAndCons.setIndex(list, duplicateItem, group);\r\n\r\n list.append(indexedItem);\r\n ProsAndCons.deleteItem(selector, list, group);\r\n ProsAndCons.reinitiateEvents(list, group);\r\n\r\n // Pros and Cons Dropdown Items\r\n jQuery(selector + \" .ui.prosandcons.dropdown\").dropdownX({\r\n allowAdditions: true,\r\n });\r\n });\r\n },\r\n\r\n getDuplicateItem: function (list, group) {\r\n var item = list\r\n .find(\"[data-repeater-item]\")\r\n .first()[0];\r\n item = (item) ? item.outerHTML : '';\r\n var placeholderText = '';\r\n item = item.replace(new RegExp(']*>.*?<\\/option>'), placeholderText);\r\n\r\n return item;\r\n },\r\n\r\n deleteItem: function (selector, list, group) {\r\n jQuery(selector + \" [data-repeater-item] [data-repeater-delete]\").on(\r\n \"click\",\r\n function () {\r\n jQuery(this)\r\n .parent()\r\n .parent()\r\n .remove();\r\n ProsAndCons.updateIndex(list, group);\r\n ProsAndCons.reinitiateEvents(list, group);\r\n }\r\n );\r\n },\r\n\r\n reinitiateEvents: function (list, group) {\r\n ProsAndCons.setRules(list, group);\r\n Form.formValidation(formRules);\r\n },\r\n\r\n setIndex: function (list, item, dataAttr) {\r\n var key = list.children().length;\r\n\r\n var field = jQuery(item);\r\n\r\n var indexedField = field\r\n .find(\"[data-\" + dataAttr + \"]\")\r\n .attr(\"name\", dataAttr + \"[\" + key + \"]\")\r\n .parent()\r\n .parent()\r\n .html();\r\n\r\n var fieldHtml = field.html(indexedField);\r\n var indexedHtml = fieldHtml\r\n .wrapAll(\"
\")\r\n .parent()\r\n .html();\r\n\r\n return indexedHtml;\r\n },\r\n\r\n updateIndex: function (list, group) {\r\n var items = list.find(\"[data-repeater-item]\");\r\n\r\n var count = 0;\r\n items.each(function (index, item) {\r\n jQuery(item)\r\n .find(\"[data-\" + group + \"]\")\r\n .attr(\"name\", group + \"[\" + count + \"]\");\r\n count++;\r\n });\r\n },\r\n\r\n setRules: function (list, group) {\r\n var items = list.find(\"[data-repeater-item]\");\r\n items.each(function (index, item) {\r\n var field = jQuery(item)\r\n .find(\"[data-\" + group + \"]\")\r\n .attr(\"name\");\r\n formRules[field] = ProsAndCons.updateRules(field, group);\r\n });\r\n },\r\n\r\n updateRules: function (identifier, group) {\r\n return {\r\n identifier: identifier,\r\n rules: [\r\n {\r\n type: \"empty\",\r\n prompt: \"Please select or type a \" + group,\r\n },\r\n ],\r\n };\r\n },\r\n};\r\n\r\nmodule.exports = ProsAndCons;\r\n","var selectors = {\r\n replyForm: \".user-review-reply.form\",\r\n submit: \".user-review-reply.form .submit\",\r\n userReviews: \".scr_user_reviews.comments\",\r\n links: \".scr_user_reviews .comment .actions\",\r\n replyLink: \".scr_user_reviews .comment .actions .reply_link\",\r\n editLink: \".scr_user_reviews .comment .actions .reply_edit_link\",\r\n};\r\n\r\nvar Reply = {\r\n init: function () {\r\n this.eventListener();\r\n },\r\n eventListener: function () {\r\n this.showForm();\r\n this.formValidation();\r\n },\r\n\r\n showForm: function () {\r\n var thisModule = this;\r\n var links = jQuery(selectors.links);\r\n var replyLinks = jQuery(selectors.replyLink);\r\n var editLinks = jQuery(selectors.editLink);\r\n var formClone = this.getFormClone();\r\n\r\n replyLinks.click(function () {\r\n var replyLink = jQuery(this);\r\n var author = replyLink\r\n .closest(\".content\")\r\n .find(\".author\")\r\n .first()\r\n .text()\r\n .trim();\r\n\r\n // Show all reviews list links\r\n links.show();\r\n\r\n jQuery(\".comment .content .text\").show();\r\n // Hide clicked review link\r\n replyLink.parent().parent().hide();\r\n\r\n var parent = replyLink.closest(\".comment\").attr(\"id\");\r\n // console.log(link.closest(\".comment\").find.children().length);\r\n var placeholder = Translations.replyto + \" @\" + author + \" ...\";\r\n\r\n jQuery(selectors.replyForm).remove();\r\n\r\n /* Append review reply form to comment content\r\n set a placeholder and a data-comement-parent-id attributes */\r\n replyLink\r\n .closest(\".comment .content .actions\")\r\n .after(formClone)\r\n .next(selectors.replyForm)\r\n .attr(\"data-comment-parent-id\", parent)\r\n .find('[name=\"description\"]')\r\n .attr(\"placeholder\", placeholder);\r\n\r\n thisModule.formValidation();\r\n thisModule.cancelBtn(\"\");\r\n });\r\n\r\n editLinks.click(function () {\r\n var editForm = thisModule.getEditForm(formClone);\r\n var editLink = jQuery(this);\r\n var author = editLink\r\n .closest(\".content\")\r\n .find(\".author\")\r\n .first()\r\n .text()\r\n .trim();\r\n\r\n // Show all reviews list links\r\n links.show();\r\n\r\n // Remove all reviews list forms except clonned form\r\n jQuery(selectors.userReviews)\r\n .find(\".form\")\r\n .hide()\r\n .find(selectors.replyForm)\r\n .remove();\r\n\r\n // Hide clicked review link\r\n editLink.parent().parent().hide();\r\n\r\n jQuery(\".comment .content .text\").show();\r\n // Clicked link closest review content\r\n var reviewContent = editLink\r\n .closest(\".comment .content\")\r\n .find(\".text\")\r\n .first();\r\n\r\n // Hide clicked link of closest review content\r\n reviewContent.hide();\r\n\r\n var parent = editLink\r\n .parent()\r\n .closest(\".comment\")\r\n .attr(\"data-comment-parent-id\");\r\n\r\n var placeholder = Translations.replyto + \" @\" + author + \" ...\";\r\n\r\n jQuery(selectors.replyForm).remove();\r\n\r\n var editProps = {\r\n comment_id: reviewContent.closest(\".comment\").attr(\"id\"),\r\n description: reviewContent.text().trim(),\r\n methodType: \"PUT\",\r\n reviewContent: reviewContent,\r\n };\r\n // Append clonned edit form into closest review content of clicked edit link\r\n reviewContent\r\n .after(editForm)\r\n .next(selectors.replyForm)\r\n .attr(\"data-comment-parent-id\", parent)\r\n .attr(\"data-comment-id\", editProps.comment_id)\r\n .attr(\"data-method\", \"PUT\")\r\n .find('[name=\"description\"]')\r\n .attr(\"placeholder\", placeholder)\r\n .attr(\"value\", editProps.description);\r\n\r\n thisModule.submitEditForm(editProps);\r\n thisModule.cancelBtn(reviewContent);\r\n });\r\n },\r\n\r\n getEditForm: function (formClone) {\r\n editForm = jQuery(formClone);\r\n editForm\r\n .find(\".submit.button\")\r\n .addClass(\"blue\")\r\n .text(Translations.save);\r\n\r\n return editForm[0].outerHTML;\r\n },\r\n\r\n getFormClone: function () {\r\n var form = jQuery(selectors.replyForm);\r\n var clone = form\r\n .clone()\r\n .wrap(\"
\")\r\n .css(\"display\", \"block\")\r\n .parent()\r\n .html();\r\n\r\n form.remove();\r\n\r\n return clone;\r\n },\r\n\r\n formValidation: function () {\r\n var thisModule = this;\r\n var replyForm = jQuery(selectors.replyForm);\r\n var placeholderContent = this.getPlaceholderContent();\r\n\r\n jQuery(replyForm).formX({\r\n fields: {\r\n description: \"empty\",\r\n },\r\n onSuccess: function (e, fields) {\r\n e.preventDefault();\r\n replyForm.replaceWith(placeholderContent);\r\n thisModule.submit(replyForm, fields);\r\n },\r\n });\r\n },\r\n\r\n submitEditForm: function (editProps) {\r\n var thisModule = this;\r\n var replyForm = jQuery(selectors.replyForm);\r\n var links = jQuery(selectors.links);\r\n // var placeholderContent = this.getPlaceholderContent();\r\n\r\n jQuery(replyForm).formX({\r\n fields: {\r\n description: \"empty\",\r\n },\r\n onSuccess: function (e, fields) {\r\n e.preventDefault();\r\n\r\n var props = thisModule.getProps(replyForm, fields);\r\n props.comment_id = editProps.comment_id;\r\n props.methodType = editProps.methodType;\r\n props.form_action_type = \"reply\";\r\n editProps.reviewContent.text(props.description);\r\n links.show();\r\n editProps.reviewContent.show();\r\n\r\n jQuery(this).closest(\"form.form\").remove();\r\n\r\n jQuery\r\n .post(scr_ajax.ajax_url, props, function (results) {\r\n results = JSON.parse(results);\r\n // console.log(results);\r\n\r\n var editResult = jQuery(\"#\" + results.comment_ID);\r\n editResult.find(\".text\").text(results.comment_content);\r\n editResult.transition(\"pulse\");\r\n })\r\n .fail(function (response) {\r\n console.log(\"review_reply failed\");\r\n console.log(response);\r\n });\r\n // replyForm.replaceWith(placeholderContent);\r\n // thisModule.submit(replyForm, fields);\r\n },\r\n });\r\n },\r\n\r\n cancelBtn: function (reviewContent) {\r\n var links = jQuery(selectors.links);\r\n jQuery(selectors.replyForm + \" .button.cancel\").click(function (e) {\r\n e.preventDefault();\r\n links.show();\r\n\r\n if (reviewContent) {\r\n reviewContent.show();\r\n }\r\n\r\n jQuery(this).closest(selectors.replyForm).remove();\r\n });\r\n },\r\n\r\n submit: function (form, fields) {\r\n var props = this.getProps(form, fields);\r\n // console.log(props);\r\n props.form_action_type = \"reply\";\r\n\r\n jQuery\r\n .post(scr_ajax.ajax_url, props, function (results) {\r\n results = JSON.parse(results);\r\n // console.log(results);\r\n jQuery(\"#\" + results.props.parent)\r\n .find(\".review_reply.placeholder\")\r\n .first()\r\n .replaceWith(results.view);\r\n\r\n jQuery(\"#\" + results.props.ID).transition(\"pulse\");\r\n })\r\n .fail(function (response) {\r\n console.log(\"review_reply failed\");\r\n console.log(response);\r\n });\r\n },\r\n\r\n getProps: function (submittingForm, fields) {\r\n fields.action = submittingForm.attr(\"action\");\r\n fields.type = submittingForm.attr(\"method\");\r\n fields.post_id = submittingForm.attr(\"data-post-id\");\r\n fields.parent = submittingForm.attr(\"data-comment-parent-id\");\r\n\r\n return fields;\r\n },\r\n\r\n getPlaceholderContent: function () {\r\n var html = \"\";\r\n html += '
';\r\n html += '
';\r\n html += '
';\r\n html += '
';\r\n html += \"
\";\r\n\r\n return html;\r\n },\r\n};\r\n\r\nmodule.exports = Reply;\r\n","var Stats = require(\"./stats.js\");\r\nvar Upload = require(\"./../photo-reviews/upload.js\");\r\n\r\nvar selectors = {\r\n reviewForm: \".scr-user-review.form\",\r\n links: \".scr_user_reviews .comment .actions\",\r\n editLink: \".scr_user_reviews .comment .actions .edit_link\",\r\n};\r\n\r\nvar Edit = {\r\n init: function () {\r\n this.eventListener();\r\n },\r\n eventListener: function () {\r\n this.showForm();\r\n },\r\n\r\n showForm: function () {\r\n var thisModule = this;\r\n var editlinks = jQuery(selectors.editLink);\r\n var links = jQuery(selectors.links);\r\n\r\n editlinks.on(\"click\", function (e) {\r\n var link = jQuery(this);\r\n\r\n // Forms attributes and show the form\r\n // var form = jQuery(selectors.reviewForm);\r\n var form = thisModule.getReviewForm();\r\n if (form == false) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n\r\n // pluck the current post scr_user_reviews element\r\n var userReviews = jQuery(this).closest(\".scr_user_reviews\");\r\n // Get post-ID\r\n var postID = userReviews.attr(\"data-post-id\");\r\n\r\n // Show all reviews list links\r\n links.show();\r\n\r\n // Hide clicked review link\r\n link.parent().parent().hide();\r\n\r\n jQuery(\".comment .content .text\").show();\r\n\r\n // Clicked link closest review content\r\n\r\n var allReviewContent = link\r\n .closest(\".comment .content\")\r\n .find(\".text\")\r\n .show();\r\n var reviewContent = allReviewContent.first();\r\n // Hide clicked link of closest review content\r\n reviewContent.hide();\r\n\r\n // set form post_id\r\n form.attr(\"post_id\", postID);\r\n form.attr(\"data-post-id\", postID);\r\n var commentProps = reviewContent.closest(\".comment\").data(\"props\");\r\n\r\n form.attr(\r\n \"data-comment-id\",\r\n reviewContent.closest(\".comment\").attr(\"id\")\r\n );\r\n form = Edit.modifyFormForEditing(form, commentProps, reviewContent);\r\n\r\n // Append clonned edit form into closest review content of clicked edit link\r\n reviewContent.after(form).next(selectors.reviewForm);\r\n\r\n thisModule.cancelBtn(reviewContent);\r\n\r\n Stats.init();\r\n // thisModule.editFormSubmit(reviewContent, reviewProps);\r\n });\r\n },\r\n\r\n modifyFormForEditing: function (form, props, content) {\r\n var sumbitBtn =\r\n '
' +\r\n Translations.save +\r\n \"
\";\r\n var cancelBtn =\r\n '
' +\r\n Translations.cancel +\r\n \"
\";\r\n\r\n props.title = content.find(\".title\").text().trim();\r\n props.description = content.find(\".description\").text().trim();\r\n\r\n form.addClass(\"mini\");\r\n form.attr(\"data-method\", \"PUT\");\r\n form.find(\"h2.ui.header\").remove();\r\n form.find(\"h5\").addClass(\"ui tiny header\");\r\n form.find('[name=\"title\"]').val(props.title);\r\n form.find('[name=\"description\"]').val(props.description);\r\n form.find(\".submit.button\")\r\n .closest(\".field\")\r\n .html(sumbitBtn + cancelBtn);\r\n form.show();\r\n\r\n // Non-logged-in Users\r\n var name =\r\n props.user[\"name\"] &&\r\n props.user[\"name\"] != Translations[\"anonymous\"]\r\n ? props.user[\"name\"]\r\n : form.find('[name=\"name\"]').val();\r\n var email = props.user[\"email\"]\r\n ? props.user[\"email\"]\r\n : form.find('[name=\"email\"]').val();\r\n var website = props.user[\"website\"]\r\n ? props.user[\"website\"]\r\n : form.find('[name=\"website\"]').val();\r\n\r\n form.find('[name=\"name\"]').val(name);\r\n form.find('[name=\"email\"]').val(email);\r\n form.find('[name=\"website\"]').val(website);\r\n\r\n // Stats\r\n Edit.getModifiedFormforStats(props, form);\r\n // ProsandCons\r\n Edit.getModifiedFormforProsandCons(props, form, \"pros\");\r\n Edit.getModifiedFormforProsandCons(props, form, \"cons\");\r\n // Attachments\r\n Edit.getModifiedFormforPhotos(props, form);\r\n\r\n return form;\r\n },\r\n\r\n getModifiedFormforStats: function (props, form) {\r\n if (props.stats) {\r\n form.find(\".review-list li\").each(function () {\r\n var item = jQuery(this);\r\n var stat =\r\n props.stats[\r\n item.find(\".review-item-label__text\").text().trim()\r\n ];\r\n if (!stat) {\r\n item.remove();\r\n }\r\n jQuery(this)\r\n .find(\".stars-result\")\r\n .css(\"width\", stat + \"%\");\r\n var score = Stats.getStatScore(stat, Stats.getProps());\r\n item.find(\".stars-result\").width(stat + \"%\");\r\n Stats.addStatClassesBasedOnScore(item, score);\r\n item.find(\"input\").val(stat);\r\n item.find(\".review-item-stars\").attr(\"result\", stat);\r\n item.find(\".review-item-label__score\").text(score);\r\n });\r\n }\r\n },\r\n\r\n getModifiedFormforProsandCons: function (props, form, listname) {\r\n // Creating Fieald by triggering click event\r\n if (\r\n props.prosandcons &&\r\n props.prosandcons[listname + \"-list\"] &&\r\n props.prosandcons[listname + \"-list\"].length > 1\r\n ) {\r\n for (\r\n var ii = 1;\r\n ii < props.prosandcons[listname + \"-list\"].length;\r\n ii++\r\n ) {\r\n form.find(\r\n \".review-\" + listname + \"-repeater [data-repeater-create]\"\r\n ).trigger(\"click\");\r\n }\r\n }\r\n\r\n // Delete field if Empty\r\n var index = 0;\r\n form.find(\r\n \".review-\" + listname + \"-repeater [data-repeater-item]\"\r\n ).each(function () {\r\n if (\r\n props.prosandcons &&\r\n props.prosandcons[listname + \"-list\"] &&\r\n props.prosandcons[listname + \"-list\"][index]\r\n ) {\r\n var collectionOptions = form\r\n .find(\".review-\" + listname + \"-repeater\")\r\n .attr(\"data-\" + listname);\r\n var itemOptions = props.prosandcons[listname + \"-list\"];\r\n var values = Edit.getProsandConsOptions(\r\n collectionOptions,\r\n itemOptions\r\n );\r\n var prosAndConsField = jQuery(this).find(\".prosandcons\");\r\n\r\n prosAndConsField.dropdownX(\"change values\", values);\r\n prosAndConsField.dropdownX(\r\n \"set text\",\r\n props.prosandcons[listname + \"-list\"][index].item\r\n );\r\n prosAndConsField.dropdownX(\r\n \"set selected\",\r\n props.prosandcons[listname + \"-list\"][index].item\r\n );\r\n } else {\r\n jQuery(this).find(\"[data-repeater-delete]\").trigger(\"click\");\r\n }\r\n index++;\r\n });\r\n },\r\n\r\n getProsandConsOptions: function (collectionOptions, itemOptions) {\r\n var values = [];\r\n collectionOptions = JSON.parse(collectionOptions);\r\n\r\n // get options of unique values only\r\n var options = itemOptions.concat(\r\n collectionOptions.filter(function (el) {\r\n var result = true;\r\n for (var ii in itemOptions) {\r\n if (itemOptions[ii].item === el.item) {\r\n result = false;\r\n }\r\n }\r\n return result;\r\n })\r\n );\r\n\r\n for (var i = 0, len = options.length; i < len; i++) {\r\n values[i] = {\r\n value: options[i].item,\r\n name: options[i].item,\r\n };\r\n }\r\n\r\n return values;\r\n },\r\n\r\n getModifiedFormforPhotos: function (props, form) {\r\n Upload.getEditFormPhotos(props, form);\r\n },\r\n\r\n cancelBtn: function (reviewContent) {\r\n var links = jQuery(selectors.links);\r\n jQuery(selectors.reviewForm + \" .button.cancel\").click(function (e) {\r\n e.preventDefault();\r\n\r\n links.show();\r\n reviewContent.show();\r\n\r\n jQuery(this).closest(\"form.form\").hide();\r\n });\r\n },\r\n getReviewForm: function () {\r\n var noOfForms = jQuery(selectors.reviewForm).length;\r\n if (noOfForms == 0) {\r\n return false;\r\n }\r\n if (noOfForms == 1) {\r\n return jQuery(selectors.reviewForm);\r\n }\r\n return jQuery(selectors.reviewForm).first();\r\n },\r\n};\r\n\r\nmodule.exports = Edit;\r\n","require(\"./../../../vendors/like-dislike.js\");\r\nvar Voting = {\r\n init: function() {\r\n console.log(\"Voting Js Init !\");\r\n this.eventListener();\r\n },\r\n eventListener: function() {\r\n jQuery(\".vote.likes-and-dislikes\").likeDislike({\r\n initialValue: 0,\r\n click: function(value, l, d, event) {\r\n var element = jQuery(this.element);\r\n var likes = element.find(\".likes\");\r\n var dislikes = element.find(\".dislikes\");\r\n\r\n likes.text(parseInt(likes.text()) + l);\r\n dislikes.text(parseInt(dislikes.text()) + d);\r\n\r\n props = {\r\n action: \"scr_user_review_vote\",\r\n type: \"post\",\r\n comment_id: element.attr(\"data-comment-id\"),\r\n vote: value,\r\n };\r\n\r\n console.log(props);\r\n\r\n jQuery.post(scr_ajax.ajax_url, props, function(results) {\r\n results = JSON.parse(results);\r\n console.log(results);\r\n });\r\n },\r\n });\r\n },\r\n};\r\n\r\nmodule.exports = Voting;\r\n","/**\r\n * like-dislike.js v1.0.1\r\n * @link https://github.com/uagrace/like-dislike\r\n * @copyright 2016 Maxim Tkachuk \r\n * Licensed under the MIT license\r\n */\r\n(function($) {\r\n var likeBtn = \"like\",\r\n dislikeBtn = \"dislike\";\r\n\r\n var defaults = {\r\n click: null,\r\n beforeClick: null,\r\n initialValue: 0,\r\n reverseMode: true,\r\n readOnly: false,\r\n likeBtnClass: \"like\",\r\n dislikeBtnClass: \"dislike\",\r\n activeClass: \"active\",\r\n disabledClass: \"disabled\",\r\n };\r\n\r\n function LikeDislike(element, options) {\r\n this.element = element;\r\n this.opts = $.extend({}, defaults, options);\r\n this.init();\r\n }\r\n\r\n LikeDislike.prototype = {\r\n init: function() {\r\n this.btns = $(this.element).find(\r\n \".\" + this.opts.likeBtnClass + \", .\" + this.opts.dislikeBtnClass\r\n );\r\n this.readOnly(this.opts.readOnly);\r\n if (this.opts.initialValue !== 0) {\r\n var activeBtn =\r\n this.opts.initialValue === 1 ? likeBtn : dislikeBtn;\r\n this.btnDown(activeBtn);\r\n }\r\n return this;\r\n },\r\n readOnly: function(state) {\r\n var btns = this.btns;\r\n if (!state) {\r\n if (!this.opts.reverseMode) {\r\n var notActiveBtns = btns.not(\".\" + this.opts.activeClass);\r\n if (notActiveBtns.length) {\r\n btns = notActiveBtns;\r\n }\r\n }\r\n this.enable(btns);\r\n } else {\r\n this.disable(btns);\r\n }\r\n },\r\n getBtn: function(btnType) {\r\n if (btnType === likeBtn) {\r\n return $(this.element).find(\".\" + this.opts.likeBtnClass);\r\n } else if (btnType === dislikeBtn) {\r\n return $(this.element).find(\".\" + this.opts.dislikeBtnClass);\r\n } else {\r\n $.error(\"Wrong btnType: \" + btnType);\r\n }\r\n },\r\n btnDown: function(btnType) {\r\n var btn = this.getBtn(btnType);\r\n btn.addClass(this.opts.activeClass);\r\n if (!this.opts.reverseMode) {\r\n this.disable(btn);\r\n }\r\n },\r\n btnUp: function(btnType) {\r\n var btn = this.getBtn(btnType);\r\n btn.removeClass(this.opts.activeClass);\r\n if (!this.opts.reverseMode) {\r\n this.enable(btn);\r\n }\r\n },\r\n enable: function(btn) {\r\n var self = this;\r\n var opts = self.opts;\r\n\r\n btn.removeClass(opts.disabledClass);\r\n\r\n if (opts.beforeClick) {\r\n btn.on(\"beforeClick\", function(event) {\r\n return opts.beforeClick.call(self, event);\r\n });\r\n }\r\n\r\n btn.on(\"click\", function(event) {\r\n var btn = $(this);\r\n\r\n if (opts.beforeClick && !btn.triggerHandler(\"beforeClick\")) {\r\n return false;\r\n }\r\n\r\n var btnType = btn.hasClass(opts.likeBtnClass)\r\n ? likeBtn\r\n : dislikeBtn;\r\n var hasActive = self.btns.hasClass(opts.activeClass);\r\n var isActive = btn.hasClass(opts.activeClass);\r\n\r\n var value = 0,\r\n l = 0,\r\n d = 0;\r\n\r\n if (btnType === likeBtn) {\r\n if (isActive) {\r\n self.btnUp(likeBtn);\r\n l = -1;\r\n } else {\r\n if (hasActive) {\r\n self.btnUp(dislikeBtn);\r\n d = -1;\r\n }\r\n self.btnDown(likeBtn);\r\n l = 1;\r\n value = 1;\r\n }\r\n } else {\r\n if (isActive) {\r\n self.btnUp(dislikeBtn);\r\n d = -1;\r\n } else {\r\n if (hasActive) {\r\n self.btnUp(likeBtn);\r\n l = -1;\r\n }\r\n self.btnDown(dislikeBtn);\r\n d = 1;\r\n value = -1;\r\n }\r\n }\r\n\r\n opts.click.call(self, value, l, d, event);\r\n });\r\n },\r\n disable: function(btn) {\r\n btn.addClass(this.opts.disabledClass);\r\n btn.off();\r\n },\r\n };\r\n\r\n $.fn.likeDislike = function(options) {\r\n return this.each(function() {\r\n if (!$.data(this, \"plugin_LikeDislike\")) {\r\n $.data(\r\n this,\r\n \"plugin_LikeDislike\",\r\n new LikeDislike(this, options)\r\n );\r\n }\r\n });\r\n };\r\n})(jQuery);\r\n","var ListControl = require(\"./blocks/list-control.js\");\r\n\r\nvar ListBuilder = {\r\n init: function() {\r\n console.log(\"ListBuilder.init()\");\r\n jQuery(\"#scr-controlled-list.scr-user-controlled-list\").each(function(index, value) {\r\n if (\r\n jQuery(this).find(\".scr_user_reviews.comments .comment\")\r\n .length == 0\r\n ) {\r\n console.log(\"no items\");\r\n jQuery(this).hide();\r\n return;\r\n }\r\n\r\n console.log(\r\n \"div\" + index + \":\" + jQuery(this).attr(\"data-collectionProps\")\r\n );\r\n\r\n var list_config = jQuery(this).attr(\"data-collectionProps\");\r\n\r\n list_config = list_config.replace(/= 48 && code <= 57;\n}\n\nfunction naturalCompare(a, b) {\n var lengthA = (a += '').length;\n var lengthB = (b += '').length;\n var aIndex = 0;\n var bIndex = 0;\n\n while (aIndex < lengthA && bIndex < lengthB) {\n var charCodeA = a.charCodeAt(aIndex);\n var charCodeB = b.charCodeAt(bIndex);\n\n if (isNumberCode(charCodeA)) {\n if (!isNumberCode(charCodeB)) {\n return charCodeA - charCodeB;\n }\n\n var numStartA = aIndex;\n var numStartB = bIndex;\n\n while (charCodeA === 48 && ++numStartA < lengthA) {\n charCodeA = a.charCodeAt(numStartA);\n }\n while (charCodeB === 48 && ++numStartB < lengthB) {\n charCodeB = b.charCodeAt(numStartB);\n }\n\n var numEndA = numStartA;\n var numEndB = numStartB;\n\n while (numEndA < lengthA && isNumberCode(a.charCodeAt(numEndA))) {\n ++numEndA;\n }\n while (numEndB < lengthB && isNumberCode(b.charCodeAt(numEndB))) {\n ++numEndB;\n }\n\n var difference = numEndA - numStartA - numEndB + numStartB; // numA length - numB length\n if (difference) {\n return difference;\n }\n\n while (numStartA < numEndA) {\n difference = a.charCodeAt(numStartA++) - b.charCodeAt(numStartB++);\n if (difference) {\n return difference;\n }\n }\n\n aIndex = numEndA;\n bIndex = numEndB;\n continue;\n }\n\n if (charCodeA !== charCodeB) {\n if (\n charCodeA < alphabetIndexMapLength &&\n charCodeB < alphabetIndexMapLength &&\n alphabetIndexMap[charCodeA] !== -1 &&\n alphabetIndexMap[charCodeB] !== -1\n ) {\n return alphabetIndexMap[charCodeA] - alphabetIndexMap[charCodeB];\n }\n\n return charCodeA - charCodeB;\n }\n\n ++aIndex;\n ++bIndex;\n }\n\n if (aIndex >= lengthA && bIndex < lengthB && lengthA >= lengthB) {\n return -1;\n }\n\n if (bIndex >= lengthB && aIndex < lengthA && lengthB >= lengthA) {\n return 1;\n }\n\n return lengthA - lengthB;\n}\n\nnaturalCompare.caseInsensitive = naturalCompare.i = function(a, b) {\n return naturalCompare(('' + a).toLowerCase(), ('' + b).toLowerCase());\n};\n\nObject.defineProperties(naturalCompare, {\n alphabet: {\n get: function() {\n return alphabet;\n },\n\n set: function(value) {\n alphabet = value;\n alphabetIndexMap = [];\n\n var i = 0;\n\n if (alphabet) {\n for (; i < alphabet.length; i++) {\n alphabetIndexMap[alphabet.charCodeAt(i)] = i;\n }\n }\n\n alphabetIndexMapLength = alphabetIndexMap.length;\n\n for (i = 0; i < alphabetIndexMapLength; i++) {\n if (alphabetIndexMap[i] === undefined) {\n alphabetIndexMap[i] = -1;\n }\n }\n },\n },\n});\n\nmodule.exports = naturalCompare;\n","/**\n * A cross-browser implementation of getAttribute.\n * Source found here: http://stackoverflow.com/a/3755343/361337 written by Vivin Paliath\n *\n * Return the value for `attr` at `element`.\n *\n * @param {Element} el\n * @param {String} attr\n * @api public\n */\n\nmodule.exports = function(el, attr) {\n var result = (el.getAttribute && el.getAttribute(attr)) || null;\n if( !result ) {\n var attrs = el.attributes;\n var length = attrs.length;\n for(var i = 0; i < length; i++) {\n if (attr[i] !== undefined) {\n if(attr[i].nodeName === attr) {\n result = attr[i].nodeValue;\n }\n }\n }\n }\n return result;\n};\n","module.exports = function(list) {\n var addAsync = function(values, callback, items) {\n var valuesToAdd = values.splice(0, 50);\n items = items || [];\n items = items.concat(list.add(valuesToAdd));\n if (values.length > 0) {\n setTimeout(function() {\n addAsync(values, callback, items);\n }, 1);\n } else {\n list.update();\n callback(items);\n }\n };\n return addAsync;\n};\n","var classes = require('./utils/classes'),\n events = require('./utils/events'),\n List = require('./index');\n\nmodule.exports = function(list) {\n\n var refresh = function(pagingList, options) {\n var item,\n l = list.matchingItems.length,\n index = list.i,\n page = list.page,\n pages = Math.ceil(l / page),\n currentPage = Math.ceil((index / page)),\n innerWindow = options.innerWindow || 2,\n left = options.left || options.outerWindow || 0,\n right = options.right || options.outerWindow || 0;\n\n right = pages - right;\n\n pagingList.clear();\n for (var i = 1; i <= pages; i++) {\n var className = (currentPage === i) ? \"active\" : \"\";\n\n //console.log(i, left, right, currentPage, (currentPage - innerWindow), (currentPage + innerWindow), className);\n\n if (is.number(i, left, right, currentPage, innerWindow)) {\n item = pagingList.add({\n page: i,\n dotted: false\n })[0];\n if (className) {\n classes(item.elm).add(className);\n }\n addEvent(item.elm, i, page);\n } else if (is.dotted(pagingList, i, left, right, currentPage, innerWindow, pagingList.size())) {\n item = pagingList.add({\n page: \"...\",\n dotted: true\n })[0];\n classes(item.elm).add(\"disabled\");\n }\n }\n };\n\n var is = {\n number: function(i, left, right, currentPage, innerWindow) {\n return this.left(i, left) || this.right(i, right) || this.innerWindow(i, currentPage, innerWindow);\n },\n left: function(i, left) {\n return (i <= left);\n },\n right: function(i, right) {\n return (i > right);\n },\n innerWindow: function(i, currentPage, innerWindow) {\n return ( i >= (currentPage - innerWindow) && i <= (currentPage + innerWindow));\n },\n dotted: function(pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {\n return this.dottedLeft(pagingList, i, left, right, currentPage, innerWindow) || (this.dottedRight(pagingList, i, left, right, currentPage, innerWindow, currentPageItem));\n },\n dottedLeft: function(pagingList, i, left, right, currentPage, innerWindow) {\n return ((i == (left + 1)) && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right));\n },\n dottedRight: function(pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {\n if (pagingList.items[currentPageItem-1].values().dotted) {\n return false;\n } else {\n return ((i == (right)) && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right));\n }\n }\n };\n\n var addEvent = function(elm, i, page) {\n events.bind(elm, 'click', function() {\n list.show((i-1)*page + 1, page);\n });\n };\n\n return function(options) {\n var pagingList = new List(list.listContainer.id, {\n listClass: options.paginationClass || 'pagination',\n item: \"
  • \",\n valueNames: ['page', 'dotted'],\n searchClass: 'pagination-search-that-is-not-supposed-to-exist',\n sortClass: 'pagination-sort-that-is-not-supposed-to-exist'\n });\n\n list.on('updated', function() {\n refresh(pagingList, options);\n });\n refresh(pagingList, options);\n };\n};\n","module.exports = function(list) {\n\n var Item = require('./item')(list);\n\n var getChildren = function(parent) {\n var nodes = parent.childNodes,\n items = [];\n for (var i = 0, il = nodes.length; i < il; i++) {\n // Only textnodes have a data attribute\n if (nodes[i].data === undefined) {\n items.push(nodes[i]);\n }\n }\n return items;\n };\n\n var parse = function(itemElements, valueNames) {\n for (var i = 0, il = itemElements.length; i < il; i++) {\n list.items.push(new Item(valueNames, itemElements[i]));\n }\n };\n var parseAsync = function(itemElements, valueNames) {\n var itemsToIndex = itemElements.splice(0, 50); // TODO: If < 100 items, what happens in IE etc?\n parse(itemsToIndex, valueNames);\n if (itemElements.length > 0) {\n setTimeout(function() {\n parseAsync(itemElements, valueNames);\n }, 1);\n } else {\n list.update();\n list.trigger('parseComplete');\n }\n };\n\n list.handlers.parseComplete = list.handlers.parseComplete || [];\n\n return function() {\n var itemsToIndex = getChildren(list.list),\n valueNames = list.valueNames;\n\n if (list.indexAsync) {\n parseAsync(itemsToIndex, valueNames);\n } else {\n parse(itemsToIndex, valueNames);\n }\n };\n};\n","var Templater = function(list) {\n var itemSource,\n templater = this;\n\n var init = function() {\n itemSource = templater.getItemSource(list.item);\n if (itemSource) {\n itemSource = templater.clearSourceItem(itemSource, list.valueNames);\n }\n };\n\n this.clearSourceItem = function(el, valueNames) {\n for(var i = 0, il = valueNames.length; i < il; i++) {\n var elm;\n if (valueNames[i].data) {\n for (var j = 0, jl = valueNames[i].data.length; j < jl; j++) {\n el.setAttribute('data-'+valueNames[i].data[j], '');\n }\n } else if (valueNames[i].attr && valueNames[i].name) {\n elm = list.utils.getByClass(el, valueNames[i].name, true);\n if (elm) {\n elm.setAttribute(valueNames[i].attr, \"\");\n }\n } else {\n elm = list.utils.getByClass(el, valueNames[i], true);\n if (elm) {\n elm.innerHTML = \"\";\n }\n }\n elm = undefined;\n }\n return el;\n };\n\n this.getItemSource = function(item) {\n if (item === undefined) {\n var nodes = list.list.childNodes,\n items = [];\n\n for (var i = 0, il = nodes.length; i < il; i++) {\n // Only textnodes have a data attribute\n if (nodes[i].data === undefined) {\n return nodes[i].cloneNode(true);\n }\n }\n } else if (/]/g.exec(item)) {\n var tbody = document.createElement('tbody');\n tbody.innerHTML = item;\n return tbody.firstChild;\n } else if (item.indexOf(\"<\") !== -1) {\n var div = document.createElement('div');\n div.innerHTML = item;\n return div.firstChild;\n } else {\n var source = document.getElementById(list.item);\n if (source) {\n return source;\n }\n }\n return undefined;\n };\n\n this.get = function(item, valueNames) {\n templater.create(item);\n var values = {};\n for(var i = 0, il = valueNames.length; i < il; i++) {\n var elm;\n if (valueNames[i].data) {\n for (var j = 0, jl = valueNames[i].data.length; j < jl; j++) {\n values[valueNames[i].data[j]] = list.utils.getAttribute(item.elm, 'data-'+valueNames[i].data[j]);\n }\n } else if (valueNames[i].attr && valueNames[i].name) {\n elm = list.utils.getByClass(item.elm, valueNames[i].name, true);\n values[valueNames[i].name] = elm ? list.utils.getAttribute(elm, valueNames[i].attr) : \"\";\n } else {\n elm = list.utils.getByClass(item.elm, valueNames[i], true);\n values[valueNames[i]] = elm ? elm.innerHTML : \"\";\n }\n elm = undefined;\n }\n return values;\n };\n\n this.set = function(item, values) {\n var getValueName = function(name) {\n for (var i = 0, il = list.valueNames.length; i < il; i++) {\n if (list.valueNames[i].data) {\n var data = list.valueNames[i].data;\n for (var j = 0, jl = data.length; j < jl; j++) {\n if (data[j] === name) {\n return { data: name };\n }\n }\n } else if (list.valueNames[i].attr && list.valueNames[i].name && list.valueNames[i].name == name) {\n return list.valueNames[i];\n } else if (list.valueNames[i] === name) {\n return name;\n }\n }\n };\n var setValue = function(name, value) {\n var elm;\n var valueName = getValueName(name);\n if (!valueName)\n return;\n if (valueName.data) {\n item.elm.setAttribute('data-'+valueName.data, value);\n } else if (valueName.attr && valueName.name) {\n elm = list.utils.getByClass(item.elm, valueName.name, true);\n if (elm) {\n elm.setAttribute(valueName.attr, value);\n }\n } else {\n elm = list.utils.getByClass(item.elm, valueName, true);\n if (elm) {\n elm.innerHTML = value;\n }\n }\n elm = undefined;\n };\n if (!templater.create(item)) {\n for(var v in values) {\n if (values.hasOwnProperty(v)) {\n setValue(v, values[v]);\n }\n }\n }\n };\n\n this.create = function(item) {\n if (item.elm !== undefined) {\n return false;\n }\n if (itemSource === undefined) {\n throw new Error(\"The list need to have at list one item on init otherwise you'll have to add a template.\");\n }\n /* If item source does not exists, use the first item in list as\n source for new items */\n var newItem = itemSource.cloneNode(true);\n newItem.removeAttribute('id');\n item.elm = newItem;\n templater.set(item, item.values());\n return true;\n };\n this.remove = function(item) {\n if (item.elm.parentNode === list.list) {\n list.list.removeChild(item.elm);\n }\n };\n this.show = function(item) {\n templater.create(item);\n list.list.appendChild(item.elm);\n };\n this.hide = function(item) {\n if (item.elm !== undefined && item.elm.parentNode === list.list) {\n list.list.removeChild(item.elm);\n }\n };\n this.clear = function() {\n /* .innerHTML = ''; fucks up IE */\n if (list.list.hasChildNodes()) {\n while (list.list.childNodes.length >= 1)\n {\n list.list.removeChild(list.list.firstChild);\n }\n }\n };\n\n init();\n};\n\nmodule.exports = function(list) {\n return new Templater(list);\n};\n","module.exports = function(list) {\n var item,\n text,\n columns,\n searchString,\n customSearch;\n\n var prepare = {\n resetList: function() {\n list.i = 1;\n list.templater.clear();\n customSearch = undefined;\n },\n setOptions: function(args) {\n if (args.length == 2 && args[1] instanceof Array) {\n columns = args[1];\n } else if (args.length == 2 && typeof(args[1]) == \"function\") {\n columns = undefined;\n customSearch = args[1];\n } else if (args.length == 3) {\n columns = args[1];\n customSearch = args[2];\n } else {\n columns = undefined;\n }\n },\n setColumns: function() {\n if (list.items.length === 0) return;\n if (columns === undefined) {\n columns = (list.searchColumns === undefined) ? prepare.toArray(list.items[0].values()) : list.searchColumns;\n }\n },\n setSearchString: function(s) {\n s = list.utils.toString(s).toLowerCase();\n s = s.replace(/[-[\\]{}()*+?.,\\\\^$|#]/g, \"\\\\$&\"); // Escape regular expression characters\n searchString = s;\n },\n toArray: function(values) {\n var tmpColumn = [];\n for (var name in values) {\n tmpColumn.push(name);\n }\n return tmpColumn;\n }\n };\n var search = {\n list: function() {\n for (var k = 0, kl = list.items.length; k < kl; k++) {\n search.item(list.items[k]);\n }\n },\n item: function(item) {\n item.found = false;\n for (var j = 0, jl = columns.length; j < jl; j++) {\n if (search.values(item.values(), columns[j])) {\n item.found = true;\n return;\n }\n }\n },\n values: function(values, column) {\n if (values.hasOwnProperty(column)) {\n text = list.utils.toString(values[column]).toLowerCase();\n if ((searchString !== \"\") && (text.search(searchString) > -1)) {\n return true;\n }\n }\n return false;\n },\n reset: function() {\n list.reset.search();\n list.searched = false;\n }\n };\n\n var searchMethod = function(str) {\n list.trigger('searchStart');\n\n prepare.resetList();\n prepare.setSearchString(str);\n prepare.setOptions(arguments); // str, cols|searchFunction, searchFunction\n prepare.setColumns();\n\n if (searchString === \"\" ) {\n search.reset();\n } else {\n list.searched = true;\n if (customSearch) {\n customSearch(searchString, columns);\n } else {\n search.list();\n }\n }\n\n list.update();\n list.trigger('searchComplete');\n return list.visibleItems;\n };\n\n list.handlers.searchStart = list.handlers.searchStart || [];\n list.handlers.searchComplete = list.handlers.searchComplete || [];\n\n list.utils.events.bind(list.utils.getByClass(list.listContainer, list.searchClass), 'keyup', function(e) {\n var target = e.target || e.srcElement, // IE have srcElement\n alreadyCleared = (target.value === \"\" && !list.searched);\n if (!alreadyCleared) { // If oninput already have resetted the list, do nothing\n searchMethod(target.value);\n }\n });\n\n // Used to detect click on HTML5 clear button\n list.utils.events.bind(list.utils.getByClass(list.listContainer, list.searchClass), 'input', function(e) {\n var target = e.target || e.srcElement;\n if (target.value === \"\") {\n searchMethod('');\n }\n });\n\n return searchMethod;\n};\n","module.exports = function(list) {\n\n // Add handlers\n list.handlers.filterStart = list.handlers.filterStart || [];\n list.handlers.filterComplete = list.handlers.filterComplete || [];\n\n return function(filterFunction) {\n list.trigger('filterStart');\n list.i = 1; // Reset paging\n list.reset.filter();\n if (filterFunction === undefined) {\n list.filtered = false;\n } else {\n list.filtered = true;\n var is = list.items;\n for (var i = 0, il = is.length; i < il; i++) {\n var item = is[i];\n if (filterFunction(item)) {\n item.filtered = true;\n } else {\n item.filtered = false;\n }\n }\n }\n list.update();\n list.trigger('filterComplete');\n return list.visibleItems;\n };\n};\n","module.exports = function(list) {\n\n var buttons = {\n els: undefined,\n clear: function() {\n for (var i = 0, il = buttons.els.length; i < il; i++) {\n list.utils.classes(buttons.els[i]).remove('asc');\n list.utils.classes(buttons.els[i]).remove('desc');\n }\n },\n getOrder: function(btn) {\n var predefinedOrder = list.utils.getAttribute(btn, 'data-order');\n if (predefinedOrder == \"asc\" || predefinedOrder == \"desc\") {\n return predefinedOrder;\n } else if (list.utils.classes(btn).has('desc')) {\n return \"asc\";\n } else if (list.utils.classes(btn).has('asc')) {\n return \"desc\";\n } else {\n return \"asc\";\n }\n },\n getInSensitive: function(btn, options) {\n var insensitive = list.utils.getAttribute(btn, 'data-insensitive');\n if (insensitive === \"false\") {\n options.insensitive = false;\n } else {\n options.insensitive = true;\n }\n },\n setOrder: function(options) {\n for (var i = 0, il = buttons.els.length; i < il; i++) {\n var btn = buttons.els[i];\n if (list.utils.getAttribute(btn, 'data-sort') !== options.valueName) {\n continue;\n }\n var predefinedOrder = list.utils.getAttribute(btn, 'data-order');\n if (predefinedOrder == \"asc\" || predefinedOrder == \"desc\") {\n if (predefinedOrder == options.order) {\n list.utils.classes(btn).add(options.order);\n }\n } else {\n list.utils.classes(btn).add(options.order);\n }\n }\n }\n };\n\n var sort = function() {\n list.trigger('sortStart');\n var options = {};\n\n var target = arguments[0].currentTarget || arguments[0].srcElement || undefined;\n\n if (target) {\n options.valueName = list.utils.getAttribute(target, 'data-sort');\n buttons.getInSensitive(target, options);\n options.order = buttons.getOrder(target);\n } else {\n options = arguments[1] || options;\n options.valueName = arguments[0];\n options.order = options.order || \"asc\";\n options.insensitive = (typeof options.insensitive == \"undefined\") ? true : options.insensitive;\n }\n\n buttons.clear();\n buttons.setOrder(options);\n\n\n // caseInsensitive\n // alphabet\n var customSortFunction = (options.sortFunction || list.sortFunction || null),\n multi = ((options.order === 'desc') ? -1 : 1),\n sortFunction;\n\n if (customSortFunction) {\n sortFunction = function(itemA, itemB) {\n return customSortFunction(itemA, itemB, options) * multi;\n };\n } else {\n sortFunction = function(itemA, itemB) {\n var sort = list.utils.naturalSort;\n sort.alphabet = list.alphabet || options.alphabet || undefined;\n if (!sort.alphabet && options.insensitive) {\n sort = list.utils.naturalSort.caseInsensitive;\n }\n return sort(itemA.values()[options.valueName], itemB.values()[options.valueName]) * multi;\n };\n }\n\n list.items.sort(sortFunction);\n list.update();\n list.trigger('sortComplete');\n };\n\n // Add handlers\n list.handlers.sortStart = list.handlers.sortStart || [];\n list.handlers.sortComplete = list.handlers.sortComplete || [];\n\n buttons.els = list.utils.getByClass(list.listContainer, list.sortClass);\n list.utils.events.bind(buttons.els, 'click', sort);\n list.on('searchStart', buttons.clear);\n list.on('filterStart', buttons.clear);\n\n return sort;\n};\n","\nvar classes = require('./utils/classes'),\n events = require('./utils/events'),\n extend = require('./utils/extend'),\n toString = require('./utils/to-string'),\n getByClass = require('./utils/get-by-class'),\n fuzzy = require('./utils/fuzzy');\n\nmodule.exports = function(list, options) {\n options = options || {};\n\n options = extend({\n location: 0,\n distance: 100,\n threshold: 0.4,\n multiSearch: true,\n searchClass: 'fuzzy-search'\n }, options);\n\n\n\n var fuzzySearch = {\n search: function(searchString, columns) {\n // Substract arguments from the searchString or put searchString as only argument\n var searchArguments = options.multiSearch ? searchString.replace(/ +$/, '').split(/ +/) : [searchString];\n\n for (var k = 0, kl = list.items.length; k < kl; k++) {\n fuzzySearch.item(list.items[k], columns, searchArguments);\n }\n },\n item: function(item, columns, searchArguments) {\n var found = true;\n for(var i = 0; i < searchArguments.length; i++) {\n var foundArgument = false;\n for (var j = 0, jl = columns.length; j < jl; j++) {\n if (fuzzySearch.values(item.values(), columns[j], searchArguments[i])) {\n foundArgument = true;\n }\n }\n if(!foundArgument) {\n found = false;\n }\n }\n item.found = found;\n },\n values: function(values, value, searchArgument) {\n if (values.hasOwnProperty(value)) {\n var text = toString(values[value]).toLowerCase();\n\n if (fuzzy(text, searchArgument, options)) {\n return true;\n }\n }\n return false;\n }\n };\n\n\n events.bind(getByClass(list.listContainer, options.searchClass), 'keyup', function(e) {\n var target = e.target || e.srcElement; // IE have srcElement\n list.search(target.value, fuzzySearch.search);\n });\n\n return function(str, columns) {\n list.search(str, columns, fuzzySearch.search);\n };\n};\n","module.exports = function(text, pattern, options) {\n // Aproximately where in the text is the pattern expected to be found?\n var Match_Location = options.location || 0;\n\n //Determines how close the match must be to the fuzzy location (specified above). An exact letter match which is 'distance' characters away from the fuzzy location would score as a complete mismatch. A distance of '0' requires the match be at the exact location specified, a threshold of '1000' would require a perfect match to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n var Match_Distance = options.distance || 100;\n\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match (of both letters and location), a threshold of '1.0' would match anything.\n var Match_Threshold = options.threshold || 0.4;\n\n if (pattern === text) return true; // Exact match\n if (pattern.length > 32) return false; // This algorithm cannot be used\n\n // Set starting location at beginning text and initialise the alphabet.\n var loc = Match_Location,\n s = (function() {\n var q = {},\n i;\n\n for (i = 0; i < pattern.length; i++) {\n q[pattern.charAt(i)] = 0;\n }\n\n for (i = 0; i < pattern.length; i++) {\n q[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n\n return q;\n }());\n\n // Compute and return the score for a match with e errors and x location.\n // Accesses loc and pattern through being a closure.\n\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length,\n proximity = Math.abs(loc - x);\n\n if (!Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / Match_Distance);\n }\n\n var score_threshold = Match_Threshold, // Highest score beyond which we give up.\n best_loc = text.indexOf(pattern, loc); // Is there a nearby exact match? (speedup)\n\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n\n return (best_loc < 0) ? false : true;\n};\n","/* Triggered by SCR events, integrates with Insights */\r\nvar ReviewsList = {\r\n init: function(nonce) {\r\n console.log(\"nonce: \" + nonce);\r\n // this.eventHandler();\r\n },\r\n\r\n /* EVENTS API */\r\n\r\n /* Auto-ordering methods */\r\n clickCounter: function(id) {\r\n this.ajaxRequest(id);\r\n },\r\n\r\n /* INTERNAL METHODS */\r\n ajaxRequest: function(id) {\r\n var thisModule = this;\r\n\r\n var data = {\r\n action: \"scr_listing_action\",\r\n nonce: thisModule.nonce,\r\n id: id\r\n };\r\n\r\n jQuery.post(my_scr_ajax_object.ajax_url, data, function(response) {\r\n console.log(response);\r\n });\r\n }\r\n};\r\n\r\nmodule.exports = ReviewsList;\r\n","\r\nvar Slider = require(\"./slider.js\");\r\nvar Gallery = require(\"./gallery.js\");\r\nvar Upload = require(\"./upload.js\");\r\n\r\nvar PhotosReview = {\r\n init: function () {\r\n Slider.init();\r\n Gallery.init();\r\n Upload.init();\r\n },\r\n};\r\n\r\nmodule.exports = PhotosReview;","var Modal = require(\"./modal.js\");\r\nvar Slider = require(\"./slider.js\");\r\n\r\nvar triggerOnce = false;\r\n\r\nvar selectors = {\r\n showGallery: \".show-gallery\",\r\n gallery: \".photos-gallery\",\r\n\r\n singleReviewPhotos: \".review-photos .image\",\r\n singleGalleryPhotos: \".photos-gallery .card\",\r\n singleGalleryPhotosPreview: \".photos-gallery-preview .image\",\r\n\r\n modal: \"#photos-review-modal\",\r\n modalClose: \"#photos-review-modal .close.icon\",\r\n\r\n sliderTop: \".photos-review-slider-top\",\r\n sliderThumbs: \".photos-review-slider-thumbs\",\r\n\r\n gallerySection: \".gallery-section\",\r\n sliderSection: \".slider-section\",\r\n\r\n goBackToGallery: \".slider-section .header .arrow.left\"\r\n};\r\n\r\nvar Gallery = {\r\n init: function () {\r\n this.eventHandler();\r\n },\r\n\r\n eventHandler: function () {\r\n this.showGallery();\r\n this.goBackToGallery();\r\n this.onReviewPhotosClick();\r\n this.onGalleryPhotosClick();\r\n this.onGalleryPhotosPreviewClick();\r\n\r\n Modal.init(selectors.modal, selectors.modalClose);\r\n },\r\n\r\n showGallery: function () {\r\n var thisModule = this;\r\n\r\n jQuery(selectors.showGallery).click(function (e) {\r\n e.stopPropagation();\r\n Modal.show(selectors.modal);\r\n jQuery(selectors.gallerySection).show();\r\n jQuery(selectors.sliderSection).hide().find('.header').show();\r\n thisModule.addRestOfThePhotosOnce();\r\n });\r\n\r\n },\r\n\r\n goBackToGallery: function () {\r\n jQuery(selectors.goBackToGallery).click(function () {\r\n jQuery(selectors.gallerySection).show();\r\n jQuery(selectors.sliderSection).hide();\r\n });\r\n },\r\n\r\n addRestOfThePhotosOnce: function () {\r\n // Trigger once Gallery events because we attach the rest of the ajax request after succsessful response \r\n if (triggerOnce)\r\n return;\r\n triggerOnce = true;\r\n\r\n Gallery.addRestOfThePhotos();\r\n },\r\n\r\n addRestOfThePhotos: function () {\r\n\r\n var thisModule = this;\r\n var shownGallery = jQuery(selectors.showGallery);\r\n var gallery = jQuery(selectors.gallery);\r\n\r\n var limit = shownGallery.data(\"limit\");\r\n var shownCount = shownGallery.data(\"shown-count\");\r\n var totalCount = shownGallery.data(\"total-count\");\r\n\r\n var data = {\r\n action: \"scr_photo_reviews\",\r\n limit: limit,\r\n from: shownCount,\r\n shownCount: shownCount,\r\n totalCount: totalCount,\r\n };\r\n\r\n if (shownCount !== totalCount) {\r\n var placeholdersHTML = this.getCardPlaceholders(data);\r\n gallery.append(placeholdersHTML);\r\n\r\n jQuery.post(scr_ajax.ajax_url, data, function (results) {\r\n results = JSON.parse(results);\r\n thisModule.setImagesFromPlaceholder(results);\r\n thisModule.addRestOfThePhotos();\r\n thisModule.onGalleryPhotosClick();\r\n });\r\n }\r\n },\r\n\r\n onReviewPhotosClick: function () {\r\n var singleReviewPhotos = jQuery(selectors.singleReviewPhotos);\r\n singleReviewPhotos.unbind();\r\n\r\n singleReviewPhotos.click(function () {\r\n\r\n // Show Modal\r\n Modal.show(selectors.modal);\r\n jQuery(selectors.gallerySection).hide();\r\n jQuery(selectors.sliderSection).show().find('.header').hide();\r\n\r\n // Slider Controls \r\n var reviewID = jQuery(this).data('review-id');\r\n Slider.showSlider(Slider.getProps(reviewID, 'review'));\r\n });\r\n },\r\n\r\n onGalleryPhotosClick: function () {\r\n var singleGalleryPhotos = jQuery(selectors.singleGalleryPhotos);\r\n singleGalleryPhotos.unbind();\r\n\r\n singleGalleryPhotos.click(function () {\r\n\r\n // Show Modal\r\n jQuery(selectors.gallerySection).hide();\r\n jQuery(selectors.sliderSection).show();\r\n\r\n // Slider Controls \r\n var reviewID = jQuery(this).data('review-id');\r\n Slider.showSlider(Slider.getProps(reviewID, 'gallery'));\r\n });\r\n },\r\n\r\n onGalleryPhotosPreviewClick: function () {\r\n var singleGalleryPhotosPreview = jQuery(selectors.singleGalleryPhotosPreview);\r\n\r\n singleGalleryPhotosPreview.click(function () {\r\n // Show modal\r\n Modal.show(selectors.modal);\r\n jQuery(selectors.gallerySection).hide();\r\n jQuery(selectors.sliderSection).show().find('.header').hide();\r\n\r\n // Slider Controls\r\n var reviewID = jQuery(this).data('review-id');\r\n Slider.showSlider(Slider.getProps(reviewID, 'gallery'));\r\n\r\n Gallery.addRestOfThePhotosOnce();\r\n });\r\n },\r\n\r\n\r\n setImagesFromPlaceholder: function (images) {\r\n var gallery = jQuery(selectors.gallery);\r\n var shownGallery = jQuery(selectors.showGallery);\r\n var cardPlaceholder = gallery.find(\".card-placeholder\");\r\n var shownCount = shownGallery.data(\"shown-count\");\r\n\r\n for (var index = 0; index < images.length; index++) {\r\n var card = jQuery(cardPlaceholder[index]);\r\n card.removeClass('card-placeholder');\r\n card.attr('data-review-id', images[index].review_id);\r\n card.html(\"\");\r\n }\r\n\r\n shownGallery.data(\"shown-count\", shownCount + images.length);\r\n },\r\n\r\n getCardPlaceholders: function (data) {\r\n var sum = data.totalCount - data.shownCount;\r\n var loopLimit = (sum >= data.limit) ? data.limit : sum;\r\n var cardHTML = '';\r\n for (var index = 0; index < loopLimit; index++) {\r\n cardHTML += this.getCardPlaceholderHtml(data);\r\n }\r\n return cardHTML;\r\n },\r\n\r\n getCardPlaceholderHtml: function (data) {\r\n var html = '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n return html;\r\n }\r\n};\r\n\r\n\r\nmodule.exports = Gallery;","var active = \"visible active\";\r\nvar Modal = {\r\n init: function (selector, closeSelector) {\r\n var thisModule = this;\r\n var element = jQuery(selector);\r\n\r\n // Move Modal to Bottom\r\n element.parent().appendTo('body');\r\n\r\n thisModule.close(element);\r\n\r\n jQuery(closeSelector).click(function () {\r\n thisModule.close(element);\r\n });\r\n },\r\n\r\n show: function (selector) {\r\n var element = jQuery(selector);\r\n\r\n element.parent().attr('style', 'display: flex !important').addClass(active);\r\n element.addClass(active).show();\r\n element.find(\"input\").first().focus();\r\n },\r\n\r\n close: function (element) {\r\n element.parent().css(\"display\", \"none\").removeClass(active);\r\n element.removeClass(active).hide();\r\n element.find(\"input\").first().blur();\r\n }\r\n};\r\n\r\nmodule.exports = Modal;\r\n","jQuery(document).ready(function($) {\r\n console.log(\"comparison table\");\r\n\r\n function productsTable(element) {\r\n this.element = element;\r\n this.table = this.element.children(\".cd-products-table\");\r\n this.features = this.table.find(\".features\");\r\n this.featuresWidth = this.features.width();\r\n this.featureItems = this.features.find(\"#scr-stats-list\");\r\n this.tableHeight = this.table.height();\r\n this.productsWrapper = this.table.children(\".cd-products-wrapper\");\r\n this.tableColumns = this.productsWrapper.children(\r\n \".cd-products-columns\"\r\n );\r\n this.tableColumns.css('margin-left',this.featuresWidth+'px');\r\n this.products = this.tableColumns.children(\".product\");\r\n this.productsNumber = this.products.length;\r\n this.productWidth = this.products.eq(0).width();\r\n this.productsTopInfo = this.table.find(\".top-info\"); \r\n this.singleProductTopInfo = this.products.find(\".top-info\");\r\n this.productCloseBtn = this.singleProductTopInfo.find(\".close-product\");\r\n // this.searchContainer = this.productsTopInfo.find(\".ui.search\");\r\n // this.searchContainer = this.productSearchContainer();\r\n this.featuresTopInfo = this.table\r\n .children(\".features\")\r\n .children(\".top-info\");\r\n this.features = this.table.find(\".features\");\r\n this.featuresColumn = this.features.find(\".cd-features-list\");\r\n this.topInfoHeight = this.featuresTopInfo.innerHeight() + 30;\r\n this.leftScrolling = false;\r\n this.filterBtn = this.element.find(\".filter\");\r\n this.resetBtn = this.element.find(\".reset\");\r\n (this.filtering = false), (this.selectedproductsNumber = 0);\r\n this.filterActive = false;\r\n this.navigation = this.table.children(\".cd-table-navigation\");\r\n this.productsTopHeights = this.table.find('.top-info').map(function(){ return $(this).outerHeight(true); }).get();\r\n this.productsMaxHeight = Math.max.apply(null,this.productsTopHeights);\r\n this.productsTopInfo.css('minHeight',this.productsMaxHeight+'px');\r\n this.productsSearchContainer = this.tableColumns.find('.scr-search-filter-wrapper');\r\n if(this.productsSearchContainer.length > 0){\r\n this.productsSearchContainer.find('.cd-features-list').css('minHeight',this.featuresColumn.outerHeight(true)+'px');\r\n }\r\n // bind table events\r\n this.bindEvents();\r\n }\r\n\r\n productsTable.prototype.bindEvents = function() {\r\n var self = this;\r\n //detect scroll left inside producst table\r\n self.productsWrapper.on(\"scroll\", function() {\r\n if (!self.leftScrolling) {\r\n self.leftScrolling = true;\r\n !window.requestAnimationFrame\r\n ? setTimeout(function() {\r\n self.updateLeftScrolling();\r\n }, 250)\r\n : window.requestAnimationFrame(function() {\r\n self.updateLeftScrolling();\r\n });\r\n }\r\n });\r\n //select single product to filter\r\n self.products.off().on(\"click\", \".top-info\", function(e) {\r\n // e.stopPropagation();\r\n var product = $(this).parents(\".product\");\r\n\r\n if (product.hasClass(\"scr-search-filter-wrapper\")) {\r\n return true;\r\n } else {\r\n if (!self.filtering && product.hasClass(\"selected\")) {\r\n product.removeClass(\"selected\");\r\n self.selectedproductsNumber =\r\n self.selectedproductsNumber - 1;\r\n self.upadteFilterBtn();\r\n } else if (!self.filtering && !product.hasClass(\"selected\")) {\r\n product.addClass(\"selected\");\r\n self.selectedproductsNumber =\r\n self.selectedproductsNumber + 1;\r\n self.upadteFilterBtn();\r\n }\r\n }\r\n });\r\n //filter products\r\n self.filterBtn.on(\"click\", function(event) {\r\n event.preventDefault();\r\n if (self.filterActive) {\r\n self.filtering = true;\r\n self.showSelection();\r\n self.filterActive = false;\r\n self.filterBtn.removeClass(\"active\");\r\n }\r\n });\r\n //reset product selection\r\n self.resetBtn.on(\"click\", function(event) {\r\n event.preventDefault();\r\n\r\n if (self.filtering) {\r\n self.filtering = false;\r\n self.resetSelection();\r\n } else {\r\n self.products.removeClass(\"selected\");\r\n }\r\n self.selectedproductsNumber = 0;\r\n self.upadteFilterBtn();\r\n });\r\n\r\n //scroll inside products table\r\n this.navigation.on(\"click\", \"a\", function(event) {\r\n event.preventDefault();\r\n self.updateSlider($(event.target).hasClass(\"next\"));\r\n });\r\n\r\n //New Product Close Event\r\n self.products.on(\"click\", \".top-info .close-product\", function(event) {\r\n event.stopPropagation();\r\n var that = self;\r\n var product = $(this).closest(\".product\");\r\n product.remove();\r\n var products = self.tableColumns.children(\".product\");\r\n self.products = [];\r\n self.products = products;\r\n noOfProducts = self.products.length;\r\n self.productsNumber = noOfProducts;\r\n self.productWidth = self.products.eq(0).width();\r\n self.productsTopInfo = self.table.find(\".top-info\");\r\n that.bindEvents();\r\n self.updateProductTable();\r\n });\r\n\r\n //Add Search Product\r\n var search_data = {\r\n action: \"scr_search_posts\",\r\n nonce: scr_ajax.ajax_nonce,\r\n };\r\n\r\n $.post(scr_ajax.ajax_url, search_data, function(results) {\r\n results = JSON.parse(results);\r\n $(\".ui.search.scr-product-search\").search({\r\n source: results,\r\n onSelect: function(result) {\r\n var that = self;\r\n console.log(\"get product element\");\r\n // debugger;\r\n console.log(result);\r\n var productContent = self.productElement(result);\r\n\r\n $(\".scr-search-filter-wrapper\").before(productContent);\r\n // self.refreshProductTable();\r\n var products = self.tableColumns.children(\".product\");\r\n self.products = [];\r\n self.products = products;\r\n noOfProducts = self.products.length;\r\n self.productsNumber = noOfProducts;\r\n self.productWidth = self.products.eq(0).width();\r\n self.productsTopInfo = self.table.find(\".top-info\");\r\n that.bindEvents();\r\n self.updateProductTable();\r\n \r\n },\r\n onResultsClose: function() {\r\n //Select After callback function\r\n //Clear search query\r\n console.log(\"closed\");\r\n // $(\".ui.search\").search(\"set value\", \"\");\r\n setTimeout (function(){ \r\n $(\".ui.search.scr-product-search\").search(\"set value\", \"\");\r\n $(\".ui.search.scr-product-search\").search(\"query\");\r\n }, 500);\r\n \r\n },\r\n // onResultsAdd: function(html) {},\r\n });\r\n });\r\n };\r\n\r\n //create Product Items\r\n productsTable.prototype.productElement = function(args) {\r\n var self = this;\r\n\r\n var content = \"\";\r\n content += \"
    \";\r\n content += \"
    \";\r\n content += \"
    \";\r\n content +=\r\n \"\";\r\n content += \"
    \";\r\n content += \"
    \";\r\n if (args.image_url === \"undefined\" || args.image_url == null) {\r\n content += \"\";\r\n } else {\r\n content +=\r\n '';\r\n }\r\n content += '

    ' + args.title + '

    ';\r\n content += '
      ';\r\n content += self.createSCRProductStatList(args);\r\n content += \"
    \";\r\n // content += \"\";\r\n\r\n content += \"
    \";\r\n\r\n return content;\r\n };\r\n\r\n productsTable.prototype.refreshProductTable = function() {\r\n console.log(\"reloading scr ct \");\r\n var self = this;\r\n\r\n var scr_stat_table_column = self.getSCRTableColumns();\r\n var productInfos = self.table.find(\".top-info\");\r\n lastIndex = productInfos.length - 1;\r\n\r\n productInfos.each(function(index) {\r\n if (index != 0 && index != lastIndex) {\r\n //Parent ul.cd-features-list\r\n var $parentElement = $(this).next();\r\n var $parentProduct = $(this).closest(\".product\");\r\n var singleProductStats = [];\r\n $parentProduct.find(\"ul.cd-features-list li\").each(function() {\r\n if (\r\n $(this).data(\"stat\") !== undefined &&\r\n $(this).data(\"stat\") !== \"undefined\"\r\n ) {\r\n dataStat = $(this)\r\n .attr(\"data-stat\")\r\n .trim();\r\n singleProductStats.push(dataStat);\r\n }\r\n });\r\n\r\n for (var i = 0; i < scr_stat_table_column.length; i++) {\r\n table_stat_name = scr_stat_table_column[i];\r\n if ($.inArray(table_stat_name, singleProductStats) != -1) {\r\n } else {\r\n content = \"\";\r\n content =\r\n '
  • X
  • ';\r\n $parentElement.append(content);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n productsTable.prototype.createSCRProductStatList = function(args) {\r\n var self = this;\r\n console.log(\"this stat list \");\r\n get_user_stats = args.user_stats;\r\n overall_stat = args.get_overall_stat;\r\n rating_view = overall_stat.dom;\r\n stat_list = get_user_stats.review_stats;\r\n var content = \"\";\r\n for (let key in stat_list) {\r\n if (stat_list.hasOwnProperty(key)) {\r\n if (key === \"scr_ct_ratings\") {\r\n content += \"
  • \";\r\n content += rating_view;\r\n content += \"
  • \";\r\n } else {\r\n content += \"
  • \";\r\n content +=\r\n stat_list[key].rating == 0\r\n ? \"X\"\r\n : stat_list[key].rating;\r\n content += \"
  • \";\r\n }\r\n }\r\n }\r\n return content;\r\n };\r\n\r\n //get SCR CT feature columns\r\n productsTable.prototype.getSCRTableColumns = function() {\r\n var self = this;\r\n var scr_ct_feature_columns = [];\r\n if (self.featureItems.find(\"li\").length > 0) {\r\n self.featureItems.find(\"li\").each(function() {\r\n scr_ct_feature_columns.push(\r\n $(this)\r\n .text()\r\n .trim()\r\n );\r\n });\r\n }\r\n return scr_ct_feature_columns;\r\n };\r\n\r\n productsTable.prototype.upadteFilterBtn = function() {\r\n //show/hide filter btn\r\n if (this.selectedproductsNumber >= 2) {\r\n this.filterActive = true;\r\n this.filterBtn.addClass(\"active\");\r\n } else {\r\n this.filterActive = false;\r\n this.filterBtn.removeClass(\"active\");\r\n }\r\n };\r\n\r\n productsTable.prototype.updateLeftScrolling = function() {\r\n var totalTableWidth = parseInt(\r\n this.tableColumns.eq(0).outerWidth(true)\r\n ),\r\n tableViewport = parseInt(this.element.width()),\r\n scrollLeft = this.productsWrapper.scrollLeft();\r\n\r\n scrollLeft > 0\r\n ? this.table.addClass(\"scrolling\")\r\n : this.table.removeClass(\"scrolling\");\r\n\r\n if (this.table.hasClass(\"top-fixed\") && checkMQ() == \"desktop\") {\r\n setTranformX(this.productsTopInfo, \"-\" + scrollLeft);\r\n setTranformX(this.featuresTopInfo, \"0\");\r\n }\r\n\r\n this.leftScrolling = false;\r\n\r\n this.updateNavigationVisibility(scrollLeft);\r\n };\r\n\r\n productsTable.prototype.updateNavigationVisibility = function(scrollLeft) {\r\n scrollLeft > 0\r\n ? this.navigation.find(\".prev\").removeClass(\"inactive\")\r\n : this.navigation.find(\".prev\").addClass(\"inactive\");\r\n scrollLeft <\r\n this.tableColumns.outerWidth(true) - this.productsWrapper.width() &&\r\n this.tableColumns.outerWidth(true) > this.productsWrapper.width()\r\n ? this.navigation.find(\".next\").removeClass(\"inactive\")\r\n : this.navigation.find(\".next\").addClass(\"inactive\");\r\n };\r\n\r\n productsTable.prototype.updateTopScrolling = function(scrollTop) {\r\n var offsetTop = this.table.offset().top,\r\n tableScrollLeft = this.productsWrapper.scrollLeft();\r\n\r\n if (\r\n offsetTop <= scrollTop &&\r\n offsetTop + this.tableHeight - this.topInfoHeight >= scrollTop\r\n ) {\r\n //fix products top-info && arrows navigation\r\n if (\r\n !this.table.hasClass(\"top-fixed\") &&\r\n $(document).height() > offsetTop + $(window).height() + 200\r\n ) {\r\n this.table.addClass(\"top-fixed\").removeClass(\"top-scrolling\");\r\n if (checkMQ() == \"desktop\") {\r\n this.productsTopInfo.css(\"top\", \"0\");\r\n this.navigation.find(\"a\").css(\"top\", \"0px\");\r\n }\r\n }\r\n } else if (offsetTop <= scrollTop) {\r\n //product top-info && arrows navigation - scroll with table\r\n this.table.removeClass(\"top-fixed\").addClass(\"top-scrolling\");\r\n if (checkMQ() == \"desktop\") {\r\n this.productsTopInfo.css(\r\n \"top\",\r\n this.tableHeight - this.topInfoHeight + \"px\"\r\n );\r\n this.navigation\r\n .find(\"a\")\r\n .css(\"top\", this.tableHeight - this.topInfoHeight + \"px\");\r\n }\r\n } else {\r\n //product top-info && arrows navigation - reset style\r\n this.table.removeClass(\"top-fixed top-scrolling\");\r\n this.productsTopInfo.attr(\"style\", \"\");\r\n this.navigation.find(\"a\").attr(\"style\", \"\");\r\n }\r\n\r\n this.updateLeftScrolling();\r\n };\r\n\r\n productsTable.prototype.updateProperties = function() {\r\n this.tableHeight = this.table.height();\r\n this.productWidth = this.products.eq(0).width();\r\n this.topInfoHeight = this.featuresTopInfo.innerHeight() + 30;\r\n this.tableColumns.css(\r\n \"width\",\r\n this.productWidth * this.productsNumber + \"px\"\r\n );\r\n };\r\n\r\n productsTable.prototype.showSelection = function() {\r\n this.element.addClass(\"filtering\");\r\n this.filterProducts();\r\n };\r\n\r\n productsTable.prototype.resetSelection = function() {\r\n this.tableColumns.css(\r\n \"width\",\r\n this.productWidth * this.productsNumber + \"px\"\r\n );\r\n this.element.removeClass(\"no-product-transition\");\r\n this.resetProductsVisibility();\r\n };\r\n\r\n productsTable.prototype.updateProductTable = function() {\r\n var self = this,\r\n containerOffsetLeft = self.tableColumns.offset().left,\r\n scrollLeft = self.productsWrapper.scrollLeft(),\r\n selectedProducts = $(\".cd-products-columns\").find(\".product\"),\r\n numberProducts = selectedProducts.length;\r\n selectedProducts.each(function(index) {\r\n var product = $(this),\r\n leftTranslate =\r\n containerOffsetLeft +\r\n index * self.productWidth +\r\n scrollLeft -\r\n product.offset().left;\r\n setTranformX(product, 0);\r\n\r\n if (index == numberProducts - 1) {\r\n product.one(\r\n \"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\",\r\n function() {\r\n setTimeout(function() {\r\n self.element.addClass(\"no-product-transition\");\r\n }, 50);\r\n setTimeout(function() {\r\n // self.element.addClass(\"filtered\");\r\n self.productsWrapper.scrollLeft();\r\n self.tableColumns.css(\r\n \"width\",\r\n self.productWidth * numberProducts + \"px\"\r\n );\r\n selectedProducts.attr(\"style\", \"\");\r\n product.off(\r\n \"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\"\r\n );\r\n self.updateNavigationVisibility(0);\r\n }, 100);\r\n }\r\n );\r\n }\r\n\r\n checkResize();\r\n });\r\n\r\n if ($(\".no-csstransitions\").length > 0) {\r\n //browser not supporting css transitions\r\n // self.element.addClass(\"filtered\");\r\n self.productsWrapper.scrollLeft(0);\r\n self.tableColumns.css(\r\n \"width\",\r\n self.productWidth * numberProducts + \"px\"\r\n );\r\n // selectedProducts.attr(\"style\", \"\");\r\n self.updateNavigationVisibility(0);\r\n }\r\n // checkResize();\r\n //End\r\n };\r\n productsTable.prototype.filterProducts = function() {\r\n var self = this,\r\n containerOffsetLeft = self.tableColumns.offset().left,\r\n scrollLeft = self.productsWrapper.scrollLeft(),\r\n selectedProducts = this.products.filter(\".selected\"),\r\n numberProducts = selectedProducts.length;\r\n\r\n selectedProducts.each(function(index) {\r\n var product = $(this),\r\n leftTranslate =\r\n containerOffsetLeft +\r\n index * self.productWidth +\r\n scrollLeft -\r\n product.offset().left;\r\n setTranformX(product, leftTranslate);\r\n\r\n if (index == numberProducts - 1) {\r\n product.one(\r\n \"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\",\r\n function() {\r\n setTimeout(function() {\r\n self.element.addClass(\"no-product-transition\");\r\n }, 50);\r\n setTimeout(function() {\r\n self.element.addClass(\"filtered\");\r\n self.productsWrapper.scrollLeft(0);\r\n self.tableColumns.css(\r\n \"width\",\r\n self.productWidth * numberProducts + \"px\"\r\n );\r\n selectedProducts.attr(\"style\", \"\");\r\n product.off(\r\n \"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\"\r\n );\r\n self.updateNavigationVisibility(0);\r\n }, 100);\r\n }\r\n );\r\n }\r\n });\r\n\r\n if ($(\".no-csstransitions\").length > 0) {\r\n //browser not supporting css transitions\r\n self.element.addClass(\"filtered\");\r\n self.productsWrapper.scrollLeft(0);\r\n self.tableColumns.css(\r\n \"width\",\r\n self.productWidth * numberProducts + \"px\"\r\n );\r\n selectedProducts.attr(\"style\", \"\");\r\n self.updateNavigationVisibility(0);\r\n }\r\n };\r\n\r\n productsTable.prototype.resetProductsVisibility = function() {\r\n var self = this,\r\n containerOffsetLeft = self.tableColumns.offset().left,\r\n selectedProducts = this.products.filter(\".selected\"),\r\n numberProducts = selectedProducts.length,\r\n scrollLeft = self.productsWrapper.scrollLeft(),\r\n n = 0;\r\n\r\n self.element.addClass(\"no-product-transition\").removeClass(\"filtered\");\r\n\r\n self.products.each(function(index) {\r\n var product = $(this);\r\n if (product.hasClass(\"selected\")) {\r\n n = n + 1;\r\n var leftTranslate = (-index + n - 1) * self.productWidth;\r\n setTranformX(product, leftTranslate);\r\n }\r\n });\r\n\r\n setTimeout(function() {\r\n self.element.removeClass(\"no-product-transition filtering\");\r\n setTranformX(selectedProducts, \"0\");\r\n selectedProducts.removeClass(\"selected\").attr(\"style\", \"\");\r\n }, 50);\r\n };\r\n\r\n productsTable.prototype.updateSlider = function(bool) {\r\n var scrollLeft = this.productsWrapper.scrollLeft();\r\n scrollLeft = bool\r\n ? scrollLeft + this.productWidth\r\n : scrollLeft - this.productWidth;\r\n\r\n if (scrollLeft < 0) scrollLeft = 0;\r\n if (\r\n scrollLeft >\r\n this.tableColumns.outerWidth(true) - this.productsWrapper.width()\r\n )\r\n scrollLeft =\r\n this.tableColumns.outerWidth(true) -\r\n this.productsWrapper.width();\r\n\r\n this.productsWrapper.animate({ scrollLeft: scrollLeft }, 200);\r\n };\r\n\r\n var comparisonTables = [];\r\n $(\".cd-products-comparison-table\").each(function() {\r\n //create a productsTable object for each .cd-products-comparison-table\r\n comparisonTables.push(new productsTable($(this)));\r\n });\r\n\r\n if (comparisonTables.length > 0) {\r\n checkResize();\r\n }\r\n\r\n var windowScrolling = false;\r\n //detect window scroll - fix product top-info on scrolling\r\n // $(window).on(\"scroll\", function() {\r\n // if (!windowScrolling) {\r\n // windowScrolling = true;\r\n // !window.requestAnimationFrame\r\n // ? setTimeout(checkScrolling, 250)\r\n // : window.requestAnimationFrame(checkScrolling);\r\n // }\r\n // });\r\n\r\n var windowResize = false;\r\n //detect window resize - reset .cd-products-comparison-table properties\r\n $(window).on(\"resize\", function() {\r\n if (!windowResize) {\r\n windowResize = true;\r\n !window.requestAnimationFrame\r\n ? setTimeout(checkResize, 250)\r\n : window.requestAnimationFrame(checkResize);\r\n }\r\n });\r\n\r\n function checkScrolling() {\r\n var scrollTop = $(window).scrollTop();\r\n comparisonTables.forEach(function(element) {\r\n element.updateTopScrolling(scrollTop);\r\n });\r\n\r\n windowScrolling = false;\r\n }\r\n\r\n function checkResize() {\r\n comparisonTables.forEach(function(element) {\r\n element.updateProperties();\r\n });\r\n\r\n windowResize = false;\r\n }\r\n\r\n function checkMQ() {\r\n //check if mobile or desktop device\r\n return window\r\n .getComputedStyle(comparisonTables[0].element.get(0), \"::after\")\r\n .getPropertyValue(\"content\")\r\n .replace(/'/g, \"\")\r\n .replace(/\"/g, \"\");\r\n }\r\n\r\n function setTranformX(element, value) {\r\n element.css({\r\n \"-moz-transform\": \"translateX(\" + value + \"px)\",\r\n \"-webkit-transform\": \"translateX(\" + value + \"px)\",\r\n \"-ms-transform\": \"translateX(\" + value + \"px)\",\r\n \"-o-transform\": \"translateX(\" + value + \"px)\",\r\n transform: \"translateX(\" + value + \"px)\",\r\n });\r\n }\r\n});\r\n","// import List from \"list.js\";\r\nvar List = require(\"list.js\");\r\n\r\nvar UserReviewsList = {\r\n init: function() {\r\n /* init Dropdown from Semantic */\r\n // Dropdown.init();\r\n\r\n var options = {\r\n valueNames: [\"title\", \"content\"],\r\n fuzzySearch: {\r\n searchClass: \"search\",\r\n location: 0,\r\n distance: 100,\r\n threshold: 0.4,\r\n multiSearch: true\r\n }\r\n };\r\n\r\n this.featureList = new List(\"lovely-things-list\", options);\r\n\r\n this.eventHandlers();\r\n },\r\n\r\n eventHandlers: function() {\r\n console.log(\"UserReviewsList eventHandlers\");\r\n // this.featureList.filter();\r\n this.filters();\r\n },\r\n\r\n filters: function() {\r\n var thisModule = this;\r\n\r\n jQuery(\"#filter-games\").click(function() {\r\n thisModule.featureList.filter(function(item) {\r\n if (item.values().category == \"Game\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n return false;\r\n });\r\n\r\n jQuery(\"#filter-beverages\").click(function() {\r\n thisModule.featureList.filter(function(item) {\r\n if (item.values().category == \"Beverage\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n return false;\r\n });\r\n jQuery(\"#filter-none\").click(function() {\r\n thisModule.featureList.filter();\r\n return false;\r\n });\r\n },\r\n\r\n sorting: function() {}\r\n};\r\n\r\nmodule.exports = UserReviewsList;\r\n","/**\n * SSR Window 2.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 12, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target, src) {\n if (target === void 0) { target = {}; }\n if (src === void 0) { src = {}; }\n Object.keys(src).forEach(function (key) {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrDocument = {\n body: {},\n addEventListener: function () { },\n removeEventListener: function () { },\n activeElement: {\n blur: function () { },\n nodeName: '',\n },\n querySelector: function () {\n return null;\n },\n querySelectorAll: function () {\n return [];\n },\n getElementById: function () {\n return null;\n },\n createEvent: function () {\n return {\n initEvent: function () { },\n };\n },\n createElement: function () {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function () { },\n getElementsByTagName: function () {\n return [];\n },\n };\n },\n createElementNS: function () {\n return {};\n },\n importNode: function () {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nextend(doc, ssrDocument);\n\nvar win = typeof window !== 'undefined' ? window : {};\nvar ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState: function () { },\n pushState: function () { },\n go: function () { },\n back: function () { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function () { },\n removeEventListener: function () { },\n getComputedStyle: function () {\n return {\n getPropertyValue: function () {\n return '';\n },\n };\n },\n Image: function () { },\n Date: function () { },\n screen: {},\n setTimeout: function () { },\n clearTimeout: function () { },\n matchMedia: function () {\n return {};\n },\n};\nextend(win, ssrWindow);\n\nexport { doc as document, extend, win as window };\n","/**\n * Dom7 2.1.5\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: May 15, 2020\n */\nimport { document, window } from 'ssr-window';\n\nclass Dom7 {\n constructor(arr) {\n const self = this;\n // Create array-like object\n for (let i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n }\n}\n\nfunction $(selector, context) {\n const arr = [];\n let i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n let els;\n let tempParent;\n const html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || document).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) arr.push(els[i]);\n }\n }\n } else if (selector.nodeType || selector === window || selector === document) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n}\n\n$.fn = Dom7.prototype;\n$.Class = Dom7;\n$.Dom7 = Dom7;\n\nfunction unique(arr) {\n const uniqueArray = [];\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase());\n}\n\nfunction requestAnimationFrame(callback) {\n if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);\n else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);\n return window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id);\n else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id);\n return window.clearTimeout(id);\n}\n\n// Classes and attributes\nfunction addClass(className) {\n if (typeof className === 'undefined') {\n return this;\n }\n const classes = className.split(' ');\n for (let i = 0; i < classes.length; i += 1) {\n for (let j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);\n }\n }\n return this;\n}\nfunction removeClass(className) {\n const classes = className.split(' ');\n for (let i = 0; i < classes.length; i += 1) {\n for (let j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);\n }\n }\n return this;\n}\nfunction hasClass(className) {\n if (!this[0]) return false;\n return this[0].classList.contains(className);\n}\nfunction toggleClass(className) {\n const classes = className.split(' ');\n for (let i = 0; i < classes.length; i += 1) {\n for (let j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n}\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n }\n\n // Set attrs\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n // eslint-disable-next-line\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n}\n// eslint-disable-next-line\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n return this;\n}\n// eslint-disable-next-line\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n // eslint-disable-next-line\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n return this;\n }\n}\nfunction data(key, value) {\n let el;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n}\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n if (el.dataset) {\n // eslint-disable-next-line\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n // eslint-disable-next-line\n const attr = el.attributes[i];\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n // eslint-disable-next-line\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;\n else if (dataset[key] === 'true') dataset[key] = true;\n else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n return dataset;\n}\nfunction val(value) {\n const dom = this;\n if (typeof value === 'undefined') {\n if (dom[0]) {\n if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {\n const values = [];\n for (let i = 0; i < dom[0].selectedOptions.length; i += 1) {\n values.push(dom[0].selectedOptions[i].value);\n }\n return values;\n }\n return dom[0].value;\n }\n return undefined;\n }\n\n for (let i = 0; i < dom.length; i += 1) {\n const el = dom[i];\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n return dom;\n}\n// Transforms\n// eslint-disable-next-line\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n const elStyle = this[i].style;\n elStyle.webkitTransform = transform;\n elStyle.transform = transform;\n }\n return this;\n}\nfunction transition(duration) {\n if (typeof duration !== 'string') {\n duration = `${duration}ms`; // eslint-disable-line\n }\n for (let i = 0; i < this.length; i += 1) {\n const elStyle = this[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n}\n// Events\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n if ($(target).is(targetSelector)) listener.apply(target, eventData);\n else {\n const parents = $(target).parents(); // eslint-disable-line\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n listener.apply(this, eventData);\n }\n const events = eventType.split(' ');\n let j;\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent,\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent,\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n return this;\n}\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n if (!capture) capture = false;\n\n const events = eventType.split(' ');\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n return this;\n}\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\nfunction trigger(...args) {\n const events = args[0].split(' ');\n const eventData = args[1];\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let evt;\n try {\n evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(event, true, true);\n evt.detail = eventData;\n }\n // eslint-disable-next-line\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n return this;\n}\nfunction transitionEnd(callback) {\n const events = ['webkitTransitionEnd', 'transitionend'];\n const dom = this;\n let i;\n function fireCallBack(e) {\n /* jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n}\nfunction animationEnd(callback) {\n const events = ['webkitAnimationEnd', 'animationend'];\n const dom = this;\n let i;\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n}\n// Sizing/Styles\nfunction width() {\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n}\nfunction height() {\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n}\nfunction offset() {\n if (this.length > 0) {\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: (box.top + scrollTop) - clientTop,\n left: (box.left + scrollLeft) - clientLeft,\n };\n }\n\n return null;\n}\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n return this;\n}\nfunction show() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n return this;\n}\nfunction styles() {\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\nfunction css(props, value) {\n let i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (let prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n}\n\n// Dom manipulation\nfunction toArray() {\n const arr = [];\n for (let i = 0; i < this.length; i += 1) {\n arr.push(this[i]);\n }\n return arr;\n}\n// Iterate over the collection passing elements to `callback`\nfunction each(callback) {\n // Don't bother continuing without a callback\n if (!callback) return this;\n // Iterate over the current collection\n for (let i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n}\nfunction forEach(callback) {\n // Don't bother continuing without a callback\n if (!callback) return this;\n // Iterate over the current collection\n for (let i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], this[i], i) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n}\nfunction filter(callback) {\n const matchedItems = [];\n const dom = this;\n for (let i = 0; i < dom.length; i += 1) {\n if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);\n }\n return new Dom7(matchedItems);\n}\nfunction map(callback) {\n const modifiedItems = [];\n const dom = this;\n for (let i = 0; i < dom.length; i += 1) {\n modifiedItems.push(callback.call(dom[i], i, dom[i]));\n }\n return new Dom7(modifiedItems);\n}\n// eslint-disable-next-line\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n return this;\n}\n// eslint-disable-next-line\nfunction text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n return this;\n}\nfunction is(selector) {\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n return false;\n } else if (selector === document) return el === document;\n else if (selector === window) return el === window;\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n return false;\n }\n return false;\n}\nfunction indexOf(el) {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i] === el) return i;\n }\n return -1;\n}\nfunction index() {\n let child = this[0];\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\n// eslint-disable-next-line\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n let returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n}\nfunction append(...args) {\n let newChild;\n\n for (let k = 0; k < args.length; k += 1) {\n newChild = args[k];\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n// eslint-disable-next-line\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\nfunction prepend(newChild) {\n let i;\n let j;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n}\n// eslint-disable-next-line\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\nfunction insertBefore(selector) {\n const before = $(selector);\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\nfunction insertAfter(selector) {\n const after = $(selector);\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return new Dom7([this[0].nextElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n return new Dom7([]);\n }\n return new Dom7([]);\n}\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n}\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return new Dom7([el.previousElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);\n return new Dom7([]);\n }\n return new Dom7([]);\n}\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n}\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n return $(unique(parents));\n}\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $(unique(parents));\n}\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n}\nfunction find(selector) {\n const foundElements = [];\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n}\nfunction children(selector) {\n const children = []; // eslint-disable-line\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].childNodes;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n return new Dom7(unique(children));\n}\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n}\nfunction detach() {\n return this.remove();\n}\nfunction add(...args) {\n const dom = this;\n let i;\n let j;\n for (i = 0; i < args.length; i += 1) {\n const toAdd = $(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n}\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n el.textContent = '';\n }\n }\n return this;\n}\n\nfunction scrollTo(...args) {\n let [left, top, duration, easing, callback] = args;\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n if (typeof easing === 'undefined') easing = 'swing';\n\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n let scrollLeft; // eslint-disable-line\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n if (animateTop) {\n currentTop = el.scrollTop;\n if (!duration) {\n el.scrollTop = top;\n }\n }\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n if (!duration) return;\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));\n let done;\n if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop));\n if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft));\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n requestAnimationFrame(render);\n }\n requestAnimationFrame(render);\n });\n}\n// scrollTop(top, duration, easing, callback) {\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n const dom = this;\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n const dom = this;\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing', // or 'linear'\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n }, initialParams),\n\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - (Math.cos(progress * Math.PI) / 2);\n }\n if (typeof easing === 'function') {\n return easing(progress);\n }\n return progress;\n },\n stop() {\n if (a.frameId) {\n cancelAnimationFrame(a.frameId);\n }\n a.animating = false;\n a.elements.each((index, el) => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done(complete) {\n a.animating = false;\n a.elements.each((index, el) => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n const elements = [];\n\n // Define & Cache Initials & Units\n a.elements.each((index, el) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n\n elements[index] = {\n container: el,\n };\n Object.keys(props).forEach((prop) => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue,\n };\n });\n });\n\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress;\n // let el;\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n if (startTime === null) {\n startTime = time;\n }\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);\n }\n\n elements.forEach((element) => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach((prop) => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const { initialValue, finalValue, unit } = el[prop];\n el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));\n const currentValue = el[prop].currentValue;\n\n if (\n (finalValue > initialValue && currentValue >= finalValue) ||\n (finalValue < initialValue && currentValue <= finalValue)) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n if (done) {\n a.done(params.complete);\n return;\n }\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return;\n // Then call\n a.frameId = requestAnimationFrame(render);\n }\n a.frameId = requestAnimationFrame(render);\n return a;\n },\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = ('resize scroll').split(' ');\nfunction eventShortcut(name, ...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();\n else {\n $(this[i]).trigger(name);\n }\n }\n }\n return this;\n }\n return this.on(name, ...args);\n}\n\nfunction click(...args) {\n return eventShortcut.bind(this)('click', ...args);\n}\nfunction blur(...args) {\n return eventShortcut.bind(this)('blur', ...args);\n}\nfunction focus(...args) {\n return eventShortcut.bind(this)('focus', ...args);\n}\nfunction focusin(...args) {\n return eventShortcut.bind(this)('focusin', ...args);\n}\nfunction focusout(...args) {\n return eventShortcut.bind(this)('focusout', ...args);\n}\nfunction keyup(...args) {\n return eventShortcut.bind(this)('keyup', ...args);\n}\nfunction keydown(...args) {\n return eventShortcut.bind(this)('keydown', ...args);\n}\nfunction keypress(...args) {\n return eventShortcut.bind(this)('keypress', ...args);\n}\nfunction submit(...args) {\n return eventShortcut.bind(this)('submit', ...args);\n}\nfunction change(...args) {\n return eventShortcut.bind(this)('change', ...args);\n}\nfunction mousedown(...args) {\n return eventShortcut.bind(this)('mousedown', ...args);\n}\nfunction mousemove(...args) {\n return eventShortcut.bind(this)('mousemove', ...args);\n}\nfunction mouseup(...args) {\n return eventShortcut.bind(this)('mouseup', ...args);\n}\nfunction mouseenter(...args) {\n return eventShortcut.bind(this)('mouseenter', ...args);\n}\nfunction mouseleave(...args) {\n return eventShortcut.bind(this)('mouseleave', ...args);\n}\nfunction mouseout(...args) {\n return eventShortcut.bind(this)('mouseout', ...args);\n}\nfunction mouseover(...args) {\n return eventShortcut.bind(this)('mouseover', ...args);\n}\nfunction touchstart(...args) {\n return eventShortcut.bind(this)('touchstart', ...args);\n}\nfunction touchend(...args) {\n return eventShortcut.bind(this)('touchend', ...args);\n}\nfunction touchmove(...args) {\n return eventShortcut.bind(this)('touchmove', ...args);\n}\nfunction resize(...args) {\n return eventShortcut.bind(this)('resize', ...args);\n}\nfunction scroll(...args) {\n return eventShortcut.bind(this)('scroll', ...args);\n}\n\nexport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, prop, data, removeData, dataset, val, transform, transition, on, off, once, trigger, transitionEnd, animationEnd, width, outerWidth, height, outerHeight, offset, hide, show, styles, css, toArray, each, forEach, filter, map, html, text, is, indexOf, index, eq, append, appendTo, prepend, prependTo, insertBefore, insertAfter, next, nextAll, prev, prevAll, siblings, parent, parents, closest, find, children, remove, detach, add, empty, scrollTo, scrollTop, scrollLeft, animate, stop, click, blur, focus, focusin, focusout, keyup, keydown, keypress, submit, change, mousedown, mousemove, mouseup, mouseenter, mouseleave, mouseout, mouseover, touchstart, touchend, touchmove, resize, scroll };\n","/**\n * Swiper 5.4.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: June 16, 2020\n */\n\nimport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, data, transform, transition as transition$1, on, off, trigger, transitionEnd as transitionEnd$1, outerWidth, outerHeight, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove, add, styles } from 'dom7/dist/dom7.modular';\nimport { window, document as document$1 } from 'ssr-window';\n\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n data,\n transform,\n transition: transition$1,\n on,\n off,\n trigger,\n transitionEnd: transitionEnd$1,\n outerWidth,\n outerHeight,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n add,\n styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n});\n\nconst Utils = {\n deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n },\n nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n },\n now() {\n return Date.now();\n },\n getTranslate(el, axis = 'x') {\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = window.getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n },\n parseUrlQuery(url) {\n const query = {};\n let urlToParse = url || window.location.href;\n let i;\n let params;\n let param;\n let length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n },\n isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n },\n extend(...args) {\n const to = Object(args[0]);\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n};\n\nconst Support = (function Support() {\n return {\n touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document$1 instanceof window.DocumentTouch)),\n\n pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,\n\n observer: (function checkObserver() {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n }()),\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }()),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in window;\n }()),\n };\n}());\n\nclass SwiperClass {\n constructor(params = {}) {\n const self = this;\n self.params = params;\n\n // Events\n self.eventsListeners = {};\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach((eventName) => {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n }\n\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n }\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n handler.apply(self, args);\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n }\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n }\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach((event) => {\n if (self.eventsListeners && self.eventsListeners[event]) {\n const handlers = [];\n self.eventsListeners[event].forEach((eventHandler) => {\n handlers.push(eventHandler);\n });\n handlers.forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n useModulesParams(instanceParams) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n Utils.extend(instanceParams, module.params);\n }\n });\n }\n\n useModules(modulesParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n const moduleParams = modulesParams[moduleName] || {};\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach((modulePropName) => {\n const moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach((moduleEventName) => {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n }\n\n static set components(components) {\n const Class = this;\n if (!Class.use) return;\n Class.use(components);\n }\n\n static installModule(module, ...params) {\n const Class = this;\n if (!Class.prototype.modules) Class.prototype.modules = {};\n const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach((key) => {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach((key) => {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n }\n\n static use(module, ...params) {\n const Class = this;\n if (Array.isArray(module)) {\n module.forEach((m) => Class.installModule(m));\n return Class;\n }\n return Class.installModule(module, ...params);\n }\n}\n\nfunction updateSize () {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n Utils.extend(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n });\n}\n\nfunction updateSlides () {\n const swiper = this;\n const params = swiper.params;\n\n const {\n $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n\n function slidesForMargin(slideIndex) {\n if (!params.cssMode) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }\n\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.snapGrid.length;\n\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n else slides.css({ marginRight: '', marginBottom: '' });\n\n let slidesNumberEvenToRows;\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n }\n\n // Calc slides\n let slideSize;\n const slidesPerColumn = params.slidesPerColumn;\n const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0\n ? params.slidesPerGroup\n : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - (column * slidesPerColumn);\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - (row * slidesPerRow);\n }\n slide.css(\n `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n );\n }\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n const slideStyles = window.getComputedStyle(slide[0], null);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal()\n ? slide.outerWidth(true)\n : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.isHorizontal()) {\n const width = parseFloat(slideStyles.getPropertyValue('width'));\n const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n }\n } else {\n const height = parseFloat(slideStyles.getPropertyValue('height'));\n const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = height + marginTop + marginBottom;\n } else {\n slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n }\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = `${slideSize}px`;\n } else {\n slides[i].style.height = `${slideSize}px`;\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n let newSlidesGrid;\n\n if (\n rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n if (params.setWrapperSize) {\n if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map((snap) => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Utils.extend(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid,\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n}\n\nfunction updateAutoHeight (speed) {\n const swiper = this;\n const activeSlides = [];\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each((index, slide) => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length) break;\n activeSlides.push(swiper.slides.eq(index)[0]);\n }\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n\nfunction updateSlidesOffset () {\n const swiper = this;\n const slides = swiper.slides;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}\n\nfunction updateSlidesProgress (translate = (this && this.translate) || 0) {\n const swiper = this;\n const params = swiper.params;\n\n const { slides, rtlTranslate: rtl } = swiper;\n\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n const slideProgress = (\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n ) / (slide.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n || (slideAfter > 1 && slideAfter <= swiper.size)\n || (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n}\n\nfunction updateProgress (translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let { progress, isBeginning, isEnd } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / (translatesDiff);\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Utils.extend(swiper, {\n progress,\n isBeginning,\n isEnd,\n });\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses () {\n const swiper = this;\n\n const {\n slides, params, $wrapperEl, activeIndex, realIndex,\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n let activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n}\n\nfunction updateActiveIndex (newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n Utils.extend(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide (e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) slideFound = true;\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide,\n};\n\nfunction getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n\n const {\n params, rtlTranslate: rtl, translate, $wrapperEl,\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n\nfunction setTranslate (translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate () {\n return (-this.snapGrid[0]);\n}\n\nfunction maxTranslate () {\n return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n\nfunction translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n\n const {\n params,\n wrapperEl,\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth',\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n }\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}\n\nvar translate = {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo,\n};\n\nfunction setTransition (duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionStart (runCallbacks = true, direction) {\n const swiper = this;\n const { activeIndex, params, previousIndex } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n}\n\nfunction transitionEnd (runCallbacks = true, direction) {\n const swiper = this;\n const { activeIndex, previousIndex, params } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd,\n};\n\nfunction slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n\n const {\n params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';\n else if (slideIndex < activeIndex) direction = 'prev';\n else direction = 'reset';\n\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n let t = -translate;\n if (rtl) {\n t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n }\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth',\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n}\n\nfunction slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating } = swiper;\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n if (params.loop) {\n if (animating) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params, animating, snapGrid, slidesGrid, rtlTranslate,\n } = swiper;\n\n if (params.loop) {\n if (animating) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));\n\n const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n snapGrid.forEach((snap) => {\n if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n });\n }\n let prevIndex;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide () {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n .eq(0)\n .index();\n\n Utils.nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n .eq(0)\n .index();\n\n Utils.nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\n};\n\nfunction loopCreate () {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n // Remove duplicated slides\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document$1.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((index, el) => {\n const slide = $(el);\n if (index < swiper.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (let i = 0; i < appendSlides.length; i += 1) {\n $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}\n\nfunction loopFix () {\n const swiper = this;\n\n swiper.emit('beforeLoopFix');\n\n const {\n activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate();\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy () {\n const swiper = this;\n const { $wrapperEl, params, slides } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n\nfunction setGrabCursor (moving) {\n const swiper = this;\n if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n const el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n\nfunction unsetGrabCursor () {\n const swiper = this;\n if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n swiper.el.style.cursor = '';\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor,\n};\n\nfunction appendSlide (slides) {\n const swiper = this;\n const { $wrapperEl, params } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n}\n\nfunction prependSlide (slides) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide (index, slides) {\n const swiper = this;\n const { $wrapperEl, params, activeIndex } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeSlide (slidesIndexes) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides () {\n const swiper = this;\n\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nvar manipulation = {\n appendSlide,\n prependSlide,\n addSlide,\n removeSlide,\n removeAllSlides,\n};\n\nconst Device = (function Device() {\n const platform = window.navigator.platform;\n const ua = window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n iphone: false,\n ipod: false,\n ipad: false,\n edge: false,\n ie: false,\n firefox: false,\n macos: false,\n windows: false,\n cordova: !!(window.cordova || window.phonegap),\n phonegap: !!(window.cordova || window.phonegap),\n electron: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n const edge = ua.indexOf('Edge/') >= 0;\n const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n const windows = platform === 'Win32';\n const electron = ua.toLowerCase().indexOf('electron') >= 0;\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n if (!ipad\n && macos\n && Support.touch\n && (\n (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n || (screenWidth === 768 && screenHeight === 1024) // other\n )\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n macos = false;\n }\n\n device.ie = ie;\n device.edge = edge;\n device.firefox = firefox;\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.ipod = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Webview\n device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))\n || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n device.webview = device.webView;\n device.standalone = device.webView;\n\n // Desktop\n device.desktop = !(device.ios || device.android) || electron;\n if (device.desktop) {\n device.electron = electron;\n device.macos = macos;\n device.windows = windows;\n if (device.macos) {\n device.os = 'macos';\n }\n if (device.windows) {\n device.os = 'windows';\n }\n }\n\n // Pixel Ratio\n device.pixelRatio = window.devicePixelRatio || 1;\n\n // Export object\n return device;\n}());\n\nfunction onTouchStart (event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params, touches } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection\n && ((startX <= edgeSwipeThreshold)\n || (startX >= window.screen.width - edgeSwipeThreshold))\n ) {\n return;\n }\n\n Utils.extend(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = Utils.now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.formElements)) preventDefault = false;\n if (\n document$1.activeElement\n && $(document$1.activeElement).is(data.formElements)\n && document$1.activeElement !== $targetEl[0]\n ) {\n document$1.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove (event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data.isTouched) {\n Utils.extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = Utils.now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && document$1.activeElement) {\n if (e.target === document$1.activeElement && $(e.target).is(data.formElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if ((diffX * diffX) + (diffY * diffY) >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: Utils.now(),\n });\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd (event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n\n const {\n params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = Utils.now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = Utils.now();\n Utils.nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeModeMomentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeModeSticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeModeSticky) {\n // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n swiper.emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize () {\n const swiper = this;\n\n const { params, el } = swiper;\n\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n swiper.updateSlidesClasses();\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick (e) {\n const swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll () {\n const swiper = this;\n const { wrapperEl, rtlTranslate } = swiper;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n if (rtlTranslate) {\n swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);\n } else {\n swiper.translate = -wrapperEl.scrollLeft;\n }\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === -0) swiper.translate = 0;\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n const swiper = this;\n const {\n params, touchEvents, el, wrapperEl,\n } = swiper;\n\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n const capture = !!params.nested;\n\n // Touch Events\n if (!Support.touch && Support.pointerEvents) {\n el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n document$1.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document$1.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n if (!dummyEventAttached) {\n document$1.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n el.addEventListener('mousedown', swiper.onTouchStart, false);\n document$1.addEventListener('mousemove', swiper.onTouchMove, capture);\n document$1.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el.addEventListener('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl.addEventListener('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n } else {\n swiper.on('observerUpdate', onResize, true);\n }\n}\n\nfunction detachEvents() {\n const swiper = this;\n\n const {\n params, touchEvents, el, wrapperEl,\n } = swiper;\n\n const capture = !!params.nested;\n\n // Touch Events\n if (!Support.touch && Support.pointerEvents) {\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n document$1.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document$1.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n el.removeEventListener('mousedown', swiper.onTouchStart, false);\n document$1.removeEventListener('mousemove', swiper.onTouchMove, capture);\n document$1.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el.removeEventListener('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl.removeEventListener('scroll', swiper.onScroll);\n }\n\n // Resize handler\n swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n}\n\nvar events = {\n attachEvents,\n detachEvents,\n};\n\nfunction setBreakpoint () {\n const swiper = this;\n const {\n activeIndex, initialized, loopedSlides = 0, params, $el,\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n if (breakpointOnlyParams) {\n ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {\n const paramValue = breakpointOnlyParams[param];\n if (typeof paramValue === 'undefined') return;\n if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n breakpointOnlyParams[param] = 'auto';\n } else if (param === 'slidesPerView') {\n breakpointOnlyParams[param] = parseFloat(paramValue);\n } else {\n breakpointOnlyParams[param] = parseInt(paramValue, 10);\n }\n });\n }\n\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = params.slidesPerColumn > 1;\n const isMultiRow = breakpointParams.slidesPerColumn > 1;\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}multirow`);\n if (breakpointParams.slidesPerColumnFill === 'column') {\n $el.addClass(`${params.containerModifierClass}multirow-column`);\n }\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n Utils.extend(swiper.params, breakpointParams);\n\n Utils.extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n}\n\nfunction getBreakpoint (breakpoints) {\n // Get breakpoint for window width\n if (!breakpoints) return undefined;\n let breakpoint = false;\n\n const points = Object.keys(breakpoints).map((point) => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = window.innerHeight * minRatio;\n return { value, point };\n }\n return { value: point, point };\n });\n\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (value <= window.innerWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = { setBreakpoint, getBreakpoint };\n\nfunction addClasses () {\n const swiper = this;\n const {\n classNames, params, rtl, $el,\n } = swiper;\n const suffixes = [];\n\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n if (params.slidesPerColumnFill === 'column') {\n suffixes.push('multirow-column');\n }\n }\n if (Device.android) {\n suffixes.push('android');\n }\n if (Device.ios) {\n suffixes.push('ios');\n }\n\n if (params.cssMode) {\n suffixes.push('css-mode');\n }\n\n suffixes.forEach((suffix) => {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n}\n\nfunction removeClasses () {\n const swiper = this;\n const { $el, classNames } = swiper;\n\n $el.removeClass(classNames.join(' '));\n}\n\nvar classes = { addClasses, removeClasses };\n\nfunction loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n let image;\n function onReady() {\n if (callback) callback();\n }\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}\n\nfunction preloadImages () {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady\n );\n }\n}\n\nvar images = {\n loadImage,\n preloadImages,\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const params = swiper.params;\n const wasLocked = swiper.isLocked;\n const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n swiper.isLocked = lastSlidePosition <= swiper.size;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n if (swiper.navigation) swiper.navigation.update();\n }\n}\n\nvar checkOverflow$1 = { checkOverflow };\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n //\n preventInteractionOnTransition: false,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n};\n\n/* eslint no-param-reassign: \"off\" */\n\nconst prototypes = {\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n manipulation,\n events,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes,\n images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n\n params = Utils.extend({}, params);\n if (el && !params.el) params.el = el;\n\n super(params);\n\n Object.keys(prototypes).forEach((prototypeGroup) => {\n Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n // Swiper Instance\n const swiper = this;\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach((moduleName) => {\n const module = swiper.modules[moduleName];\n if (module.params) {\n const moduleParamName = Object.keys(module.params)[0];\n const moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) return;\n if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (\n typeof params[moduleParamName] === 'object'\n && !('enabled' in params[moduleParamName])\n ) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n }\n });\n\n // Extend defaults with modules params\n const swiperParams = Utils.extend({}, defaults);\n swiper.useModulesParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = Utils.extend({}, swiper.params);\n swiper.passedParams = Utils.extend({}, params);\n\n // Save Dom lib\n swiper.$ = $;\n\n // Find el\n const $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return undefined;\n }\n\n if ($el.length > 1) {\n const swipers = [];\n $el.each((index, containerEl) => {\n const newParams = Utils.extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper);\n\n // Find Wrapper\n let $wrapperEl;\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n // Children needs to return slot items\n $wrapperEl.children = (options) => $el.children(options);\n } else {\n $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n }\n // Extend Swiper\n Utils.extend(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // RTL\n rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n let desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (Support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }()),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video, label',\n // Last click time\n lastClickTime: Utils.now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n\n });\n\n // Install Modules\n swiper.useModules();\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n slidesPerViewDynamic() {\n const swiper = this;\n const {\n params, slides, slidesGrid, size: swiperSize, activeIndex,\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const { snapGrid, params } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n return swiper;\n }\n\n swiper.$el\n .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each((slideIndex, slideEl) => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n\n return swiper;\n }\n\n init() {\n const swiper = this;\n if (swiper.initialized) return;\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params, $el, $wrapperEl, slides,\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass([\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass,\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName) => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n Utils.deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n }\n\n static extendDefaults(newDefaults) {\n Utils.extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static get Class() {\n return SwiperClass;\n }\n\n static get $() {\n return $;\n }\n}\n\nvar Device$1 = {\n name: 'device',\n proto: {\n device: Device,\n },\n static: {\n device: Device,\n },\n};\n\nvar Support$1 = {\n name: 'support',\n proto: {\n support: Support,\n },\n static: {\n support: Support,\n },\n};\n\nconst Browser = (function Browser() {\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n }\n return {\n isEdge: !!window.navigator.userAgent.match(/Edge/g),\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n };\n}());\n\nvar Browser$1 = {\n name: 'browser',\n proto: {\n browser: Browser,\n },\n static: {\n browser: Browser,\n },\n};\n\nvar Resize = {\n name: 'resize',\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n resize: {\n resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('orientationchange');\n },\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n // Emit resize\n window.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy() {\n const swiper = this;\n window.removeEventListener('resize', swiper.resize.resizeHandler);\n window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n },\n};\n\nconst Observer = {\n func: window.MutationObserver || window.WebkitMutationObserver,\n attach(target, options = {}) {\n const swiper = this;\n\n const ObserverFunc = Observer.func;\n const observer = new ObserverFunc((mutations) => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n swiper.observer.observers.push(observer);\n },\n init() {\n const swiper = this;\n if (!Support.observer || !swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n for (let i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy() {\n const swiper = this;\n swiper.observer.observers.forEach((observer) => {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n },\n};\n\nvar Observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n observer: {\n init: Observer.init.bind(swiper),\n attach: Observer.attach.bind(swiper),\n destroy: Observer.destroy.bind(swiper),\n observers: [],\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.observer.init();\n },\n destroy() {\n const swiper = this;\n swiper.observer.destroy();\n },\n },\n};\n\nconst Virtual = {\n update(force) {\n const swiper = this;\n const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n renderSlide,\n offset: previousOffset,\n } = swiper.virtual;\n swiper.updateActiveIndex();\n const activeIndex = swiper.activeIndex || 0;\n\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';\n else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n slidesBefore = slidesPerGroup + addSlidesAfter;\n }\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Utils.extend(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: (function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()),\n });\n onRendered();\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n appendIndexes.forEach((index) => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach((index) => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n },\n renderSlide(slide, index) {\n const swiper = this;\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n const $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $(`
    ${slide}
    `);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n },\n appendSlide(slides) {\n const swiper = this;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n swiper.virtual.update(true);\n },\n prependSlide(slides) {\n const swiper = this;\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex) => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n swiper.virtual.update(true);\n swiper.slideTo(newActiveIndex, 0);\n },\n removeSlide(slidesIndexes) {\n const swiper = this;\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n swiper.virtual.update(true);\n swiper.slideTo(activeIndex, 0);\n },\n removeAllSlides() {\n const swiper = this;\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n swiper.virtual.update(true);\n swiper.slideTo(0, 0);\n },\n};\n\nvar Virtual$1 = {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n virtual: {\n update: Virtual.update.bind(swiper),\n appendSlide: Virtual.appendSlide.bind(swiper),\n prependSlide: Virtual.prependSlide.bind(swiper),\n removeSlide: Virtual.removeSlide.bind(swiper),\n removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n renderSlide: Virtual.renderSlide.bind(swiper),\n slides: swiper.params.virtual.slides,\n cache: {},\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n const overwriteParams = {\n watchSlidesProgress: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n\n if (!swiper.params.initialSlide) {\n swiper.virtual.update();\n }\n },\n setTranslate() {\n const swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.update();\n },\n },\n};\n\nconst Keyboard = {\n handle(event) {\n const swiper = this;\n const { rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && ((swiper.isHorizontal() && isArrowRight) || (swiper.isVertical() && isArrowDown) || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document$1.activeElement && document$1.activeElement.nodeName && (document$1.activeElement.nodeName.toLowerCase() === 'input' || document$1.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (\n point[0] >= 0 && point[0] <= windowWidth\n && point[1] >= 0 && point[1] <= windowHeight\n ) {\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl)) swiper.slideNext();\n if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl)) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n swiper.emit('keyPress', kc);\n return undefined;\n },\n enable() {\n const swiper = this;\n if (swiper.keyboard.enabled) return;\n $(document$1).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable() {\n const swiper = this;\n if (!swiper.keyboard.enabled) return;\n $(document$1).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n },\n};\n\nvar Keyboard$1 = {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n keyboard: {\n enabled: false,\n enable: Keyboard.enable.bind(swiper),\n disable: Keyboard.disable.bind(swiper),\n handle: Keyboard.handle.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n },\n },\n};\n\nfunction isEventSupported() {\n const eventName = 'onwheel';\n let isSupported = eventName in document$1;\n\n if (!isSupported) {\n const element = document$1.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported\n && document$1.implementation\n && document$1.implementation.hasFeature\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n && document$1.implementation.hasFeature('', '') !== true\n ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document$1.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\nconst Mousewheel = {\n lastScrollTime: Utils.now(),\n lastEventBeforeSnap: undefined,\n recentWheelEvents: [],\n event() {\n if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n return isEventSupported() ? 'wheel' : 'mousewheel';\n },\n normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = (pX < 1) ? -1 : 1;\n }\n if (pY && !sY) {\n sY = (pY < 1) ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n },\n handleMouseEnter() {\n const swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave() {\n const swiper = this;\n swiper.mouseEntered = false;\n },\n handle(event) {\n let e = event;\n const swiper = this;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n const data = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;\n else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n if (!swiper.params.freeMode) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: Utils.now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event,\n };\n\n // Keep the most recent events\n const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n swiper.mousewheel.animateSlider(newEvent);\n }\n } else {\n swiper.mousewheel.animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (swiper.mousewheel.releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n const { lastEventBeforeSnap } = swiper.mousewheel;\n const ignoreWheelEvents = lastEventBeforeSnap\n && newEvent.time < lastEventBeforeSnap.time + 500\n && newEvent.delta <= lastEventBeforeSnap.delta\n && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n let position = swiper.getTranslate() + (delta * params.sensitivity);\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = undefined;\n const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15\n && newEvent.time - firstEvent.time < 500\n && firstEvent.delta - newEvent.delta >= 1\n && newEvent.delta <= 6\n ) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n swiper.mousewheel.lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.mousewheel.timeout = Utils.nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!swiper.mousewheel.timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n swiper.mousewheel.timeout = Utils.nextTick(() => {\n const snapToThreshold = 0.5;\n swiper.mousewheel.lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n },\n animateSlider(newEvent) {\n const swiper = this;\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n // Return false as a default\n return false;\n },\n releaseScroll(newEvent) {\n const swiper = this;\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n },\n enable() {\n const swiper = this;\n const event = Mousewheel.event();\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n return true;\n }\n if (!event) return false;\n if (swiper.mousewheel.enabled) return false;\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable() {\n const swiper = this;\n const event = Mousewheel.event();\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n return true;\n }\n if (!event) return false;\n if (!swiper.mousewheel.enabled) return false;\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.off(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n },\n};\n\nvar Mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarged: 'container',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: Mousewheel.enable.bind(swiper),\n disable: Mousewheel.disable.bind(swiper),\n handle: Mousewheel.handle.bind(swiper),\n handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n animateSlider: Mousewheel.animateSlider.bind(swiper),\n releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n lastScrollTime: Utils.now(),\n lastEventBeforeSnap: undefined,\n recentWheelEvents: [],\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n swiper.mousewheel.disable();\n }\n if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n },\n destroy() {\n const swiper = this;\n if (swiper.params.cssMode) {\n swiper.mousewheel.enable();\n }\n if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n },\n },\n};\n\nconst Navigation = {\n update() {\n // Update Navigation Buttons\n const swiper = this;\n const params = swiper.params.navigation;\n\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n onPrevClick(e) {\n const swiper = this;\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n },\n onNextClick(e) {\n const swiper = this;\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n },\n init() {\n const swiper = this;\n const params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) return;\n\n let $nextEl;\n let $prevEl;\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.nextEl === 'string'\n && $nextEl.length > 1\n && swiper.$el.find(params.nextEl).length === 1\n ) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.prevEl === 'string'\n && $prevEl.length > 1\n && swiper.$el.find(params.prevEl).length === 1\n ) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', swiper.navigation.onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', swiper.navigation.onPrevClick);\n }\n\n Utils.extend(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n },\n destroy() {\n const swiper = this;\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', swiper.navigation.onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', swiper.navigation.onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n },\n};\n\nvar Navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n navigation: {\n init: Navigation.init.bind(swiper),\n update: Navigation.update.bind(swiper),\n destroy: Navigation.destroy.bind(swiper),\n onNextClick: Navigation.onNextClick.bind(swiper),\n onPrevClick: Navigation.onPrevClick.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge() {\n const swiper = this;\n swiper.navigation.update();\n },\n fromEdge() {\n const swiper = this;\n swiper.navigation.update();\n },\n destroy() {\n const swiper = this;\n swiper.navigation.destroy();\n },\n click(e) {\n const swiper = this;\n const { $nextEl, $prevEl } = swiper.navigation;\n if (\n swiper.params.navigation.hideOnClick\n && !$(e.target).is($prevEl)\n && !$(e.target).is($nextEl)\n ) {\n let isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n swiper.emit('navigationShow', swiper);\n } else {\n swiper.emit('navigationHide', swiper);\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n },\n },\n};\n\nconst Pagination = {\n update() {\n // Render || Update Pagination bullets/items\n const swiper = this;\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n // Current/Total\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n current -= (slidesLength - (swiper.loopedSlides * 2));\n }\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n if ($el.length > 1) {\n bullets.each((index, bullet) => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n if (bulletIndex === firstIndex) {\n $bullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n }\n if (bulletIndex === lastIndex) {\n $bullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n $firstDisplayedBullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n $lastDisplayedBullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n } else {\n $firstDisplayedBullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n $lastDisplayedBullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n if (params.type === 'fraction') {\n $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', swiper, $el[0]);\n } else {\n swiper.emit('paginationUpdate', swiper, $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n },\n render() {\n // Render Container\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n if (params.type === 'bullets') {\n const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = ``\n + ' / '\n + ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init() {\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el) return;\n\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (\n swiper.params.uniqueNavElements\n && typeof params.el === 'string'\n && $el.length > 1\n ) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', `.${params.bulletClass}`, function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Utils.extend(swiper.pagination, {\n $el,\n el: $el[0],\n });\n },\n destroy() {\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n const $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', `.${params.bulletClass}`);\n }\n },\n};\n\nvar Pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: (number) => number,\n formatFractionTotal: (number) => number,\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n pagination: {\n init: Pagination.init.bind(swiper),\n render: Pagination.render.bind(swiper),\n update: Pagination.update.bind(swiper),\n destroy: Pagination.destroy.bind(swiper),\n dynamicBulletIndex: 0,\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange() {\n const swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange() {\n const swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange() {\n const swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange() {\n const swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy() {\n const swiper = this;\n swiper.pagination.destroy();\n },\n click(e) {\n const swiper = this;\n if (\n swiper.params.pagination.el\n && swiper.params.pagination.hideOnClick\n && swiper.pagination.$el.length > 0\n && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n ) {\n const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n swiper.emit('paginationShow', swiper);\n } else {\n swiper.emit('paginationHide', swiper);\n }\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n },\n },\n};\n\nconst Scrollbar = {\n setTranslate() {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n const {\n dragSize, trackSize, $dragEl, $el,\n } = scrollbar;\n const params = swiper.params.scrollbar;\n\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n setTransition(duration) {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n },\n updateSize() {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n const { scrollbar } = swiper;\n const { $dragEl, $el } = scrollbar;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n const divider = swiper.size / swiper.virtualSize;\n const moveDivider = divider * (trackSize / swiper.size);\n let dragSize;\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n Utils.extend(scrollbar, {\n trackSize,\n divider,\n moveDivider,\n dragSize,\n });\n scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n },\n getPointerPosition(e) {\n const swiper = this;\n if (swiper.isHorizontal()) {\n return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n }\n return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n },\n setDragPosition(e) {\n const swiper = this;\n const { scrollbar, rtlTranslate: rtl } = swiper;\n const {\n $el,\n dragSize,\n trackSize,\n dragStartPos,\n } = scrollbar;\n\n let positionRatio;\n positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n },\n onDragStart(e) {\n const swiper = this;\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n swiper.scrollbar.isTouched = true;\n swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n scrollbar.setDragPosition(e);\n\n clearTimeout(swiper.scrollbar.dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n swiper.emit('scrollbarDragStart', e);\n },\n onDragMove(e) {\n const swiper = this;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n\n if (!swiper.scrollbar.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n scrollbar.setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n swiper.emit('scrollbarDragMove', e);\n },\n onDragEnd(e) {\n const swiper = this;\n\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el } = scrollbar;\n\n if (!swiper.scrollbar.isTouched) return;\n swiper.scrollbar.isTouched = false;\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.dragTimeout);\n swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n swiper.emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n },\n enableDraggable() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const {\n scrollbar, touchEventsTouch, touchEventsDesktop, params,\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n if (!Support.touch) {\n target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n document$1.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n document$1.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n disableDraggable() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const {\n scrollbar, touchEventsTouch, touchEventsDesktop, params,\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n if (!Support.touch) {\n target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n document$1.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n document$1.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n init() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const { scrollbar, $el: $swiperEl } = swiper;\n const params = swiper.params.scrollbar;\n\n let $el = $(params.el);\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n if ($dragEl.length === 0) {\n $dragEl = $(`
    `);\n $el.append($dragEl);\n }\n\n Utils.extend(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n scrollbar.enableDraggable();\n }\n },\n destroy() {\n const swiper = this;\n swiper.scrollbar.disableDraggable();\n },\n};\n\nvar Scrollbar$1 = {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n scrollbar: {\n init: Scrollbar.init.bind(swiper),\n destroy: Scrollbar.destroy.bind(swiper),\n updateSize: Scrollbar.updateSize.bind(swiper),\n setTranslate: Scrollbar.setTranslate.bind(swiper),\n setTransition: Scrollbar.setTransition.bind(swiper),\n enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n onDragStart: Scrollbar.onDragStart.bind(swiper),\n onDragMove: Scrollbar.onDragMove.bind(swiper),\n onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n isTouched: false,\n timeout: null,\n dragTimeout: null,\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.scrollbar.init();\n swiper.scrollbar.updateSize();\n swiper.scrollbar.setTranslate();\n },\n update() {\n const swiper = this;\n swiper.scrollbar.updateSize();\n },\n resize() {\n const swiper = this;\n swiper.scrollbar.updateSize();\n },\n observerUpdate() {\n const swiper = this;\n swiper.scrollbar.updateSize();\n },\n setTranslate() {\n const swiper = this;\n swiper.scrollbar.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n swiper.scrollbar.setTransition(duration);\n },\n destroy() {\n const swiper = this;\n swiper.scrollbar.destroy();\n },\n },\n};\n\nconst Parallax = {\n setTransform(el, progress) {\n const swiper = this;\n const { rtl } = swiper;\n\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if ((x).indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if ((y).indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n },\n setTranslate() {\n const swiper = this;\n const {\n $el, slides, progress, snapGrid,\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each((index, el) => {\n swiper.parallax.setTransform(el, progress);\n });\n slides.each((slideIndex, slideEl) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each((index, el) => {\n swiper.parallax.setTransform(el, slideProgress);\n });\n });\n },\n setTransition(duration = this.params.speed) {\n const swiper = this;\n const { $el } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each((index, parallaxEl) => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n },\n};\n\nvar Parallax$1 = {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n parallax: {\n setTransform: Parallax.setTransform.bind(swiper),\n setTranslate: Parallax.setTranslate.bind(swiper),\n setTransition: Parallax.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n init() {\n const swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.setTranslate();\n },\n setTranslate() {\n const swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.setTransition(duration);\n },\n },\n};\n\nconst Zoom = {\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n return distance;\n },\n // Events\n onGestureStart(e) {\n const swiper = this;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n if (!Support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureTouched = true;\n gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n swiper.zoom.isScaling = true;\n },\n onGestureChange(e) {\n const swiper = this;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (!Support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureMoved = true;\n gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (Support.gestures) {\n zoom.scale = e.scale * zoom.currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n }\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n },\n onGestureEnd(e) {\n const swiper = this;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (!Support.gestures) {\n if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n return;\n }\n if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n return;\n }\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n zoom.currentScale = zoom.scale;\n zoom.isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n },\n onTouchStart(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (Device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image, velocity } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n if (swiper.rtl) {\n image.startX = -image.startX;\n image.startY = -image.startY;\n }\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !zoom.isScaling) {\n if (\n swiper.isHorizontal()\n && (\n (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n )\n ) {\n image.isTouched = false;\n return;\n } if (\n !swiper.isHorizontal()\n && (\n (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n )\n ) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n }\n if (image.currentX > image.maxX) {\n image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n }\n\n if (image.currentY < image.minY) {\n image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n }\n if (image.currentY > image.maxY) {\n image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n },\n onTouchEnd() {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image, velocity } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n },\n onTransitionEnd() {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n },\n // Toggle Zoom\n toggle(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoom.out();\n } else {\n // Zoom In\n zoom.in(e);\n }\n },\n in(e) {\n const swiper = this;\n\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n const { gesture, image } = zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left;\n offsetY = gesture.$slideEl.offset().top;\n diffX = (offsetX + (slideWidth / 2)) - touchX;\n diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n },\n out() {\n const swiper = this;\n\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n const { gesture } = zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n },\n // Attach/Detach Events\n enable() {\n const swiper = this;\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n const slideSelector = `.${swiper.params.slideClass}`;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n }\n }\n\n // Move image\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n },\n disable() {\n const swiper = this;\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n\n swiper.zoom.enabled = false;\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n const slideSelector = `.${swiper.params.slideClass}`;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n }\n }\n\n // Move image\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n },\n};\n\nvar Zoom$1 = {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n },\n create() {\n const swiper = this;\n const zoom = {\n enabled: false,\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n },\n };\n\n ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n zoom[methodName] = Zoom[methodName].bind(swiper);\n });\n Utils.extend(swiper, {\n zoom,\n });\n\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n swiper.emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy() {\n const swiper = this;\n swiper.zoom.disable();\n },\n touchStart(e) {\n const swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchStart(e);\n },\n touchEnd(e) {\n const swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchEnd(e);\n },\n doubleTap(e) {\n const swiper = this;\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.onTransitionEnd();\n }\n },\n slideChange() {\n const swiper = this;\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n swiper.zoom.onTransitionEnd();\n }\n },\n },\n};\n\nconst Lazy = {\n loadInSlide(index, loadInDuplicate = true) {\n const swiper = this;\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n const $slideEl = isVirtual\n ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n : swiper.slides.eq(index);\n\n let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images = $images.add($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each((imageIndex, imageEl) => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n\n swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if ($pictureEl.length) {\n $pictureEl.children('source').each((sourceIndex, sourceEl) => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n swiper.lazy.loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n }\n }\n swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n\n swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n },\n load() {\n const swiper = this;\n const {\n $wrapperEl, params: swiperParams, slides, activeIndex,\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n\n let slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n if (swiper.params.watchSlidesVisibility) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n swiper.lazy.loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n swiper.lazy.loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n // Prev Slides\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n }\n }\n },\n};\n\nvar Lazy$1 = {\n name: 'lazy',\n params: {\n lazy: {\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n lazy: {\n initialImageLoaded: false,\n load: Lazy.load.bind(swiper),\n loadInSlide: Lazy.loadInSlide.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n },\n init() {\n const swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n swiper.lazy.load();\n }\n },\n scroll() {\n const swiper = this;\n if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n swiper.lazy.load();\n }\n },\n resize() {\n const swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbarDragMove() {\n const swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionStart() {\n const swiper = this;\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n swiper.lazy.load();\n }\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n swiper.lazy.load();\n }\n },\n slideChange() {\n const swiper = this;\n if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n swiper.lazy.load();\n }\n },\n },\n};\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\nconst Controller = {\n LinearSpline: function LinearSpline(x, y) {\n const binarySearch = (function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }());\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction(c) {\n const swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate(setTranslate, byController) {\n const swiper = this;\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition(duration, byController) {\n const swiper = this;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n Utils.nextTick(() => {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n },\n};\nvar Controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n setTranslate: Controller.setTranslate.bind(swiper),\n setTransition: Controller.setTransition.bind(swiper),\n },\n });\n },\n on: {\n update() {\n const swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize() {\n const swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate() {\n const swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate(translate, byController) {\n const swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n },\n },\n};\n\nconst a11y = {\n makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n return $el;\n },\n addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey(e) {\n const swiper = this;\n const params = swiper.params.a11y;\n if (e.keyCode !== 13) return;\n const $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n $targetEl[0].click();\n }\n },\n notify(message) {\n const swiper = this;\n const notification = swiper.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n updateNavigation() {\n const swiper = this;\n\n if (swiper.params.loop || !swiper.navigation) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n swiper.a11y.makeElNotFocusable($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n swiper.a11y.makeElFocusable($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n swiper.a11y.makeElNotFocusable($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n swiper.a11y.makeElFocusable($nextEl);\n }\n }\n },\n updatePagination() {\n const swiper = this;\n const params = swiper.params.a11y;\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n const $bulletEl = $(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n });\n }\n },\n init() {\n const swiper = this;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Navigation\n const params = swiper.params.a11y;\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n swiper.a11y.makeElFocusable($nextEl);\n swiper.a11y.addElRole($nextEl, 'button');\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n swiper.a11y.makeElFocusable($prevEl);\n swiper.a11y.addElRole($prevEl, 'button');\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n }\n },\n};\nvar A11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n a11y: {\n liveRegion: $(``),\n },\n });\n Object.keys(a11y).forEach((methodName) => {\n swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n });\n },\n on: {\n init() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n fromEdge() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n paginationUpdate() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatePagination();\n },\n destroy() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.destroy();\n },\n },\n};\n\nconst History = {\n init() {\n const swiper = this;\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n const history = swiper.history;\n history.initialized = true;\n history.paths = History.getPathValues();\n if (!history.paths.key && !history.paths.value) return;\n history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n destroy() {\n const swiper = this;\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n setHistoryPopState() {\n const swiper = this;\n swiper.history.paths = History.getPathValues();\n swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getPathValues() {\n const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return { key, value };\n },\n setHistory(key, index) {\n const swiper = this;\n if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n const slide = swiper.slides.eq(index);\n let value = History.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({ value }, null, value);\n } else {\n window.history.pushState({ value }, null, value);\n }\n },\n slugify(text) {\n return text.toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide(speed, value, runCallbacks) {\n const swiper = this;\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = History.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n },\n};\n\nvar History$1 = {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replaceState: false,\n key: 'slides',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n history: {\n init: History.init.bind(swiper),\n setHistory: History.setHistory.bind(swiper),\n setHistoryPopState: History.setHistoryPopState.bind(swiper),\n scrollToSlide: History.scrollToSlide.bind(swiper),\n destroy: History.destroy.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.history.initialized) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n slideChange() {\n const swiper = this;\n if (swiper.history.initialized && swiper.params.cssMode) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n },\n};\n\nconst HashNavigation = {\n onHashCange() {\n const swiper = this;\n swiper.emit('hashChange');\n const newHash = document$1.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n },\n setHash() {\n const swiper = this;\n if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));\n swiper.emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document$1.location.hash = hash || '';\n swiper.emit('hashSet');\n }\n },\n init() {\n const swiper = this;\n if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n swiper.hashNavigation.initialized = true;\n const hash = document$1.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n};\nvar HashNavigation$1 = {\n name: 'hash-navigation',\n params: {\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n hashNavigation: {\n initialized: false,\n init: HashNavigation.init.bind(swiper),\n destroy: HashNavigation.destroy.bind(swiper),\n setHash: HashNavigation.setHash.bind(swiper),\n onHashCange: HashNavigation.onHashCange.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.init();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.destroy();\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.hashNavigation.initialized) {\n swiper.hashNavigation.setHash();\n }\n },\n slideChange() {\n const swiper = this;\n if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n swiper.hashNavigation.setHash();\n }\n },\n },\n};\n\n/* eslint no-underscore-dangle: \"off\" */\n\nconst Autoplay = {\n run() {\n const swiper = this;\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = Utils.nextTick(() => {\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n }, delay);\n },\n start() {\n const swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop() {\n const swiper = this;\n if (!swiper.autoplay.running) return false;\n if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause(speed) {\n const swiper = this;\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n }\n },\n};\n\nvar Autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: Autoplay.run.bind(swiper),\n start: Autoplay.start.bind(swiper),\n stop: Autoplay.stop.bind(swiper),\n pause: Autoplay.pause.bind(swiper),\n onVisibilityChange() {\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n swiper.autoplay.pause();\n }\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n swiper.autoplay.run();\n swiper.autoplay.paused = false;\n }\n },\n onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n },\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n }\n },\n beforeTransitionStart(speed, internal) {\n const swiper = this;\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove() {\n const swiper = this;\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n touchEnd() {\n const swiper = this;\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.run();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n },\n },\n};\n\nconst Fade = {\n setTranslate() {\n const swiper = this;\n const { slides } = swiper;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl\n .css({\n opacity: slideOpacity,\n })\n .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n },\n setTransition(duration) {\n const swiper = this;\n const { slides, $wrapperEl } = swiper;\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n slides.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n};\n\nvar EffectFade = {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n fadeEffect: {\n setTranslate: Fade.setTranslate.bind(swiper),\n setTransition: Fade.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTransition(duration);\n },\n },\n};\n\nconst Cube = {\n setTranslate() {\n const swiper = this;\n const {\n $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
    ');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: `${swiperWidth}px` });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
    ');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + (round * 4 * swiperSize);\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = (3 * swiperSize) + (swiperSize * 4 * round);\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = (slideIndex * 90) + (progress * 90);\n if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n }\n $slideEl.transform(transform);\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
    `);\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(`
    `);\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`,\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n const multiplier = 1.5 - (\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n );\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n const zFactor = (Browser.isSafari || Browser.isWebView) ? (-swiperSize / 2) : 0;\n $wrapperEl\n .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n },\n setTransition(duration) {\n const swiper = this;\n const { $el, slides } = swiper;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n },\n};\n\nvar EffectCube = {\n name: 'effect-cube',\n params: {\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n cubeEffect: {\n setTranslate: Cube.setTranslate.bind(swiper),\n setTransition: Cube.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTransition(duration);\n },\n },\n};\n\nconst Flip = {\n setTranslate() {\n const swiper = this;\n const { slides, rtlTranslate: rtl } = swiper;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (swiper.params.flipEffect.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
    `);\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(`
    `);\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n $slideEl\n .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n }\n },\n setTransition(duration) {\n const swiper = this;\n const { slides, activeIndex, $wrapperEl } = swiper;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n // eslint-disable-next-line\n slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n};\n\nvar EffectFlip = {\n name: 'effect-flip',\n params: {\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n flipEffect: {\n setTranslate: Flip.setTranslate.bind(swiper),\n setTransition: Flip.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTransition(duration);\n },\n },\n};\n\nconst Coverflow = {\n setTranslate() {\n const swiper = this;\n const {\n width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = ((parseFloat(params.stretch) / 100) * slideSize);\n }\n let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);\n let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;\n\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n\n $slideEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = $(`
    `);\n $slideEl.append($shadowBeforeEl);\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = $(`
    `);\n $slideEl.append($shadowAfterEl);\n }\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n\n // Set correct perspective for IE10\n if (Support.pointerEvents || Support.prefixedPointerEvents) {\n const ws = $wrapperEl[0].style;\n ws.perspectiveOrigin = `${center}px 50%`;\n }\n },\n setTransition(duration) {\n const swiper = this;\n swiper.slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n },\n};\n\nvar EffectCoverflow = {\n name: 'effect-coverflow',\n params: {\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n coverflowEffect: {\n setTranslate: Coverflow.setTranslate.bind(swiper),\n setTransition: Coverflow.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n\n swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTransition(duration);\n },\n },\n};\n\nconst Thumbs = {\n init() {\n const swiper = this;\n const { thumbs: thumbsParams } = swiper.params;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Utils.extend(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n Utils.extend(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (Utils.isObject(thumbsParams.swiper)) {\n swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n }));\n swiper.thumbs.swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n },\n onThumbClick() {\n const swiper = this;\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n else slideToIndex = prevIndex;\n }\n swiper.slideTo(slideToIndex);\n },\n update(initial) {\n const swiper = this;\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n const prevThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n .index();\n const nextThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n .index();\n if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;\n else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;\n else newThumbsIndex = prevThumbsIndex;\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n },\n};\nvar Thumbs$1 = {\n name: 'thumbs',\n params: {\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-container-thumbs',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n thumbs: {\n swiper: null,\n init: Thumbs.init.bind(swiper),\n update: Thumbs.update.bind(swiper),\n onThumbClick: Thumbs.onThumbClick.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n const { thumbs } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n swiper.thumbs.init();\n swiper.thumbs.update(true);\n },\n slideChange() {\n const swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n update() {\n const swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n resize() {\n const swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n observerUpdate() {\n const swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n setTransition(duration) {\n const swiper = this;\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n thumbsSwiper.setTransition(duration);\n },\n beforeDestroy() {\n const swiper = this;\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n },\n },\n};\n\n// Swiper Class\n\nconst components = [\n Device$1,\n Support$1,\n Browser$1,\n Resize,\n Observer$1,\n Virtual$1,\n Keyboard$1,\n Mousewheel$1,\n Navigation$1,\n Pagination$1,\n Scrollbar$1,\n Parallax$1,\n Zoom$1,\n Lazy$1,\n Controller$1,\n A11y,\n History$1,\n HashNavigation$1,\n Autoplay$1,\n EffectFade,\n EffectCube,\n EffectFlip,\n EffectCoverflow,\n Thumbs$1\n];\n\nif (typeof Swiper.use === 'undefined') {\n Swiper.use = Swiper.Class.use;\n Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\nexport default Swiper;\n//# sourceMappingURL=swiper.esm.bundle.js.map\n"],"sourceRoot":""}