{"version":3,"sources":["flickity/flickity.pkgd.js","imagesLoaded/imagesloaded.pkgd.js","main.js","partials/_responsive-carousel.js","Card/card.component.js","ContactForm/contactForm.widget.js","GoogleMap/google-map.component.js","Heading/heading.component.js","ImageBanner/image-banner.widget.js","ImageGallery/image-gallery.widget.js","IncludedOptionals/included-optionals.widget.js","LanguageSelector/language-selector.component.js","MediaVideo/media-video-component.js","MegaMenu/mega-menu.component.js","MultimediaGallery/multimedia-gallery.widget.js","MultipleHeading/multiple-heading.component.js","partials/_animations.js","partials/_debouncer.js","partials/_filter.js","partials/_form-validation.js","partials/_iubenda.js","partials/_lazy-loading-image.js","partials/_load-more.js","partials/_modal-response.js","partials/_recaptcha.js","partials/_shopify-gtm-event.js","ProductColors/product-colors.widget.js","RelatedPreparations/related-preparations.widget.js","RelatedUsageAreas/related-usage-areas.widget.js","RotatingHeading/rotating-heading.component.js","TextImageExtendedDoubleBlock/text-image-extended-double-block.widget.js","Video/video.component.js"],"names":["window","factory","define","amd","jQuery","module","_typeof","exports","require","jQueryBridget","arraySlice","Array","prototype","slice","console","logError","message","error","namespace","PluginClass","$","option","opts","isPlainObject","this","options","extend","fn","arg0","$elems","methodName","args","returnValue","pluginMethodStr","call","arguments","each","i","elem","value","instance","data","method","charAt","apply","undefined","_init","updateJQuery","bridget","global","EvEmitter","proto","on","eventName","listener","listeners","events","_events","indexOf","push","once","onceEvents","_onceEvents","off","length","index","splice","emitEvent","onceListeners","allOff","getSize","getStyleSize","num","parseFloat","isNaN","measurements","measurementsLength","getStyle","style","getComputedStyle","isBoxSizeOuter","isSetup","div","document","createElement","width","padding","borderStyle","borderWidth","boxSizing","body","documentElement","appendChild","Math","round","removeChild","querySelector","nodeType","display","size","height","innerWidth","innerHeight","outerWidth","outerHeight","isBorderBox","offsetWidth","offsetHeight","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","matchesSelector","matchesMethod","ElemProto","Element","matches","prefixes","selector","fizzyUIUtils","utils","a","b","prop","makeArray","obj","isArray","removeFrom","ary","getParent","parentNode","getQueryElement","handleEvent","event","type","filterFindElements","elems","ffElems","forEach","HTMLElement","childElems","querySelectorAll","debounceMethod","_class","threshold","timeoutName","timeout","clearTimeout","_this","setTimeout","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","htmlInit","WidgetClass","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","attr","getAttribute","JSON","parse","className","Flickity","Cell","parent","element","create","position","setAttribute","x","shift","destroy","unselect","side","originSide","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","target","cellAlign","getPositionValue","select","classList","add","removeAttribute","remove","wrapShift","slideableWidth","Slide","isOriginLeft","cells","addCell","cell","beginMargin","max","firstMargin","endMargin","lastCell","getLastCell","lastMargin","slideWidth","getCellElements","map","animatePrototype","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","modulo","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","slider","transform","progress","firstSlide","slides","positionX","slidesWidth","dispatchEvent","selectedSlide","velocity","percentPosition","isPointerDown","isFreeScrolling","selectedIndex","beforeGap","afterGap","_shiftCells","beforeShiftCells","afterShiftCells","gap","getFrictionFactor","force","dragForce","isDraggable","dragX","applyForce","selectedAttraction","_Flickity","moveElements","toElem","GUID","instances","queryElement","flickityGUID","$element","constructor","defaults","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","createMethods","cellAlignShorthands","id","guid","viewport","_createSlider","watchCSS","activate","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","_makeCells","positionCells","_getWrapShiftCells","cellElem","getLastSlide","_sizeCells","_positionCells","maxCellHeight","startCell","cellX","len","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","updateSelectedSlide","number","groupCells","parseInt","percentMatch","percent","reposition","positionSliderAtSelected","setCellAlign","center","left","right","shorthand","adaptiveHeight","gapX","cellIndex","_unshiftCells","_getGapCells","increment","contentWidth","isContentSmaller","beginBound","endBound","contain","isRightToLeft","min","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","selectedCell","selectedElement","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","cellElems","slideIndex","uiChange","childUIPointerDown","preventDefault","focus","onresize","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","removeEventListener","removeData","setJQuery","jq","Unipointer","Object","postStartEvents","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","pointerId","pointerDown","_bindPostStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","Unidragger","cursorNodes","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","okayPointerDown","pointerDownPointer","pointerDownBlur","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","nodeName","isClickType","isOkay","focused","blur","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","bind","dragEnd","onclick","isIgnoringMouseUp","staticClick","draggable","dragThreshold","isTouch","isTouchmoveScrollCanceled","focusNodes","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","isTouchStart","isTouchPointer","pointerType","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","Date","restingX","freeScroll","dragEndRestingSelect","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","d","md","isWrapAround","wrap","floor","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","svg","disable","createSVG","update","createElementNS","path","pathMovements","shape","arrowShape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","handleClick","onClick","setDots","addDots","removeDots","count","fragment","createDocumentFragment","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","isAppend","insertCellElement","endCells","insertBefore","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","src","srcset","onload","complete","onerror","_createAsNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","asNavFor","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","firstIndex","t","selectIndex","removeNavSelectedElements","navSelectedElements","changeNavSelectedClass","navElem","cellElement","imagesLoaded","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","child","1","9","11","LoadingImage","Background","url","Image","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","progressedCount","hasAnyBroken","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","unbindEvents","makeJQueryPlugin","promise","_createImagesLoaded","e","s","includes","_step","_iterator","_createForOfIteratorHelper","n","done","err","f","o","h","r","_toConsumableArray","assign","_step2","_iterator2","_step3","_iterator3","_this2","crossOrigin","currentSrc","initRecaptcha","cardsAnimationTiming","initCardsAnimation","initFormFieldsToggle","initFormsValidation","initModalResponse","initIubendaProof","initLoadMore","initFilter","initVideo","initMapScript","initSwitchLanguage","initMobileMenu","initFadeInAnimations","initImageGalleryWidget","initRelatedUsageAreasWidget","initTextImageExtendedBlockReadMore","initRelatedPreparationsWidget","initMultimediaGalleryWidget","initMultipleHeadingWidget","initHeadingVideo","jsLazyLoadImages","initRotatingHeadingComponent","initProductColorsWidget","initMediaVideoComponent","initImageBanner","shopifyGTMEvent","initIncludedOptionalsWidget","delay","cardsToAnimateNodeList","card","hasAttribute","contactFormsArray","form","togglerArray","elementsToBeToggledArray","toggler","toggleFormFields","array","selectToggler","split","HTMLInputElement","HTMLSelectElement","input","mapsArray","APIKEY","script","async","head","initMap","singleMap","markerLat","markerLng","markerTitle","markerDescription","google","maps","Map","zoom","lat","lng","Marker","title","label","container","video","closest","imageBannerWidgetList","imageBannerWidget","startX","scrollLeft","isDown","offsetLeft","walk","initCarousel","flickitySlider","langIcon","dropdownMenuLanguage","contains","videosArray","iframe","iframeContainer","videoUrl","queryForAlreadyCreatedIframe","frameBorder","allowFullscreen","allow","toString","innerHTML","scrollIntoView","block","inline","parentElement","header","hamburgerIcon","closeIcon","initAccordionForMobileMenu","accordionTogglerArray","accordionToggler","toggle","_step4","_iterator4","sibling","flickitySlidersArray","elementsToAnimate","observer","IntersectionObserver","entries","entry","isIntersecting","observe","debouncer","func","timeoutId","_this3","_len","_key","filterInput","itemsToFilterArray","itemsTitleToFilterArray","inputText","innerText","isFormValid","contactForms","submitButton","singleForm","sessionStorage","modalForm","contactFormRequiredElements","setItem","temporaryDisableButton","checkFormValidity","isRecaptchaEnabled","grecaptcha","execute","arrayOfRequiredElements","errorCounter","item","isValidItem","checkValidity","html","btoa","encodeURI","textArea","createTextNode","name","asyncImg","asyncBg","jsLazyLoad","lazyImgs","lazyImagesBG","notLazyNodes","some","node","active","lazyImage","getBoundingClientRect","top","bottom","resizeBg","filter","buttonsArray","dataContainersArray","dataContainer","nextPageUrl","href","fetch","then","text","result","parsedHTML","DOMParser","parseFromString","cardsToAppendArray","loadMoreButtonId","updatedButton","modalResponse","errorResponse","modal","closeModal","URL","location","searchParams","get","raise","errorConstructor","requestSubmit","submitter","TypeError","DOMException","click","HTMLFormElement","recaptchaContainer","ready","widgetId","render","sitekey","tabindex","submitAfterCaptcha","token","formToSubmit","sliderSelector","showArrows","showDots","createdSlidersArray","arrayCarousel","carouselContainer","arraySliderItems","clientWidth","shopifyContainerList","shopifyContainer","buttonContainer","contentWindow","selectedOption","variant","quantity","price","iframeModal","dataLayer","ecommerce","currency","items","item_name","item_variant","colorPickerElementsArray","productColorElementsArray","backGroundImagesArray","selectedColor","selectedBackgroundImage","notClickedElement","selectedProductColor","notSelectedElement","notSelectedImage","wasActiveElement","addPreviousAndNextClassesToSlides","slidesArray","previousElementSibling","nextSibling","nextElementSibling","textToggler","textToShow"],"mappings":"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","file":"scriptsbundle.js","sourcesContent":["/*!\r\n * Flickity PACKAGED v2.2.0\r\n * Touch, responsive, flickable carousels\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Flickity Commercial License for commercial use\r\n *\r\n * https://flickity.metafizzy.co\r\n * Copyright 2015-2018 Metafizzy\r\n */\r\n\r\n/**\r\n * Bridget makes jQuery widgets\r\n * v2.0.1\r\n * MIT license\r\n */\r\n\r\n/* jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /* globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {\r\n return factory( window, jQuery );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('jquery')\r\n );\r\n } else {\r\n // browser global\r\n window.jQueryBridget = factory(\r\n window,\r\n window.jQuery\r\n );\r\n }\r\n\r\n}( window, function factory( window, jQuery ) {\r\n'use strict';\r\n\r\n// ----- utils ----- //\r\n\r\nvar arraySlice = Array.prototype.slice;\r\n\r\n// helper function for logging errors\r\n// $.error breaks jQuery chaining\r\nvar console = window.console;\r\nvar logError = typeof console == 'undefined' ? function() {} :\r\n function( message ) {\r\n console.error( message );\r\n };\r\n\r\n// ----- jQueryBridget ----- //\r\n\r\nfunction jQueryBridget( namespace, PluginClass, $ ) {\r\n $ = $ || jQuery || window.jQuery;\r\n if ( !$ ) {\r\n return;\r\n }\r\n\r\n // add option method -> $().plugin('option', {...})\r\n if ( !PluginClass.prototype.option ) {\r\n // option setter\r\n PluginClass.prototype.option = function( opts ) {\r\n // bail out if not an object\r\n if ( !$.isPlainObject( opts ) ){\r\n return;\r\n }\r\n this.options = $.extend( true, this.options, opts );\r\n };\r\n }\r\n\r\n // make jQuery plugin\r\n $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\r\n if ( typeof arg0 == 'string' ) {\r\n // method call $().plugin( 'methodName', { options } )\r\n // shift arguments by 1\r\n var args = arraySlice.call( arguments, 1 );\r\n return methodCall( this, arg0, args );\r\n }\r\n // just $().plugin({ options })\r\n plainCall( this, arg0 );\r\n return this;\r\n };\r\n\r\n // $().plugin('methodName')\r\n function methodCall( $elems, methodName, args ) {\r\n var returnValue;\r\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\r\n\r\n $elems.each( function( i, elem ) {\r\n // get instance\r\n var instance = $.data( elem, namespace );\r\n if ( !instance ) {\r\n logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\r\n pluginMethodStr );\r\n return;\r\n }\r\n\r\n var method = instance[ methodName ];\r\n if ( !method || methodName.charAt(0) == '_' ) {\r\n logError( pluginMethodStr + ' is not a valid method' );\r\n return;\r\n }\r\n\r\n // apply method, get return value\r\n var value = method.apply( instance, args );\r\n // set return value if value is returned, use only first value\r\n returnValue = returnValue === undefined ? value : returnValue;\r\n });\r\n\r\n return returnValue !== undefined ? returnValue : $elems;\r\n }\r\n\r\n function plainCall( $elems, options ) {\r\n $elems.each( function( i, elem ) {\r\n var instance = $.data( elem, namespace );\r\n if ( instance ) {\r\n // set options & init\r\n instance.option( options );\r\n instance._init();\r\n } else {\r\n // initialize new instance\r\n instance = new PluginClass( elem, options );\r\n $.data( elem, namespace, instance );\r\n }\r\n });\r\n }\r\n\r\n updateJQuery( $ );\r\n\r\n}\r\n\r\n// ----- updateJQuery ----- //\r\n\r\n// set $.bridget for v1 backwards compatibility\r\nfunction updateJQuery( $ ) {\r\n if ( !$ || ( $ && $.bridget ) ) {\r\n return;\r\n }\r\n $.bridget = jQueryBridget;\r\n}\r\n\r\nupdateJQuery( jQuery || window.jQuery );\r\n\r\n// ----- ----- //\r\n\r\nreturn jQueryBridget;\r\n\r\n}));\r\n\r\n/**\r\n * EvEmitter v1.1.0\r\n * Lil' event emitter\r\n * MIT License\r\n */\r\n\r\n/* jshint unused: true, undef: true, strict: true */\r\n\r\n( function( global, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */ /* globals define, module, window */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD - RequireJS\r\n define( 'ev-emitter/ev-emitter',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS - Browserify, Webpack\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n global.EvEmitter = factory();\r\n }\r\n\r\n}( typeof window != 'undefined' ? window : this, function() {\r\n\r\n\r\n\r\nfunction EvEmitter() {}\r\n\r\nvar proto = EvEmitter.prototype;\r\n\r\nproto.on = function( eventName, listener ) {\r\n if ( !eventName || !listener ) {\r\n return;\r\n }\r\n // set events hash\r\n var events = this._events = this._events || {};\r\n // set listeners array\r\n var listeners = events[ eventName ] = events[ eventName ] || [];\r\n // only add once\r\n if ( listeners.indexOf( listener ) == -1 ) {\r\n listeners.push( listener );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.once = function( eventName, listener ) {\r\n if ( !eventName || !listener ) {\r\n return;\r\n }\r\n // add event\r\n this.on( eventName, listener );\r\n // set once flag\r\n // set onceEvents hash\r\n var onceEvents = this._onceEvents = this._onceEvents || {};\r\n // set onceListeners object\r\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\r\n // set flag\r\n onceListeners[ listener ] = true;\r\n\r\n return this;\r\n};\r\n\r\nproto.off = function( eventName, listener ) {\r\n var listeners = this._events && this._events[ eventName ];\r\n if ( !listeners || !listeners.length ) {\r\n return;\r\n }\r\n var index = listeners.indexOf( listener );\r\n if ( index != -1 ) {\r\n listeners.splice( index, 1 );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.emitEvent = function( eventName, args ) {\r\n var listeners = this._events && this._events[ eventName ];\r\n if ( !listeners || !listeners.length ) {\r\n return;\r\n }\r\n // copy over to avoid interference if .off() in listener\r\n listeners = listeners.slice(0);\r\n args = args || [];\r\n // once stuff\r\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\r\n\r\n for ( var i=0; i < listeners.length; i++ ) {\r\n var listener = listeners[i]\r\n var isOnce = onceListeners && onceListeners[ listener ];\r\n if ( isOnce ) {\r\n // remove listener\r\n // remove before trigger to prevent recursion\r\n this.off( eventName, listener );\r\n // unset once flag\r\n delete onceListeners[ listener ];\r\n }\r\n // trigger listener\r\n listener.apply( this, args );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.allOff = function() {\r\n delete this._events;\r\n delete this._onceEvents;\r\n};\r\n\r\nreturn EvEmitter;\r\n\r\n}));\r\n\r\n/*!\r\n * getSize v2.0.3\r\n * measure size of elements\r\n * MIT license\r\n */\r\n\r\n/* jshint browser: true, strict: true, undef: true, unused: true */\r\n/* globals console: false */\r\n\r\n( function( window, factory ) {\r\n /* jshint strict: false */ /* globals define, module */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'get-size/get-size',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.getSize = factory();\r\n }\r\n\r\n})( window, function factory() {\r\n'use strict';\r\n\r\n// -------------------------- helpers -------------------------- //\r\n\r\n// get a number from a string, not a percentage\r\nfunction getStyleSize( value ) {\r\n var num = parseFloat( value );\r\n // not a percent like '100%', and a number\r\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\r\n return isValid && num;\r\n}\r\n\r\nfunction noop() {}\r\n\r\nvar logError = typeof console == 'undefined' ? noop :\r\n function( message ) {\r\n console.error( message );\r\n };\r\n\r\n// -------------------------- measurements -------------------------- //\r\n\r\nvar measurements = [\r\n 'paddingLeft',\r\n 'paddingRight',\r\n 'paddingTop',\r\n 'paddingBottom',\r\n 'marginLeft',\r\n 'marginRight',\r\n 'marginTop',\r\n 'marginBottom',\r\n 'borderLeftWidth',\r\n 'borderRightWidth',\r\n 'borderTopWidth',\r\n 'borderBottomWidth'\r\n];\r\n\r\nvar measurementsLength = measurements.length;\r\n\r\nfunction getZeroSize() {\r\n var size = {\r\n width: 0,\r\n height: 0,\r\n innerWidth: 0,\r\n innerHeight: 0,\r\n outerWidth: 0,\r\n outerHeight: 0\r\n };\r\n for ( var i=0; i < measurementsLength; i++ ) {\r\n var measurement = measurements[i];\r\n size[ measurement ] = 0;\r\n }\r\n return size;\r\n}\r\n\r\n// -------------------------- getStyle -------------------------- //\r\n\r\n/**\r\n * getStyle, get style of element, check for Firefox bug\r\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\r\n */\r\nfunction getStyle( elem ) {\r\n var style = getComputedStyle( elem );\r\n if ( !style ) {\r\n logError( 'Style returned ' + style +\r\n '. Are you running this code in a hidden iframe on Firefox? ' +\r\n 'See https://bit.ly/getsizebug1' );\r\n }\r\n return style;\r\n}\r\n\r\n// -------------------------- setup -------------------------- //\r\n\r\nvar isSetup = false;\r\n\r\nvar isBoxSizeOuter;\r\n\r\n/**\r\n * setup\r\n * check isBoxSizerOuter\r\n * do on first getSize() rather than on page load for Firefox bug\r\n */\r\nfunction setup() {\r\n // setup once\r\n if ( isSetup ) {\r\n return;\r\n }\r\n isSetup = true;\r\n\r\n // -------------------------- box sizing -------------------------- //\r\n\r\n /**\r\n * Chrome & Safari measure the outer-width on style.width on border-box elems\r\n * IE11 & Firefox<29 measures the inner-width\r\n */\r\n var div = document.createElement('div');\r\n div.style.width = '200px';\r\n div.style.padding = '1px 2px 3px 4px';\r\n div.style.borderStyle = 'solid';\r\n div.style.borderWidth = '1px 2px 3px 4px';\r\n div.style.boxSizing = 'border-box';\r\n\r\n var body = document.body || document.documentElement;\r\n body.appendChild( div );\r\n var style = getStyle( div );\r\n // round value for browser zoom. desandro/masonry#928\r\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\r\n getSize.isBoxSizeOuter = isBoxSizeOuter;\r\n\r\n body.removeChild( div );\r\n}\r\n\r\n// -------------------------- getSize -------------------------- //\r\n\r\nfunction getSize( elem ) {\r\n setup();\r\n\r\n // use querySeletor if elem is string\r\n if ( typeof elem == 'string' ) {\r\n elem = document.querySelector( elem );\r\n }\r\n\r\n // do not proceed on non-objects\r\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\r\n return;\r\n }\r\n\r\n var style = getStyle( elem );\r\n\r\n // if hidden, everything is 0\r\n if ( style.display == 'none' ) {\r\n return getZeroSize();\r\n }\r\n\r\n var size = {};\r\n size.width = elem.offsetWidth;\r\n size.height = elem.offsetHeight;\r\n\r\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\r\n\r\n // get all measurements\r\n for ( var i=0; i < measurementsLength; i++ ) {\r\n var measurement = measurements[i];\r\n var value = style[ measurement ];\r\n var num = parseFloat( value );\r\n // any 'auto', 'medium' value will be 0\r\n size[ measurement ] = !isNaN( num ) ? num : 0;\r\n }\r\n\r\n var paddingWidth = size.paddingLeft + size.paddingRight;\r\n var paddingHeight = size.paddingTop + size.paddingBottom;\r\n var marginWidth = size.marginLeft + size.marginRight;\r\n var marginHeight = size.marginTop + size.marginBottom;\r\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\r\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\r\n\r\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\r\n\r\n // overwrite width and height if we can get it from style\r\n var styleWidth = getStyleSize( style.width );\r\n if ( styleWidth !== false ) {\r\n size.width = styleWidth +\r\n // add padding and border unless it's already including it\r\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\r\n }\r\n\r\n var styleHeight = getStyleSize( style.height );\r\n if ( styleHeight !== false ) {\r\n size.height = styleHeight +\r\n // add padding and border unless it's already including it\r\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\r\n }\r\n\r\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\r\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\r\n\r\n size.outerWidth = size.width + marginWidth;\r\n size.outerHeight = size.height + marginHeight;\r\n\r\n return size;\r\n}\r\n\r\nreturn getSize;\r\n\r\n});\r\n\r\n/**\r\n * matchesSelector v2.0.2\r\n * matchesSelector( element, '.selector' )\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n( function( window, factory ) {\r\n /*global define: false, module: false */\r\n 'use strict';\r\n // universal module definition\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'desandro-matches-selector/matches-selector',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.matchesSelector = factory();\r\n }\r\n\r\n}( window, function factory() {\r\n 'use strict';\r\n\r\n var matchesMethod = ( function() {\r\n var ElemProto = window.Element.prototype;\r\n // check for the standard method name first\r\n if ( ElemProto.matches ) {\r\n return 'matches';\r\n }\r\n // check un-prefixed\r\n if ( ElemProto.matchesSelector ) {\r\n return 'matchesSelector';\r\n }\r\n // check vendor prefixes\r\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\r\n\r\n for ( var i=0; i < prefixes.length; i++ ) {\r\n var prefix = prefixes[i];\r\n var method = prefix + 'MatchesSelector';\r\n if ( ElemProto[ method ] ) {\r\n return method;\r\n }\r\n }\r\n })();\r\n\r\n return function matchesSelector( elem, selector ) {\r\n return elem[ matchesMethod ]( selector );\r\n };\r\n\r\n}));\r\n\r\n/**\r\n * Fizzy UI utils v2.0.7\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'fizzy-ui-utils/utils',[\r\n 'desandro-matches-selector/matches-selector'\r\n ], function( matchesSelector ) {\r\n return factory( window, matchesSelector );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('desandro-matches-selector')\r\n );\r\n } else {\r\n // browser global\r\n window.fizzyUIUtils = factory(\r\n window,\r\n window.matchesSelector\r\n );\r\n }\r\n\r\n}( window, function factory( window, matchesSelector ) {\r\n\r\n\r\n\r\nvar utils = {};\r\n\r\n// ----- extend ----- //\r\n\r\n// extends objects\r\nutils.extend = function( a, b ) {\r\n for ( var prop in b ) {\r\n a[ prop ] = b[ prop ];\r\n }\r\n return a;\r\n};\r\n\r\n// ----- modulo ----- //\r\n\r\nutils.modulo = function( num, div ) {\r\n return ( ( num % div ) + div ) % div;\r\n};\r\n\r\n// ----- makeArray ----- //\r\n\r\nvar arraySlice = Array.prototype.slice;\r\n\r\n// turn element or nodeList into an array\r\nutils.makeArray = function( obj ) {\r\n if ( Array.isArray( obj ) ) {\r\n // use object if already an array\r\n return obj;\r\n }\r\n // return empty array if undefined or null. #6\r\n if ( obj === null || obj === undefined ) {\r\n return [];\r\n }\r\n\r\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\r\n if ( isArrayLike ) {\r\n // convert nodeList to array\r\n return arraySlice.call( obj );\r\n }\r\n\r\n // array of single index\r\n return [ obj ];\r\n};\r\n\r\n// ----- removeFrom ----- //\r\n\r\nutils.removeFrom = function( ary, obj ) {\r\n var index = ary.indexOf( obj );\r\n if ( index != -1 ) {\r\n ary.splice( index, 1 );\r\n }\r\n};\r\n\r\n// ----- getParent ----- //\r\n\r\nutils.getParent = function( elem, selector ) {\r\n while ( elem.parentNode && elem != document.body ) {\r\n elem = elem.parentNode;\r\n if ( matchesSelector( elem, selector ) ) {\r\n return elem;\r\n }\r\n }\r\n};\r\n\r\n// ----- getQueryElement ----- //\r\n\r\n// use element as selector string\r\nutils.getQueryElement = function( elem ) {\r\n if ( typeof elem == 'string' ) {\r\n return document.querySelector( elem );\r\n }\r\n return elem;\r\n};\r\n\r\n// ----- handleEvent ----- //\r\n\r\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\r\nutils.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\n// ----- filterFindElements ----- //\r\n\r\nutils.filterFindElements = function( elems, selector ) {\r\n // make array of elems\r\n elems = utils.makeArray( elems );\r\n var ffElems = [];\r\n\r\n elems.forEach( function( elem ) {\r\n // check that elem is an actual element\r\n if ( !( elem instanceof HTMLElement ) ) {\r\n return;\r\n }\r\n // add elem if no selector\r\n if ( !selector ) {\r\n ffElems.push( elem );\r\n return;\r\n }\r\n // filter & find items if we have a selector\r\n // filter\r\n if ( matchesSelector( elem, selector ) ) {\r\n ffElems.push( elem );\r\n }\r\n // find children\r\n var childElems = elem.querySelectorAll( selector );\r\n // concat childElems to filterFound array\r\n for ( var i=0; i < childElems.length; i++ ) {\r\n ffElems.push( childElems[i] );\r\n }\r\n });\r\n\r\n return ffElems;\r\n};\r\n\r\n// ----- debounceMethod ----- //\r\n\r\nutils.debounceMethod = function( _class, methodName, threshold ) {\r\n threshold = threshold || 100;\r\n // original method\r\n var method = _class.prototype[ methodName ];\r\n var timeoutName = methodName + 'Timeout';\r\n\r\n _class.prototype[ methodName ] = function() {\r\n var timeout = this[ timeoutName ];\r\n clearTimeout( timeout );\r\n\r\n var args = arguments;\r\n var _this = this;\r\n this[ timeoutName ] = setTimeout( function() {\r\n method.apply( _this, args );\r\n delete _this[ timeoutName ];\r\n }, threshold );\r\n };\r\n};\r\n\r\n// ----- docReady ----- //\r\n\r\nutils.docReady = function( callback ) {\r\n var readyState = document.readyState;\r\n if ( readyState == 'complete' || readyState == 'interactive' ) {\r\n // do async to allow for other scripts to run. metafizzy/flickity#441\r\n setTimeout( callback );\r\n } else {\r\n document.addEventListener( 'DOMContentLoaded', callback );\r\n }\r\n};\r\n\r\n// ----- htmlInit ----- //\r\n\r\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\r\nutils.toDashed = function( str ) {\r\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\r\n return $1 + '-' + $2;\r\n }).toLowerCase();\r\n};\r\n\r\nvar console = window.console;\r\n/**\r\n * allow user to initialize classes via [data-namespace] or .js-namespace class\r\n * htmlInit( Widget, 'widgetName' )\r\n * options are parsed from data-namespace-options\r\n */\r\nutils.htmlInit = function( WidgetClass, namespace ) {\r\n utils.docReady( function() {\r\n var dashedNamespace = utils.toDashed( namespace );\r\n var dataAttr = 'data-' + dashedNamespace;\r\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\r\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\r\n var elems = utils.makeArray( dataAttrElems )\r\n .concat( utils.makeArray( jsDashElems ) );\r\n var dataOptionsAttr = dataAttr + '-options';\r\n var jQuery = window.jQuery;\r\n\r\n elems.forEach( function( elem ) {\r\n var attr = elem.getAttribute( dataAttr ) ||\r\n elem.getAttribute( dataOptionsAttr );\r\n var options;\r\n try {\r\n options = attr && JSON.parse( attr );\r\n } catch ( error ) {\r\n // log error, do not initialize\r\n if ( console ) {\r\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\r\n ': ' + error );\r\n }\r\n return;\r\n }\r\n // initialize\r\n var instance = new WidgetClass( elem, options );\r\n // make available via $().data('namespace')\r\n if ( jQuery ) {\r\n jQuery.data( elem, namespace, instance );\r\n }\r\n });\r\n\r\n });\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn utils;\r\n\r\n}));\r\n\r\n// Flickity.Cell\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/cell',[\r\n 'get-size/get-size'\r\n ], function( getSize ) {\r\n return factory( window, getSize );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('get-size')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = window.Flickity || {};\r\n window.Flickity.Cell = factory(\r\n window,\r\n window.getSize\r\n );\r\n }\r\n\r\n}( window, function factory( window, getSize ) {\r\n\r\n\r\n\r\nfunction Cell( elem, parent ) {\r\n this.element = elem;\r\n this.parent = parent;\r\n\r\n this.create();\r\n}\r\n\r\nvar proto = Cell.prototype;\r\n\r\nproto.create = function() {\r\n this.element.style.position = 'absolute';\r\n this.element.setAttribute( 'aria-hidden', 'true' );\r\n this.x = 0;\r\n this.shift = 0;\r\n};\r\n\r\nproto.destroy = function() {\r\n // reset style\r\n this.unselect();\r\n this.element.style.position = '';\r\n var side = this.parent.originSide;\r\n this.element.style[ side ] = '';\r\n};\r\n\r\nproto.getSize = function() {\r\n this.size = getSize( this.element );\r\n};\r\n\r\nproto.setPosition = function( x ) {\r\n this.x = x;\r\n this.updateTarget();\r\n this.renderPosition( x );\r\n};\r\n\r\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\r\nproto.updateTarget = proto.setDefaultTarget = function() {\r\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\r\n this.target = this.x + this.size[ marginProperty ] +\r\n this.size.width * this.parent.cellAlign;\r\n};\r\n\r\nproto.renderPosition = function( x ) {\r\n // render position of cell with in slider\r\n var side = this.parent.originSide;\r\n this.element.style[ side ] = this.parent.getPositionValue( x );\r\n};\r\n\r\nproto.select = function() {\r\n this.element.classList.add('is-selected');\r\n this.element.removeAttribute('aria-hidden');\r\n};\r\n\r\nproto.unselect = function() {\r\n this.element.classList.remove('is-selected');\r\n this.element.setAttribute( 'aria-hidden', 'true' );\r\n};\r\n\r\n/**\r\n * @param {Integer} factor - 0, 1, or -1\r\n**/\r\nproto.wrapShift = function( shift ) {\r\n this.shift = shift;\r\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\r\n};\r\n\r\nproto.remove = function() {\r\n this.element.parentNode.removeChild( this.element );\r\n};\r\n\r\nreturn Cell;\r\n\r\n}));\r\n\r\n// slide\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/slide',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.Flickity = window.Flickity || {};\r\n window.Flickity.Slide = factory();\r\n }\r\n\r\n}( window, function factory() {\r\n'use strict';\r\n\r\nfunction Slide( parent ) {\r\n this.parent = parent;\r\n this.isOriginLeft = parent.originSide == 'left';\r\n this.cells = [];\r\n this.outerWidth = 0;\r\n this.height = 0;\r\n}\r\n\r\nvar proto = Slide.prototype;\r\n\r\nproto.addCell = function( cell ) {\r\n this.cells.push( cell );\r\n this.outerWidth += cell.size.outerWidth;\r\n this.height = Math.max( cell.size.outerHeight, this.height );\r\n // first cell stuff\r\n if ( this.cells.length == 1 ) {\r\n this.x = cell.x; // x comes from first cell\r\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\r\n this.firstMargin = cell.size[ beginMargin ];\r\n }\r\n};\r\n\r\nproto.updateTarget = function() {\r\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\r\n var lastCell = this.getLastCell();\r\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\r\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\r\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\r\n};\r\n\r\nproto.getLastCell = function() {\r\n return this.cells[ this.cells.length - 1 ];\r\n};\r\n\r\nproto.select = function() {\r\n this.cells.forEach( function( cell ) {\r\n cell.select();\r\n });\r\n};\r\n\r\nproto.unselect = function() {\r\n this.cells.forEach( function( cell ) {\r\n cell.unselect();\r\n });\r\n};\r\n\r\nproto.getCellElements = function() {\r\n return this.cells.map( function( cell ) {\r\n return cell.element;\r\n });\r\n};\r\n\r\nreturn Slide;\r\n\r\n}));\r\n\r\n// animate\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/animate',[\r\n 'fizzy-ui-utils/utils'\r\n ], function( utils ) {\r\n return factory( window, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = window.Flickity || {};\r\n window.Flickity.animatePrototype = factory(\r\n window,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, utils ) {\r\n\r\n\r\n\r\n// -------------------------- animate -------------------------- //\r\n\r\nvar proto = {};\r\n\r\nproto.startAnimation = function() {\r\n if ( this.isAnimating ) {\r\n return;\r\n }\r\n\r\n this.isAnimating = true;\r\n this.restingFrames = 0;\r\n this.animate();\r\n};\r\n\r\nproto.animate = function() {\r\n this.applyDragForce();\r\n this.applySelectedAttraction();\r\n\r\n var previousX = this.x;\r\n\r\n this.integratePhysics();\r\n this.positionSlider();\r\n this.settle( previousX );\r\n // animate next frame\r\n if ( this.isAnimating ) {\r\n var _this = this;\r\n requestAnimationFrame( function animateFrame() {\r\n _this.animate();\r\n });\r\n }\r\n};\r\n\r\nproto.positionSlider = function() {\r\n var x = this.x;\r\n // wrap position around\r\n if ( this.options.wrapAround && this.cells.length > 1 ) {\r\n x = utils.modulo( x, this.slideableWidth );\r\n x = x - this.slideableWidth;\r\n this.shiftWrapCells( x );\r\n }\r\n\r\n this.setTranslateX( x, this.isAnimating );\r\n this.dispatchScrollEvent();\r\n};\r\n\r\nproto.setTranslateX = function( x, is3d ) {\r\n x += this.cursorPosition;\r\n // reverse if right-to-left and using transform\r\n x = this.options.rightToLeft ? -x : x;\r\n var translateX = this.getPositionValue( x );\r\n // use 3D tranforms for hardware acceleration on iOS\r\n // but use 2D when settled, for better font-rendering\r\n this.slider.style.transform = is3d ?\r\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\r\n};\r\n\r\nproto.dispatchScrollEvent = function() {\r\n var firstSlide = this.slides[0];\r\n if ( !firstSlide ) {\r\n return;\r\n }\r\n var positionX = -this.x - firstSlide.target;\r\n var progress = positionX / this.slidesWidth;\r\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\r\n};\r\n\r\nproto.positionSliderAtSelected = function() {\r\n if ( !this.cells.length ) {\r\n return;\r\n }\r\n this.x = -this.selectedSlide.target;\r\n this.velocity = 0; // stop wobble\r\n this.positionSlider();\r\n};\r\n\r\nproto.getPositionValue = function( position ) {\r\n if ( this.options.percentPosition ) {\r\n // percent position, round to 2 digits, like 12.34%\r\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\r\n } else {\r\n // pixel positioning\r\n return Math.round( position ) + 'px';\r\n }\r\n};\r\n\r\nproto.settle = function( previousX ) {\r\n // keep track of frames where x hasn't moved\r\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\r\n this.restingFrames++;\r\n }\r\n // stop animating if resting for 3 or more frames\r\n if ( this.restingFrames > 2 ) {\r\n this.isAnimating = false;\r\n delete this.isFreeScrolling;\r\n // render position with translateX when settled\r\n this.positionSlider();\r\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\r\n }\r\n};\r\n\r\nproto.shiftWrapCells = function( x ) {\r\n // shift before cells\r\n var beforeGap = this.cursorPosition + x;\r\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\r\n // shift after cells\r\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\r\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\r\n};\r\n\r\nproto._shiftCells = function( cells, gap, shift ) {\r\n for ( var i=0; i < cells.length; i++ ) {\r\n var cell = cells[i];\r\n var cellShift = gap > 0 ? shift : 0;\r\n cell.wrapShift( cellShift );\r\n gap -= cell.size.outerWidth;\r\n }\r\n};\r\n\r\nproto._unshiftCells = function( cells ) {\r\n if ( !cells || !cells.length ) {\r\n return;\r\n }\r\n for ( var i=0; i < cells.length; i++ ) {\r\n cells[i].wrapShift( 0 );\r\n }\r\n};\r\n\r\n// -------------------------- physics -------------------------- //\r\n\r\nproto.integratePhysics = function() {\r\n this.x += this.velocity;\r\n this.velocity *= this.getFrictionFactor();\r\n};\r\n\r\nproto.applyForce = function( force ) {\r\n this.velocity += force;\r\n};\r\n\r\nproto.getFrictionFactor = function() {\r\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\r\n};\r\n\r\nproto.getRestingPosition = function() {\r\n // my thanks to Steven Wittens, who simplified this math greatly\r\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\r\n};\r\n\r\nproto.applyDragForce = function() {\r\n if ( !this.isDraggable || !this.isPointerDown ) {\r\n return;\r\n }\r\n // change the position to drag position by applying force\r\n var dragVelocity = this.dragX - this.x;\r\n var dragForce = dragVelocity - this.velocity;\r\n this.applyForce( dragForce );\r\n};\r\n\r\nproto.applySelectedAttraction = function() {\r\n // do not attract if pointer down or no slides\r\n var dragDown = this.isDraggable && this.isPointerDown;\r\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\r\n return;\r\n }\r\n var distance = this.selectedSlide.target * -1 - this.x;\r\n var force = distance * this.options.selectedAttraction;\r\n this.applyForce( force );\r\n};\r\n\r\nreturn proto;\r\n\r\n}));\r\n\r\n// Flickity main\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/flickity',[\r\n 'ev-emitter/ev-emitter',\r\n 'get-size/get-size',\r\n 'fizzy-ui-utils/utils',\r\n './cell',\r\n './slide',\r\n './animate'\r\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\r\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter'),\r\n require('get-size'),\r\n require('fizzy-ui-utils'),\r\n require('./cell'),\r\n require('./slide'),\r\n require('./animate')\r\n );\r\n } else {\r\n // browser global\r\n var _Flickity = window.Flickity;\r\n\r\n window.Flickity = factory(\r\n window,\r\n window.EvEmitter,\r\n window.getSize,\r\n window.fizzyUIUtils,\r\n _Flickity.Cell,\r\n _Flickity.Slide,\r\n _Flickity.animatePrototype\r\n );\r\n }\r\n\r\n}( window, function factory( window, EvEmitter, getSize,\r\n utils, Cell, Slide, animatePrototype ) {\r\n\r\n\r\n\r\n// vars\r\nvar jQuery = window.jQuery;\r\nvar getComputedStyle = window.getComputedStyle;\r\nvar console = window.console;\r\n\r\nfunction moveElements( elems, toElem ) {\r\n elems = utils.makeArray( elems );\r\n while ( elems.length ) {\r\n toElem.appendChild( elems.shift() );\r\n }\r\n}\r\n\r\n// -------------------------- Flickity -------------------------- //\r\n\r\n// globally unique identifiers\r\nvar GUID = 0;\r\n// internal store of all Flickity intances\r\nvar instances = {};\r\n\r\nfunction Flickity( element, options ) {\r\n var queryElement = utils.getQueryElement( element );\r\n if ( !queryElement ) {\r\n if ( console ) {\r\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\r\n }\r\n return;\r\n }\r\n this.element = queryElement;\r\n // do not initialize twice on same element\r\n if ( this.element.flickityGUID ) {\r\n var instance = instances[ this.element.flickityGUID ];\r\n instance.option( options );\r\n return instance;\r\n }\r\n\r\n // add jQuery\r\n if ( jQuery ) {\r\n this.$element = jQuery( this.element );\r\n }\r\n // options\r\n this.options = utils.extend( {}, this.constructor.defaults );\r\n this.option( options );\r\n\r\n // kick things off\r\n this._create();\r\n}\r\n\r\nFlickity.defaults = {\r\n accessibility: true,\r\n // adaptiveHeight: false,\r\n cellAlign: 'center',\r\n // cellSelector: undefined,\r\n // contain: false,\r\n freeScrollFriction: 0.075, // friction when free-scrolling\r\n friction: 0.28, // friction when selecting\r\n namespaceJQueryEvents: true,\r\n // initialIndex: 0,\r\n percentPosition: true,\r\n resize: true,\r\n selectedAttraction: 0.025,\r\n setGallerySize: true\r\n // watchCSS: false,\r\n // wrapAround: false\r\n};\r\n\r\n// hash of methods triggered on _create()\r\nFlickity.createMethods = [];\r\n\r\nvar proto = Flickity.prototype;\r\n// inherit EventEmitter\r\nutils.extend( proto, EvEmitter.prototype );\r\n\r\nproto._create = function() {\r\n // add id for Flickity.data\r\n var id = this.guid = ++GUID;\r\n this.element.flickityGUID = id; // expando\r\n instances[ id ] = this; // associate via id\r\n // initial properties\r\n this.selectedIndex = 0;\r\n // how many frames slider has been in same position\r\n this.restingFrames = 0;\r\n // initial physics properties\r\n this.x = 0;\r\n this.velocity = 0;\r\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\r\n // create viewport & slider\r\n this.viewport = document.createElement('div');\r\n this.viewport.className = 'flickity-viewport';\r\n this._createSlider();\r\n\r\n if ( this.options.resize || this.options.watchCSS ) {\r\n window.addEventListener( 'resize', this );\r\n }\r\n\r\n // add listeners from on option\r\n for ( var eventName in this.options.on ) {\r\n var listener = this.options.on[ eventName ];\r\n this.on( eventName, listener );\r\n }\r\n\r\n Flickity.createMethods.forEach( function( method ) {\r\n this[ method ]();\r\n }, this );\r\n\r\n if ( this.options.watchCSS ) {\r\n this.watchCSS();\r\n } else {\r\n this.activate();\r\n }\r\n\r\n};\r\n\r\n/**\r\n * set options\r\n * @param {Object} opts\r\n */\r\nproto.option = function( opts ) {\r\n utils.extend( this.options, opts );\r\n};\r\n\r\nproto.activate = function() {\r\n if ( this.isActive ) {\r\n return;\r\n }\r\n this.isActive = true;\r\n this.element.classList.add('flickity-enabled');\r\n if ( this.options.rightToLeft ) {\r\n this.element.classList.add('flickity-rtl');\r\n }\r\n\r\n this.getSize();\r\n // move initial cell elements so they can be loaded as cells\r\n var cellElems = this._filterFindCellElements( this.element.children );\r\n moveElements( cellElems, this.slider );\r\n this.viewport.appendChild( this.slider );\r\n this.element.appendChild( this.viewport );\r\n // get cells from children\r\n this.reloadCells();\r\n\r\n if ( this.options.accessibility ) {\r\n // allow element to focusable\r\n this.element.tabIndex = 0;\r\n // listen for key presses\r\n this.element.addEventListener( 'keydown', this );\r\n }\r\n\r\n this.emitEvent('activate');\r\n this.selectInitialIndex();\r\n // flag for initial activation, for using initialIndex\r\n this.isInitActivated = true;\r\n // ready event. #493\r\n this.dispatchEvent('ready');\r\n};\r\n\r\n// slider positions the cells\r\nproto._createSlider = function() {\r\n // slider element does all the positioning\r\n var slider = document.createElement('div');\r\n slider.className = 'flickity-slider';\r\n slider.style[ this.originSide ] = 0;\r\n this.slider = slider;\r\n};\r\n\r\nproto._filterFindCellElements = function( elems ) {\r\n return utils.filterFindElements( elems, this.options.cellSelector );\r\n};\r\n\r\n// goes through all children\r\nproto.reloadCells = function() {\r\n // collection of item elements\r\n this.cells = this._makeCells( this.slider.children );\r\n this.positionCells();\r\n this._getWrapShiftCells();\r\n this.setGallerySize();\r\n};\r\n\r\n/**\r\n * turn elements into Flickity.Cells\r\n * @param {Array or NodeList or HTMLElement} elems\r\n * @returns {Array} items - collection of new Flickity Cells\r\n */\r\nproto._makeCells = function( elems ) {\r\n var cellElems = this._filterFindCellElements( elems );\r\n\r\n // create new Flickity for collection\r\n var cells = cellElems.map( function( cellElem ) {\r\n return new Cell( cellElem, this );\r\n }, this );\r\n\r\n return cells;\r\n};\r\n\r\nproto.getLastCell = function() {\r\n return this.cells[ this.cells.length - 1 ];\r\n};\r\n\r\nproto.getLastSlide = function() {\r\n return this.slides[ this.slides.length - 1 ];\r\n};\r\n\r\n// positions all cells\r\nproto.positionCells = function() {\r\n // size all cells\r\n this._sizeCells( this.cells );\r\n // position all cells\r\n this._positionCells( 0 );\r\n};\r\n\r\n/**\r\n * position certain cells\r\n * @param {Integer} index - which cell to start with\r\n */\r\nproto._positionCells = function( index ) {\r\n index = index || 0;\r\n // also measure maxCellHeight\r\n // start 0 if positioning all cells\r\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\r\n var cellX = 0;\r\n // get cellX\r\n if ( index > 0 ) {\r\n var startCell = this.cells[ index - 1 ];\r\n cellX = startCell.x + startCell.size.outerWidth;\r\n }\r\n var len = this.cells.length;\r\n for ( var i=index; i < len; i++ ) {\r\n var cell = this.cells[i];\r\n cell.setPosition( cellX );\r\n cellX += cell.size.outerWidth;\r\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\r\n }\r\n // keep track of cellX for wrap-around\r\n this.slideableWidth = cellX;\r\n // slides\r\n this.updateSlides();\r\n // contain slides target\r\n this._containSlides();\r\n // update slidesWidth\r\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\r\n};\r\n\r\n/**\r\n * cell.getSize() on multiple cells\r\n * @param {Array} cells\r\n */\r\nproto._sizeCells = function( cells ) {\r\n cells.forEach( function( cell ) {\r\n cell.getSize();\r\n });\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nproto.updateSlides = function() {\r\n this.slides = [];\r\n if ( !this.cells.length ) {\r\n return;\r\n }\r\n\r\n var slide = new Slide( this );\r\n this.slides.push( slide );\r\n var isOriginLeft = this.originSide == 'left';\r\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\r\n\r\n var canCellFit = this._getCanCellFit();\r\n\r\n this.cells.forEach( function( cell, i ) {\r\n // just add cell if first cell in slide\r\n if ( !slide.cells.length ) {\r\n slide.addCell( cell );\r\n return;\r\n }\r\n\r\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\r\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\r\n\r\n if ( canCellFit.call( this, i, slideWidth ) ) {\r\n slide.addCell( cell );\r\n } else {\r\n // doesn't fit, new slide\r\n slide.updateTarget();\r\n\r\n slide = new Slide( this );\r\n this.slides.push( slide );\r\n slide.addCell( cell );\r\n }\r\n }, this );\r\n // last slide\r\n slide.updateTarget();\r\n // update .selectedSlide\r\n this.updateSelectedSlide();\r\n};\r\n\r\nproto._getCanCellFit = function() {\r\n var groupCells = this.options.groupCells;\r\n if ( !groupCells ) {\r\n return function() {\r\n return false;\r\n };\r\n } else if ( typeof groupCells == 'number' ) {\r\n // group by number. 3 -> [0,1,2], [3,4,5], ...\r\n var number = parseInt( groupCells, 10 );\r\n return function( i ) {\r\n return ( i % number ) !== 0;\r\n };\r\n }\r\n // default, group by width of slide\r\n // parse '75%\r\n var percentMatch = typeof groupCells == 'string' &&\r\n groupCells.match(/^(\\d+)%$/);\r\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\r\n return function( i, slideWidth ) {\r\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\r\n };\r\n};\r\n\r\n// alias _init for jQuery plugin .flickity()\r\nproto._init =\r\nproto.reposition = function() {\r\n this.positionCells();\r\n this.positionSliderAtSelected();\r\n};\r\n\r\nproto.getSize = function() {\r\n this.size = getSize( this.element );\r\n this.setCellAlign();\r\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\r\n};\r\n\r\nvar cellAlignShorthands = {\r\n // cell align, then based on origin side\r\n center: {\r\n left: 0.5,\r\n right: 0.5\r\n },\r\n left: {\r\n left: 0,\r\n right: 1\r\n },\r\n right: {\r\n right: 0,\r\n left: 1\r\n }\r\n};\r\n\r\nproto.setCellAlign = function() {\r\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\r\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\r\n};\r\n\r\nproto.setGallerySize = function() {\r\n if ( this.options.setGallerySize ) {\r\n var height = this.options.adaptiveHeight && this.selectedSlide ?\r\n this.selectedSlide.height : this.maxCellHeight;\r\n this.viewport.style.height = height + 'px';\r\n }\r\n};\r\n\r\nproto._getWrapShiftCells = function() {\r\n // only for wrap-around\r\n if ( !this.options.wrapAround ) {\r\n return;\r\n }\r\n // unshift previous cells\r\n this._unshiftCells( this.beforeShiftCells );\r\n this._unshiftCells( this.afterShiftCells );\r\n // get before cells\r\n // initial gap\r\n var gapX = this.cursorPosition;\r\n var cellIndex = this.cells.length - 1;\r\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\r\n // get after cells\r\n // ending gap between last cell and end of gallery viewport\r\n gapX = this.size.innerWidth - this.cursorPosition;\r\n // start cloning at first cell, working forwards\r\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\r\n};\r\n\r\nproto._getGapCells = function( gapX, cellIndex, increment ) {\r\n // keep adding cells until the cover the initial gap\r\n var cells = [];\r\n while ( gapX > 0 ) {\r\n var cell = this.cells[ cellIndex ];\r\n if ( !cell ) {\r\n break;\r\n }\r\n cells.push( cell );\r\n cellIndex += increment;\r\n gapX -= cell.size.outerWidth;\r\n }\r\n return cells;\r\n};\r\n\r\n// ----- contain ----- //\r\n\r\n// contain cell targets so no excess sliding\r\nproto._containSlides = function() {\r\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\r\n return;\r\n }\r\n var isRightToLeft = this.options.rightToLeft;\r\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\r\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\r\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\r\n // content is less than gallery size\r\n var isContentSmaller = contentWidth < this.size.innerWidth;\r\n // bounds\r\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\r\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\r\n // contain each cell target\r\n this.slides.forEach( function( slide ) {\r\n if ( isContentSmaller ) {\r\n // all cells fit inside gallery\r\n slide.target = contentWidth * this.cellAlign;\r\n } else {\r\n // contain to bounds\r\n slide.target = Math.max( slide.target, beginBound );\r\n slide.target = Math.min( slide.target, endBound );\r\n }\r\n }, this );\r\n};\r\n\r\n// ----- ----- //\r\n\r\n/**\r\n * emits events via eventEmitter and jQuery events\r\n * @param {String} type - name of event\r\n * @param {Event} event - original event\r\n * @param {Array} args - extra arguments\r\n */\r\nproto.dispatchEvent = function( type, event, args ) {\r\n var emitArgs = event ? [ event ].concat( args ) : args;\r\n this.emitEvent( type, emitArgs );\r\n\r\n if ( jQuery && this.$element ) {\r\n // default trigger with type if no event\r\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\r\n var $event = type;\r\n if ( event ) {\r\n // create jQuery event\r\n var jQEvent = jQuery.Event( event );\r\n jQEvent.type = type;\r\n $event = jQEvent;\r\n }\r\n this.$element.trigger( $event, args );\r\n }\r\n};\r\n\r\n// -------------------------- select -------------------------- //\r\n\r\n/**\r\n * @param {Integer} index - index of the slide\r\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\r\n * @param {Boolean} isInstant - will immediately set position at selected cell\r\n */\r\nproto.select = function( index, isWrap, isInstant ) {\r\n if ( !this.isActive ) {\r\n return;\r\n }\r\n index = parseInt( index, 10 );\r\n this._wrapSelect( index );\r\n\r\n if ( this.options.wrapAround || isWrap ) {\r\n index = utils.modulo( index, this.slides.length );\r\n }\r\n // bail if invalid index\r\n if ( !this.slides[ index ] ) {\r\n return;\r\n }\r\n var prevIndex = this.selectedIndex;\r\n this.selectedIndex = index;\r\n this.updateSelectedSlide();\r\n if ( isInstant ) {\r\n this.positionSliderAtSelected();\r\n } else {\r\n this.startAnimation();\r\n }\r\n if ( this.options.adaptiveHeight ) {\r\n this.setGallerySize();\r\n }\r\n // events\r\n this.dispatchEvent( 'select', null, [ index ] );\r\n // change event if new index\r\n if ( index != prevIndex ) {\r\n this.dispatchEvent( 'change', null, [ index ] );\r\n }\r\n // old v1 event name, remove in v3\r\n this.dispatchEvent('cellSelect');\r\n};\r\n\r\n// wraps position for wrapAround, to move to closest slide. #113\r\nproto._wrapSelect = function( index ) {\r\n var len = this.slides.length;\r\n var isWrapping = this.options.wrapAround && len > 1;\r\n if ( !isWrapping ) {\r\n return index;\r\n }\r\n var wrapIndex = utils.modulo( index, len );\r\n // go to shortest\r\n var delta = Math.abs( wrapIndex - this.selectedIndex );\r\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\r\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\r\n if ( !this.isDragSelect && backWrapDelta < delta ) {\r\n index += len;\r\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\r\n index -= len;\r\n }\r\n // wrap position so slider is within normal area\r\n if ( index < 0 ) {\r\n this.x -= this.slideableWidth;\r\n } else if ( index >= len ) {\r\n this.x += this.slideableWidth;\r\n }\r\n};\r\n\r\nproto.previous = function( isWrap, isInstant ) {\r\n this.select( this.selectedIndex - 1, isWrap, isInstant );\r\n};\r\n\r\nproto.next = function( isWrap, isInstant ) {\r\n this.select( this.selectedIndex + 1, isWrap, isInstant );\r\n};\r\n\r\nproto.updateSelectedSlide = function() {\r\n var slide = this.slides[ this.selectedIndex ];\r\n // selectedIndex could be outside of slides, if triggered before resize()\r\n if ( !slide ) {\r\n return;\r\n }\r\n // unselect previous selected slide\r\n this.unselectSelectedSlide();\r\n // update new selected slide\r\n this.selectedSlide = slide;\r\n slide.select();\r\n this.selectedCells = slide.cells;\r\n this.selectedElements = slide.getCellElements();\r\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\r\n // Remove in v3?\r\n this.selectedCell = slide.cells[0];\r\n this.selectedElement = this.selectedElements[0];\r\n};\r\n\r\nproto.unselectSelectedSlide = function() {\r\n if ( this.selectedSlide ) {\r\n this.selectedSlide.unselect();\r\n }\r\n};\r\n\r\nproto.selectInitialIndex = function() {\r\n var initialIndex = this.options.initialIndex;\r\n // already activated, select previous selectedIndex\r\n if ( this.isInitActivated ) {\r\n this.select( this.selectedIndex, false, true );\r\n return;\r\n }\r\n // select with selector string\r\n if ( initialIndex && typeof initialIndex == 'string' ) {\r\n var cell = this.queryCell( initialIndex );\r\n if ( cell ) {\r\n this.selectCell( initialIndex, false, true );\r\n return;\r\n }\r\n }\r\n\r\n var index = 0;\r\n // select with number\r\n if ( initialIndex && this.slides[ initialIndex ] ) {\r\n index = initialIndex;\r\n }\r\n // select instantly\r\n this.select( index, false, true );\r\n};\r\n\r\n/**\r\n * select slide from number or cell element\r\n * @param {Element or Number} elem\r\n */\r\nproto.selectCell = function( value, isWrap, isInstant ) {\r\n // get cell\r\n var cell = this.queryCell( value );\r\n if ( !cell ) {\r\n return;\r\n }\r\n\r\n var index = this.getCellSlideIndex( cell );\r\n this.select( index, isWrap, isInstant );\r\n};\r\n\r\nproto.getCellSlideIndex = function( cell ) {\r\n // get index of slides that has cell\r\n for ( var i=0; i < this.slides.length; i++ ) {\r\n var slide = this.slides[i];\r\n var index = slide.cells.indexOf( cell );\r\n if ( index != -1 ) {\r\n return i;\r\n }\r\n }\r\n};\r\n\r\n// -------------------------- get cells -------------------------- //\r\n\r\n/**\r\n * get Flickity.Cell, given an Element\r\n * @param {Element} elem\r\n * @returns {Flickity.Cell} item\r\n */\r\nproto.getCell = function( elem ) {\r\n // loop through cells to get the one that matches\r\n for ( var i=0; i < this.cells.length; i++ ) {\r\n var cell = this.cells[i];\r\n if ( cell.element == elem ) {\r\n return cell;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * get collection of Flickity.Cells, given Elements\r\n * @param {Element, Array, NodeList} elems\r\n * @returns {Array} cells - Flickity.Cells\r\n */\r\nproto.getCells = function( elems ) {\r\n elems = utils.makeArray( elems );\r\n var cells = [];\r\n elems.forEach( function( elem ) {\r\n var cell = this.getCell( elem );\r\n if ( cell ) {\r\n cells.push( cell );\r\n }\r\n }, this );\r\n return cells;\r\n};\r\n\r\n/**\r\n * get cell elements\r\n * @returns {Array} cellElems\r\n */\r\nproto.getCellElements = function() {\r\n return this.cells.map( function( cell ) {\r\n return cell.element;\r\n });\r\n};\r\n\r\n/**\r\n * get parent cell from an element\r\n * @param {Element} elem\r\n * @returns {Flickit.Cell} cell\r\n */\r\nproto.getParentCell = function( elem ) {\r\n // first check if elem is cell\r\n var cell = this.getCell( elem );\r\n if ( cell ) {\r\n return cell;\r\n }\r\n // try to get parent cell elem\r\n elem = utils.getParent( elem, '.flickity-slider > *' );\r\n return this.getCell( elem );\r\n};\r\n\r\n/**\r\n * get cells adjacent to a slide\r\n * @param {Integer} adjCount - number of adjacent slides\r\n * @param {Integer} index - index of slide to start\r\n * @returns {Array} cells - array of Flickity.Cells\r\n */\r\nproto.getAdjacentCellElements = function( adjCount, index ) {\r\n if ( !adjCount ) {\r\n return this.selectedSlide.getCellElements();\r\n }\r\n index = index === undefined ? this.selectedIndex : index;\r\n\r\n var len = this.slides.length;\r\n if ( 1 + ( adjCount * 2 ) >= len ) {\r\n return this.getCellElements();\r\n }\r\n\r\n var cellElems = [];\r\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\r\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\r\n var slide = this.slides[ slideIndex ];\r\n if ( slide ) {\r\n cellElems = cellElems.concat( slide.getCellElements() );\r\n }\r\n }\r\n return cellElems;\r\n};\r\n\r\n/**\r\n * select slide from number or cell element\r\n * @param {Element, Selector String, or Number} selector\r\n */\r\nproto.queryCell = function( selector ) {\r\n if ( typeof selector == 'number' ) {\r\n // use number as index\r\n return this.cells[ selector ];\r\n }\r\n if ( typeof selector == 'string' ) {\r\n // do not select invalid selectors from hash: #123, #/. #791\r\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\r\n return;\r\n }\r\n // use string as selector, get element\r\n selector = this.element.querySelector( selector );\r\n }\r\n // get cell from element\r\n return this.getCell( selector );\r\n};\r\n\r\n// -------------------------- events -------------------------- //\r\n\r\nproto.uiChange = function() {\r\n this.emitEvent('uiChange');\r\n};\r\n\r\n// keep focus on element when child UI elements are clicked\r\nproto.childUIPointerDown = function( event ) {\r\n // HACK iOS does not allow touch events to bubble up?!\r\n if ( event.type != 'touchstart' ) {\r\n event.preventDefault();\r\n }\r\n this.focus();\r\n};\r\n\r\n// ----- resize ----- //\r\n\r\nproto.onresize = function() {\r\n this.watchCSS();\r\n this.resize();\r\n};\r\n\r\nutils.debounceMethod( Flickity, 'onresize', 150 );\r\n\r\nproto.resize = function() {\r\n if ( !this.isActive ) {\r\n return;\r\n }\r\n this.getSize();\r\n // wrap values\r\n if ( this.options.wrapAround ) {\r\n this.x = utils.modulo( this.x, this.slideableWidth );\r\n }\r\n this.positionCells();\r\n this._getWrapShiftCells();\r\n this.setGallerySize();\r\n this.emitEvent('resize');\r\n // update selected index for group slides, instant\r\n // TODO: position can be lost between groups of various numbers\r\n var selectedElement = this.selectedElements && this.selectedElements[0];\r\n this.selectCell( selectedElement, false, true );\r\n};\r\n\r\n// watches the :after property, activates/deactivates\r\nproto.watchCSS = function() {\r\n var watchOption = this.options.watchCSS;\r\n if ( !watchOption ) {\r\n return;\r\n }\r\n\r\n var afterContent = getComputedStyle( this.element, ':after' ).content;\r\n // activate if :after { content: 'flickity' }\r\n if ( afterContent.indexOf('flickity') != -1 ) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n};\r\n\r\n// ----- keydown ----- //\r\n\r\n// go previous/next if left/right keys pressed\r\nproto.onkeydown = function( event ) {\r\n // only work if element is in focus\r\n var isNotFocused = document.activeElement && document.activeElement != this.element;\r\n if ( !this.options.accessibility ||isNotFocused ) {\r\n return;\r\n }\r\n\r\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\r\n if ( handler ) {\r\n handler.call( this );\r\n }\r\n};\r\n\r\nFlickity.keyboardHandlers = {\r\n // left arrow\r\n 37: function() {\r\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\r\n this.uiChange();\r\n this[ leftMethod ]();\r\n },\r\n // right arrow\r\n 39: function() {\r\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\r\n this.uiChange();\r\n this[ rightMethod ]();\r\n },\r\n};\r\n\r\n// ----- focus ----- //\r\n\r\nproto.focus = function() {\r\n // TODO remove scrollTo once focus options gets more support\r\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\r\n var prevScrollY = window.pageYOffset;\r\n this.element.focus({ preventScroll: true });\r\n // hack to fix scroll jump after focus, #76\r\n if ( window.pageYOffset != prevScrollY ) {\r\n window.scrollTo( window.pageXOffset, prevScrollY );\r\n }\r\n};\r\n\r\n// -------------------------- destroy -------------------------- //\r\n\r\n// deactivate all Flickity functionality, but keep stuff available\r\nproto.deactivate = function() {\r\n if ( !this.isActive ) {\r\n return;\r\n }\r\n this.element.classList.remove('flickity-enabled');\r\n this.element.classList.remove('flickity-rtl');\r\n this.unselectSelectedSlide();\r\n // destroy cells\r\n this.cells.forEach( function( cell ) {\r\n cell.destroy();\r\n });\r\n this.element.removeChild( this.viewport );\r\n // move child elements back into element\r\n moveElements( this.slider.children, this.element );\r\n if ( this.options.accessibility ) {\r\n this.element.removeAttribute('tabIndex');\r\n this.element.removeEventListener( 'keydown', this );\r\n }\r\n // set flags\r\n this.isActive = false;\r\n this.emitEvent('deactivate');\r\n};\r\n\r\nproto.destroy = function() {\r\n this.deactivate();\r\n window.removeEventListener( 'resize', this );\r\n this.allOff();\r\n this.emitEvent('destroy');\r\n if ( jQuery && this.$element ) {\r\n jQuery.removeData( this.element, 'flickity' );\r\n }\r\n delete this.element.flickityGUID;\r\n delete instances[ this.guid ];\r\n};\r\n\r\n// -------------------------- prototype -------------------------- //\r\n\r\nutils.extend( proto, animatePrototype );\r\n\r\n// -------------------------- extras -------------------------- //\r\n\r\n/**\r\n * get Flickity instance from element\r\n * @param {Element} elem\r\n * @returns {Flickity}\r\n */\r\nFlickity.data = function( elem ) {\r\n elem = utils.getQueryElement( elem );\r\n var id = elem && elem.flickityGUID;\r\n return id && instances[ id ];\r\n};\r\n\r\nutils.htmlInit( Flickity, 'flickity' );\r\n\r\nif ( jQuery && jQuery.bridget ) {\r\n jQuery.bridget( 'flickity', Flickity );\r\n}\r\n\r\n// set internal jQuery, for Webpack + jQuery v3, #478\r\nFlickity.setJQuery = function( jq ) {\r\n jQuery = jq;\r\n};\r\n\r\nFlickity.Cell = Cell;\r\nFlickity.Slide = Slide;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n/*!\r\n * Unipointer v2.3.0\r\n * base class for doing one thing with pointer event\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */ /*global define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'unipointer/unipointer',[\r\n 'ev-emitter/ev-emitter'\r\n ], function( EvEmitter ) {\r\n return factory( window, EvEmitter );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter')\r\n );\r\n } else {\r\n // browser global\r\n window.Unipointer = factory(\r\n window,\r\n window.EvEmitter\r\n );\r\n }\r\n\r\n}( window, function factory( window, EvEmitter ) {\r\n\r\n\r\n\r\nfunction noop() {}\r\n\r\nfunction Unipointer() {}\r\n\r\n// inherit EvEmitter\r\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\r\n\r\nproto.bindStartEvent = function( elem ) {\r\n this._bindStartEvent( elem, true );\r\n};\r\n\r\nproto.unbindStartEvent = function( elem ) {\r\n this._bindStartEvent( elem, false );\r\n};\r\n\r\n/**\r\n * Add or remove start event\r\n * @param {Boolean} isAdd - remove if falsey\r\n */\r\nproto._bindStartEvent = function( elem, isAdd ) {\r\n // munge isAdd, default to true\r\n isAdd = isAdd === undefined ? true : isAdd;\r\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\r\n\r\n // default to mouse events\r\n var startEvent = 'mousedown';\r\n if ( window.PointerEvent ) {\r\n // Pointer Events\r\n startEvent = 'pointerdown';\r\n } else if ( 'ontouchstart' in window ) {\r\n // Touch Events. iOS Safari\r\n startEvent = 'touchstart';\r\n }\r\n elem[ bindMethod ]( startEvent, this );\r\n};\r\n\r\n// trigger handler methods for events\r\nproto.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\n// returns the touch that we're keeping track of\r\nproto.getTouch = function( touches ) {\r\n for ( var i=0; i < touches.length; i++ ) {\r\n var touch = touches[i];\r\n if ( touch.identifier == this.pointerIdentifier ) {\r\n return touch;\r\n }\r\n }\r\n};\r\n\r\n// ----- start event ----- //\r\n\r\nproto.onmousedown = function( event ) {\r\n // dismiss clicks from right or middle buttons\r\n var button = event.button;\r\n if ( button && ( button !== 0 && button !== 1 ) ) {\r\n return;\r\n }\r\n this._pointerDown( event, event );\r\n};\r\n\r\nproto.ontouchstart = function( event ) {\r\n this._pointerDown( event, event.changedTouches[0] );\r\n};\r\n\r\nproto.onpointerdown = function( event ) {\r\n this._pointerDown( event, event );\r\n};\r\n\r\n/**\r\n * pointer start\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto._pointerDown = function( event, pointer ) {\r\n // dismiss right click and other pointers\r\n // button = 0 is okay, 1-4 not\r\n if ( event.button || this.isPointerDown ) {\r\n return;\r\n }\r\n\r\n this.isPointerDown = true;\r\n // save pointer identifier to match up touch events\r\n this.pointerIdentifier = pointer.pointerId !== undefined ?\r\n // pointerId for pointer events, touch.indentifier for touch events\r\n pointer.pointerId : pointer.identifier;\r\n\r\n this.pointerDown( event, pointer );\r\n};\r\n\r\nproto.pointerDown = function( event, pointer ) {\r\n this._bindPostStartEvents( event );\r\n this.emitEvent( 'pointerDown', [ event, pointer ] );\r\n};\r\n\r\n// hash of events to be bound after start event\r\nvar postStartEvents = {\r\n mousedown: [ 'mousemove', 'mouseup' ],\r\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\r\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\r\n};\r\n\r\nproto._bindPostStartEvents = function( event ) {\r\n if ( !event ) {\r\n return;\r\n }\r\n // get proper events to match start event\r\n var events = postStartEvents[ event.type ];\r\n // bind events to node\r\n events.forEach( function( eventName ) {\r\n window.addEventListener( eventName, this );\r\n }, this );\r\n // save these arguments\r\n this._boundPointerEvents = events;\r\n};\r\n\r\nproto._unbindPostStartEvents = function() {\r\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\r\n if ( !this._boundPointerEvents ) {\r\n return;\r\n }\r\n this._boundPointerEvents.forEach( function( eventName ) {\r\n window.removeEventListener( eventName, this );\r\n }, this );\r\n\r\n delete this._boundPointerEvents;\r\n};\r\n\r\n// ----- move event ----- //\r\n\r\nproto.onmousemove = function( event ) {\r\n this._pointerMove( event, event );\r\n};\r\n\r\nproto.onpointermove = function( event ) {\r\n if ( event.pointerId == this.pointerIdentifier ) {\r\n this._pointerMove( event, event );\r\n }\r\n};\r\n\r\nproto.ontouchmove = function( event ) {\r\n var touch = this.getTouch( event.changedTouches );\r\n if ( touch ) {\r\n this._pointerMove( event, touch );\r\n }\r\n};\r\n\r\n/**\r\n * pointer move\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n * @private\r\n */\r\nproto._pointerMove = function( event, pointer ) {\r\n this.pointerMove( event, pointer );\r\n};\r\n\r\n// public\r\nproto.pointerMove = function( event, pointer ) {\r\n this.emitEvent( 'pointerMove', [ event, pointer ] );\r\n};\r\n\r\n// ----- end event ----- //\r\n\r\n\r\nproto.onmouseup = function( event ) {\r\n this._pointerUp( event, event );\r\n};\r\n\r\nproto.onpointerup = function( event ) {\r\n if ( event.pointerId == this.pointerIdentifier ) {\r\n this._pointerUp( event, event );\r\n }\r\n};\r\n\r\nproto.ontouchend = function( event ) {\r\n var touch = this.getTouch( event.changedTouches );\r\n if ( touch ) {\r\n this._pointerUp( event, touch );\r\n }\r\n};\r\n\r\n/**\r\n * pointer up\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n * @private\r\n */\r\nproto._pointerUp = function( event, pointer ) {\r\n this._pointerDone();\r\n this.pointerUp( event, pointer );\r\n};\r\n\r\n// public\r\nproto.pointerUp = function( event, pointer ) {\r\n this.emitEvent( 'pointerUp', [ event, pointer ] );\r\n};\r\n\r\n// ----- pointer done ----- //\r\n\r\n// triggered on pointer up & pointer cancel\r\nproto._pointerDone = function() {\r\n this._pointerReset();\r\n this._unbindPostStartEvents();\r\n this.pointerDone();\r\n};\r\n\r\nproto._pointerReset = function() {\r\n // reset properties\r\n this.isPointerDown = false;\r\n delete this.pointerIdentifier;\r\n};\r\n\r\nproto.pointerDone = noop;\r\n\r\n// ----- pointer cancel ----- //\r\n\r\nproto.onpointercancel = function( event ) {\r\n if ( event.pointerId == this.pointerIdentifier ) {\r\n this._pointerCancel( event, event );\r\n }\r\n};\r\n\r\nproto.ontouchcancel = function( event ) {\r\n var touch = this.getTouch( event.changedTouches );\r\n if ( touch ) {\r\n this._pointerCancel( event, touch );\r\n }\r\n};\r\n\r\n/**\r\n * pointer cancel\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n * @private\r\n */\r\nproto._pointerCancel = function( event, pointer ) {\r\n this._pointerDone();\r\n this.pointerCancel( event, pointer );\r\n};\r\n\r\n// public\r\nproto.pointerCancel = function( event, pointer ) {\r\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\r\n};\r\n\r\n// ----- ----- //\r\n\r\n// utility function for getting x/y coords from event\r\nUnipointer.getPointerPoint = function( pointer ) {\r\n return {\r\n x: pointer.pageX,\r\n y: pointer.pageY\r\n };\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn Unipointer;\r\n\r\n}));\r\n\r\n/*!\r\n * Unidragger v2.3.0\r\n * Draggable base class\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, unused: true, undef: true, strict: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'unidragger/unidragger',[\r\n 'unipointer/unipointer'\r\n ], function( Unipointer ) {\r\n return factory( window, Unipointer );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('unipointer')\r\n );\r\n } else {\r\n // browser global\r\n window.Unidragger = factory(\r\n window,\r\n window.Unipointer\r\n );\r\n }\r\n\r\n}( window, function factory( window, Unipointer ) {\r\n\r\n\r\n\r\n// -------------------------- Unidragger -------------------------- //\r\n\r\nfunction Unidragger() {}\r\n\r\n// inherit Unipointer & EvEmitter\r\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\r\n\r\n// ----- bind start ----- //\r\n\r\nproto.bindHandles = function() {\r\n this._bindHandles( true );\r\n};\r\n\r\nproto.unbindHandles = function() {\r\n this._bindHandles( false );\r\n};\r\n\r\n/**\r\n * Add or remove start event\r\n * @param {Boolean} isAdd\r\n */\r\nproto._bindHandles = function( isAdd ) {\r\n // munge isAdd, default to true\r\n isAdd = isAdd === undefined ? true : isAdd;\r\n // bind each handle\r\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\r\n var touchAction = isAdd ? this._touchActionValue : '';\r\n for ( var i=0; i < this.handles.length; i++ ) {\r\n var handle = this.handles[i];\r\n this._bindStartEvent( handle, isAdd );\r\n handle[ bindMethod ]( 'click', this );\r\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\r\n if ( window.PointerEvent ) {\r\n handle.style.touchAction = touchAction;\r\n }\r\n }\r\n};\r\n\r\n// prototype so it can be overwriteable by Flickity\r\nproto._touchActionValue = 'none';\r\n\r\n// ----- start event ----- //\r\n\r\n/**\r\n * pointer start\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto.pointerDown = function( event, pointer ) {\r\n var isOkay = this.okayPointerDown( event );\r\n if ( !isOkay ) {\r\n return;\r\n }\r\n // track start event position\r\n this.pointerDownPointer = pointer;\r\n\r\n event.preventDefault();\r\n this.pointerDownBlur();\r\n // bind move and end events\r\n this._bindPostStartEvents( event );\r\n this.emitEvent( 'pointerDown', [ event, pointer ] );\r\n};\r\n\r\n// nodes that have text fields\r\nvar cursorNodes = {\r\n TEXTAREA: true,\r\n INPUT: true,\r\n SELECT: true,\r\n OPTION: true,\r\n};\r\n\r\n// input types that do not have text fields\r\nvar clickTypes = {\r\n radio: true,\r\n checkbox: true,\r\n button: true,\r\n submit: true,\r\n image: true,\r\n file: true,\r\n};\r\n\r\n// dismiss inputs with text fields. flickity#403, flickity#404\r\nproto.okayPointerDown = function( event ) {\r\n var isCursorNode = cursorNodes[ event.target.nodeName ];\r\n var isClickType = clickTypes[ event.target.type ];\r\n var isOkay = !isCursorNode || isClickType;\r\n if ( !isOkay ) {\r\n this._pointerReset();\r\n }\r\n return isOkay;\r\n};\r\n\r\n// kludge to blur previously focused input\r\nproto.pointerDownBlur = function() {\r\n var focused = document.activeElement;\r\n // do not blur body for IE10, metafizzy/flickity#117\r\n var canBlur = focused && focused.blur && focused != document.body;\r\n if ( canBlur ) {\r\n focused.blur();\r\n }\r\n};\r\n\r\n// ----- move event ----- //\r\n\r\n/**\r\n * drag move\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto.pointerMove = function( event, pointer ) {\r\n var moveVector = this._dragPointerMove( event, pointer );\r\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\r\n this._dragMove( event, pointer, moveVector );\r\n};\r\n\r\n// base pointer move logic\r\nproto._dragPointerMove = function( event, pointer ) {\r\n var moveVector = {\r\n x: pointer.pageX - this.pointerDownPointer.pageX,\r\n y: pointer.pageY - this.pointerDownPointer.pageY\r\n };\r\n // start drag if pointer has moved far enough to start drag\r\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\r\n this._dragStart( event, pointer );\r\n }\r\n return moveVector;\r\n};\r\n\r\n// condition if pointer has moved far enough to start drag\r\nproto.hasDragStarted = function( moveVector ) {\r\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\r\n};\r\n\r\n// ----- end event ----- //\r\n\r\n/**\r\n * pointer up\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto.pointerUp = function( event, pointer ) {\r\n this.emitEvent( 'pointerUp', [ event, pointer ] );\r\n this._dragPointerUp( event, pointer );\r\n};\r\n\r\nproto._dragPointerUp = function( event, pointer ) {\r\n if ( this.isDragging ) {\r\n this._dragEnd( event, pointer );\r\n } else {\r\n // pointer didn't move enough for drag to start\r\n this._staticClick( event, pointer );\r\n }\r\n};\r\n\r\n// -------------------------- drag -------------------------- //\r\n\r\n// dragStart\r\nproto._dragStart = function( event, pointer ) {\r\n this.isDragging = true;\r\n // prevent clicks\r\n this.isPreventingClicks = true;\r\n this.dragStart( event, pointer );\r\n};\r\n\r\nproto.dragStart = function( event, pointer ) {\r\n this.emitEvent( 'dragStart', [ event, pointer ] );\r\n};\r\n\r\n// dragMove\r\nproto._dragMove = function( event, pointer, moveVector ) {\r\n // do not drag if not dragging yet\r\n if ( !this.isDragging ) {\r\n return;\r\n }\r\n\r\n this.dragMove( event, pointer, moveVector );\r\n};\r\n\r\nproto.dragMove = function( event, pointer, moveVector ) {\r\n event.preventDefault();\r\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\r\n};\r\n\r\n// dragEnd\r\nproto._dragEnd = function( event, pointer ) {\r\n // set flags\r\n this.isDragging = false;\r\n // re-enable clicking async\r\n setTimeout( function() {\r\n delete this.isPreventingClicks;\r\n }.bind( this ) );\r\n\r\n this.dragEnd( event, pointer );\r\n};\r\n\r\nproto.dragEnd = function( event, pointer ) {\r\n this.emitEvent( 'dragEnd', [ event, pointer ] );\r\n};\r\n\r\n// ----- onclick ----- //\r\n\r\n// handle all clicks and prevent clicks when dragging\r\nproto.onclick = function( event ) {\r\n if ( this.isPreventingClicks ) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\n// ----- staticClick ----- //\r\n\r\n// triggered after pointer down & up with no/tiny movement\r\nproto._staticClick = function( event, pointer ) {\r\n // ignore emulated mouse up clicks\r\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\r\n return;\r\n }\r\n\r\n this.staticClick( event, pointer );\r\n\r\n // set flag for emulated clicks 300ms after touchend\r\n if ( event.type != 'mouseup' ) {\r\n this.isIgnoringMouseUp = true;\r\n // reset flag after 300ms\r\n setTimeout( function() {\r\n delete this.isIgnoringMouseUp;\r\n }.bind( this ), 400 );\r\n }\r\n};\r\n\r\nproto.staticClick = function( event, pointer ) {\r\n this.emitEvent( 'staticClick', [ event, pointer ] );\r\n};\r\n\r\n// ----- utils ----- //\r\n\r\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\r\n\r\n// ----- ----- //\r\n\r\nreturn Unidragger;\r\n\r\n}));\r\n\r\n// drag\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/drag',[\r\n './flickity',\r\n 'unidragger/unidragger',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, Unidragger, utils ) {\r\n return factory( window, Flickity, Unidragger, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('unidragger'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = factory(\r\n window,\r\n window.Flickity,\r\n window.Unidragger,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, Unidragger, utils ) {\r\n\r\n\r\n\r\n// ----- defaults ----- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n draggable: '>1',\r\n dragThreshold: 3,\r\n});\r\n\r\n// ----- create ----- //\r\n\r\nFlickity.createMethods.push('_createDrag');\r\n\r\n// -------------------------- drag prototype -------------------------- //\r\n\r\nvar proto = Flickity.prototype;\r\nutils.extend( proto, Unidragger.prototype );\r\nproto._touchActionValue = 'pan-y';\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nvar isTouch = 'createTouch' in document;\r\nvar isTouchmoveScrollCanceled = false;\r\n\r\nproto._createDrag = function() {\r\n this.on( 'activate', this.onActivateDrag );\r\n this.on( 'uiChange', this._uiChangeDrag );\r\n this.on( 'deactivate', this.onDeactivateDrag );\r\n this.on( 'cellChange', this.updateDraggable );\r\n // TODO updateDraggable on resize? if groupCells & slides change\r\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\r\n // #457, RubaXa/Sortable#973\r\n if ( isTouch && !isTouchmoveScrollCanceled ) {\r\n window.addEventListener( 'touchmove', function() {});\r\n isTouchmoveScrollCanceled = true;\r\n }\r\n};\r\n\r\nproto.onActivateDrag = function() {\r\n this.handles = [ this.viewport ];\r\n this.bindHandles();\r\n this.updateDraggable();\r\n};\r\n\r\nproto.onDeactivateDrag = function() {\r\n this.unbindHandles();\r\n this.element.classList.remove('is-draggable');\r\n};\r\n\r\nproto.updateDraggable = function() {\r\n // disable dragging if less than 2 slides. #278\r\n if ( this.options.draggable == '>1' ) {\r\n this.isDraggable = this.slides.length > 1;\r\n } else {\r\n this.isDraggable = this.options.draggable;\r\n }\r\n if ( this.isDraggable ) {\r\n this.element.classList.add('is-draggable');\r\n } else {\r\n this.element.classList.remove('is-draggable');\r\n }\r\n};\r\n\r\n// backwards compatibility\r\nproto.bindDrag = function() {\r\n this.options.draggable = true;\r\n this.updateDraggable();\r\n};\r\n\r\nproto.unbindDrag = function() {\r\n this.options.draggable = false;\r\n this.updateDraggable();\r\n};\r\n\r\nproto._uiChangeDrag = function() {\r\n delete this.isFreeScrolling;\r\n};\r\n\r\n// -------------------------- pointer events -------------------------- //\r\n\r\nproto.pointerDown = function( event, pointer ) {\r\n if ( !this.isDraggable ) {\r\n this._pointerDownDefault( event, pointer );\r\n return;\r\n }\r\n var isOkay = this.okayPointerDown( event );\r\n if ( !isOkay ) {\r\n return;\r\n }\r\n\r\n this._pointerDownPreventDefault( event );\r\n this.pointerDownFocus( event );\r\n // blur\r\n if ( document.activeElement != this.element ) {\r\n // do not blur if already focused\r\n this.pointerDownBlur();\r\n }\r\n\r\n // stop if it was moving\r\n this.dragX = this.x;\r\n this.viewport.classList.add('is-pointer-down');\r\n // track scrolling\r\n this.pointerDownScroll = getScrollPosition();\r\n window.addEventListener( 'scroll', this );\r\n\r\n this._pointerDownDefault( event, pointer );\r\n};\r\n\r\n// default pointerDown logic, used for staticClick\r\nproto._pointerDownDefault = function( event, pointer ) {\r\n // track start event position\r\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\r\n this.pointerDownPointer = {\r\n pageX: pointer.pageX,\r\n pageY: pointer.pageY,\r\n };\r\n // bind move and end events\r\n this._bindPostStartEvents( event );\r\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\r\n};\r\n\r\nvar focusNodes = {\r\n INPUT: true,\r\n TEXTAREA: true,\r\n SELECT: true,\r\n};\r\n\r\nproto.pointerDownFocus = function( event ) {\r\n var isFocusNode = focusNodes[ event.target.nodeName ];\r\n if ( !isFocusNode ) {\r\n this.focus();\r\n }\r\n};\r\n\r\nproto._pointerDownPreventDefault = function( event ) {\r\n var isTouchStart = event.type == 'touchstart';\r\n var isTouchPointer = event.pointerType == 'touch';\r\n var isFocusNode = focusNodes[ event.target.nodeName ];\r\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\n// ----- move ----- //\r\n\r\nproto.hasDragStarted = function( moveVector ) {\r\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\r\n};\r\n\r\n// ----- up ----- //\r\n\r\nproto.pointerUp = function( event, pointer ) {\r\n delete this.isTouchScrolling;\r\n this.viewport.classList.remove('is-pointer-down');\r\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\r\n this._dragPointerUp( event, pointer );\r\n};\r\n\r\nproto.pointerDone = function() {\r\n window.removeEventListener( 'scroll', this );\r\n delete this.pointerDownScroll;\r\n};\r\n\r\n// -------------------------- dragging -------------------------- //\r\n\r\nproto.dragStart = function( event, pointer ) {\r\n if ( !this.isDraggable ) {\r\n return;\r\n }\r\n this.dragStartPosition = this.x;\r\n this.startAnimation();\r\n window.removeEventListener( 'scroll', this );\r\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\r\n};\r\n\r\nproto.pointerMove = function( event, pointer ) {\r\n var moveVector = this._dragPointerMove( event, pointer );\r\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\r\n this._dragMove( event, pointer, moveVector );\r\n};\r\n\r\nproto.dragMove = function( event, pointer, moveVector ) {\r\n if ( !this.isDraggable ) {\r\n return;\r\n }\r\n event.preventDefault();\r\n\r\n this.previousDragX = this.dragX;\r\n // reverse if right-to-left\r\n var direction = this.options.rightToLeft ? -1 : 1;\r\n if ( this.options.wrapAround ) {\r\n // wrap around move. #589\r\n moveVector.x = moveVector.x % this.slideableWidth;\r\n }\r\n var dragX = this.dragStartPosition + moveVector.x * direction;\r\n\r\n if ( !this.options.wrapAround && this.slides.length ) {\r\n // slow drag\r\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\r\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\r\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\r\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\r\n }\r\n\r\n this.dragX = dragX;\r\n\r\n this.dragMoveTime = new Date();\r\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\r\n};\r\n\r\nproto.dragEnd = function( event, pointer ) {\r\n if ( !this.isDraggable ) {\r\n return;\r\n }\r\n if ( this.options.freeScroll ) {\r\n this.isFreeScrolling = true;\r\n }\r\n // set selectedIndex based on where flick will end up\r\n var index = this.dragEndRestingSelect();\r\n\r\n if ( this.options.freeScroll && !this.options.wrapAround ) {\r\n // if free-scroll & not wrap around\r\n // do not free-scroll if going outside of bounding slides\r\n // so bounding slides can attract slider, and keep it in bounds\r\n var restingX = this.getRestingPosition();\r\n this.isFreeScrolling = -restingX > this.slides[0].target &&\r\n -restingX < this.getLastSlide().target;\r\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\r\n // boost selection if selected index has not changed\r\n index += this.dragEndBoostSelect();\r\n }\r\n delete this.previousDragX;\r\n // apply selection\r\n // TODO refactor this, selecting here feels weird\r\n // HACK, set flag so dragging stays in correct direction\r\n this.isDragSelect = this.options.wrapAround;\r\n this.select( index );\r\n delete this.isDragSelect;\r\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\r\n};\r\n\r\nproto.dragEndRestingSelect = function() {\r\n var restingX = this.getRestingPosition();\r\n // how far away from selected slide\r\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\r\n // get closet resting going up and going down\r\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\r\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\r\n // use closer resting for wrap-around\r\n var index = positiveResting.distance < negativeResting.distance ?\r\n positiveResting.index : negativeResting.index;\r\n return index;\r\n};\r\n\r\n/**\r\n * given resting X and distance to selected cell\r\n * get the distance and index of the closest cell\r\n * @param {Number} restingX - estimated post-flick resting position\r\n * @param {Number} distance - distance to selected cell\r\n * @param {Integer} increment - +1 or -1, going up or down\r\n * @returns {Object} - { distance: {Number}, index: {Integer} }\r\n */\r\nproto._getClosestResting = function( restingX, distance, increment ) {\r\n var index = this.selectedIndex;\r\n var minDistance = Infinity;\r\n var condition = this.options.contain && !this.options.wrapAround ?\r\n // if contain, keep going if distance is equal to minDistance\r\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\r\n while ( condition( distance, minDistance ) ) {\r\n // measure distance to next cell\r\n index += increment;\r\n minDistance = distance;\r\n distance = this.getSlideDistance( -restingX, index );\r\n if ( distance === null ) {\r\n break;\r\n }\r\n distance = Math.abs( distance );\r\n }\r\n return {\r\n distance: minDistance,\r\n // selected was previous index\r\n index: index - increment\r\n };\r\n};\r\n\r\n/**\r\n * measure distance between x and a slide target\r\n * @param {Number} x\r\n * @param {Integer} index - slide index\r\n */\r\nproto.getSlideDistance = function( x, index ) {\r\n var len = this.slides.length;\r\n // wrap around if at least 2 slides\r\n var isWrapAround = this.options.wrapAround && len > 1;\r\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\r\n var slide = this.slides[ slideIndex ];\r\n if ( !slide ) {\r\n return null;\r\n }\r\n // add distance for wrap-around slides\r\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\r\n return x - ( slide.target + wrap );\r\n};\r\n\r\nproto.dragEndBoostSelect = function() {\r\n // do not boost if no previousDragX or dragMoveTime\r\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\r\n // or if drag was held for 100 ms\r\n new Date() - this.dragMoveTime > 100 ) {\r\n return 0;\r\n }\r\n\r\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\r\n var delta = this.previousDragX - this.dragX;\r\n if ( distance > 0 && delta > 0 ) {\r\n // boost to next if moving towards the right, and positive velocity\r\n return 1;\r\n } else if ( distance < 0 && delta < 0 ) {\r\n // boost to previous if moving towards the left, and negative velocity\r\n return -1;\r\n }\r\n return 0;\r\n};\r\n\r\n// ----- staticClick ----- //\r\n\r\nproto.staticClick = function( event, pointer ) {\r\n // get clickedCell, if cell was clicked\r\n var clickedCell = this.getParentCell( event.target );\r\n var cellElem = clickedCell && clickedCell.element;\r\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\r\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\r\n};\r\n\r\n// ----- scroll ----- //\r\n\r\nproto.onscroll = function() {\r\n var scroll = getScrollPosition();\r\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\r\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\r\n // cancel click/tap if scroll is too much\r\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\r\n this._pointerDone();\r\n }\r\n};\r\n\r\n// ----- utils ----- //\r\n\r\nfunction getScrollPosition() {\r\n return {\r\n x: window.pageXOffset,\r\n y: window.pageYOffset\r\n };\r\n}\r\n\r\n// ----- ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// prev/next buttons\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/prev-next-button',[\r\n './flickity',\r\n 'unipointer/unipointer',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, Unipointer, utils ) {\r\n return factory( window, Flickity, Unipointer, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('unipointer'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.Unipointer,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, Unipointer, utils ) {\r\n'use strict';\r\n\r\nvar svgURI = 'http://www.w3.org/2000/svg';\r\n\r\n// -------------------------- PrevNextButton -------------------------- //\r\n\r\nfunction PrevNextButton( direction, parent ) {\r\n this.direction = direction;\r\n this.parent = parent;\r\n this._create();\r\n}\r\n\r\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\r\n\r\nPrevNextButton.prototype._create = function() {\r\n // properties\r\n this.isEnabled = true;\r\n this.isPrevious = this.direction == -1;\r\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\r\n this.isLeft = this.direction == leftDirection;\r\n\r\n var element = this.element = document.createElement('button');\r\n element.className = 'flickity-button flickity-prev-next-button';\r\n element.className += this.isPrevious ? ' previous' : ' next';\r\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\r\n element.setAttribute( 'type', 'button' );\r\n // init as disabled\r\n this.disable();\r\n\r\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\r\n\r\n // create arrow\r\n var svg = this.createSVG();\r\n element.appendChild( svg );\r\n // events\r\n this.parent.on( 'select', this.update.bind( this ) );\r\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\r\n};\r\n\r\nPrevNextButton.prototype.activate = function() {\r\n this.bindStartEvent( this.element );\r\n this.element.addEventListener( 'click', this );\r\n // add to DOM\r\n this.parent.element.appendChild( this.element );\r\n};\r\n\r\nPrevNextButton.prototype.deactivate = function() {\r\n // remove from DOM\r\n this.parent.element.removeChild( this.element );\r\n // click events\r\n this.unbindStartEvent( this.element );\r\n this.element.removeEventListener( 'click', this );\r\n};\r\n\r\nPrevNextButton.prototype.createSVG = function() {\r\n var svg = document.createElementNS( svgURI, 'svg');\r\n svg.setAttribute( 'class', 'flickity-button-icon' );\r\n svg.setAttribute( 'viewBox', '0 0 100 100' );\r\n var path = document.createElementNS( svgURI, 'path');\r\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\r\n path.setAttribute( 'd', pathMovements );\r\n path.setAttribute( 'class', 'arrow' );\r\n // rotate arrow\r\n if ( !this.isLeft ) {\r\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\r\n }\r\n svg.appendChild( path );\r\n return svg;\r\n};\r\n\r\n// get SVG path movmement\r\nfunction getArrowMovements( shape ) {\r\n // use shape as movement if string\r\n if ( typeof shape == 'string' ) {\r\n return shape;\r\n }\r\n // create movement string\r\n return 'M ' + shape.x0 + ',50' +\r\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\r\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\r\n ' L ' + shape.x3 + ',50 ' +\r\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\r\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\r\n ' Z';\r\n}\r\n\r\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\r\n\r\nPrevNextButton.prototype.onclick = function() {\r\n if ( !this.isEnabled ) {\r\n return;\r\n }\r\n this.parent.uiChange();\r\n var method = this.isPrevious ? 'previous' : 'next';\r\n this.parent[ method ]();\r\n};\r\n\r\n// ----- ----- //\r\n\r\nPrevNextButton.prototype.enable = function() {\r\n if ( this.isEnabled ) {\r\n return;\r\n }\r\n this.element.disabled = false;\r\n this.isEnabled = true;\r\n};\r\n\r\nPrevNextButton.prototype.disable = function() {\r\n if ( !this.isEnabled ) {\r\n return;\r\n }\r\n this.element.disabled = true;\r\n this.isEnabled = false;\r\n};\r\n\r\nPrevNextButton.prototype.update = function() {\r\n // index of first or last slide, if previous or next\r\n var slides = this.parent.slides;\r\n // enable is wrapAround and at least 2 slides\r\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\r\n this.enable();\r\n return;\r\n }\r\n var lastIndex = slides.length ? slides.length - 1 : 0;\r\n var boundIndex = this.isPrevious ? 0 : lastIndex;\r\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\r\n this[ method ]();\r\n};\r\n\r\nPrevNextButton.prototype.destroy = function() {\r\n this.deactivate();\r\n this.allOff();\r\n};\r\n\r\n// -------------------------- Flickity prototype -------------------------- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n prevNextButtons: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60, y1: 50,\r\n x2: 70, y2: 40,\r\n x3: 30\r\n }\r\n});\r\n\r\nFlickity.createMethods.push('_createPrevNextButtons');\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createPrevNextButtons = function() {\r\n if ( !this.options.prevNextButtons ) {\r\n return;\r\n }\r\n\r\n this.prevButton = new PrevNextButton( -1, this );\r\n this.nextButton = new PrevNextButton( 1, this );\r\n\r\n this.on( 'activate', this.activatePrevNextButtons );\r\n};\r\n\r\nproto.activatePrevNextButtons = function() {\r\n this.prevButton.activate();\r\n this.nextButton.activate();\r\n this.on( 'deactivate', this.deactivatePrevNextButtons );\r\n};\r\n\r\nproto.deactivatePrevNextButtons = function() {\r\n this.prevButton.deactivate();\r\n this.nextButton.deactivate();\r\n this.off( 'deactivate', this.deactivatePrevNextButtons );\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nFlickity.PrevNextButton = PrevNextButton;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// page dots\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/page-dots',[\r\n './flickity',\r\n 'unipointer/unipointer',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, Unipointer, utils ) {\r\n return factory( window, Flickity, Unipointer, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('unipointer'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.Unipointer,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, Unipointer, utils ) {\r\n\r\n// -------------------------- PageDots -------------------------- //\r\n\r\n\r\n\r\nfunction PageDots( parent ) {\r\n this.parent = parent;\r\n this._create();\r\n}\r\n\r\nPageDots.prototype = Object.create( Unipointer.prototype );\r\n\r\nPageDots.prototype._create = function() {\r\n // create holder element\r\n this.holder = document.createElement('ol');\r\n this.holder.className = 'flickity-page-dots';\r\n // create dots, array of elements\r\n this.dots = [];\r\n // events\r\n this.handleClick = this.onClick.bind( this );\r\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\r\n};\r\n\r\nPageDots.prototype.activate = function() {\r\n this.setDots();\r\n this.holder.addEventListener( 'click', this.handleClick );\r\n this.bindStartEvent( this.holder );\r\n // add to DOM\r\n this.parent.element.appendChild( this.holder );\r\n};\r\n\r\nPageDots.prototype.deactivate = function() {\r\n this.holder.removeEventListener( 'click', this.handleClick );\r\n this.unbindStartEvent( this.holder );\r\n // remove from DOM\r\n this.parent.element.removeChild( this.holder );\r\n};\r\n\r\nPageDots.prototype.setDots = function() {\r\n // get difference between number of slides and number of dots\r\n var delta = this.parent.slides.length - this.dots.length;\r\n if ( delta > 0 ) {\r\n this.addDots( delta );\r\n } else if ( delta < 0 ) {\r\n this.removeDots( -delta );\r\n }\r\n};\r\n\r\nPageDots.prototype.addDots = function( count ) {\r\n var fragment = document.createDocumentFragment();\r\n var newDots = [];\r\n var length = this.dots.length;\r\n var max = length + count;\r\n\r\n for ( var i = length; i < max; i++ ) {\r\n var dot = document.createElement('li');\r\n dot.className = 'dot';\r\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\r\n fragment.appendChild( dot );\r\n newDots.push( dot );\r\n }\r\n\r\n this.holder.appendChild( fragment );\r\n this.dots = this.dots.concat( newDots );\r\n};\r\n\r\nPageDots.prototype.removeDots = function( count ) {\r\n // remove from this.dots collection\r\n var removeDots = this.dots.splice( this.dots.length - count, count );\r\n // remove from DOM\r\n removeDots.forEach( function( dot ) {\r\n this.holder.removeChild( dot );\r\n }, this );\r\n};\r\n\r\nPageDots.prototype.updateSelected = function() {\r\n // remove selected class on previous\r\n if ( this.selectedDot ) {\r\n this.selectedDot.className = 'dot';\r\n this.selectedDot.removeAttribute('aria-current');\r\n }\r\n // don't proceed if no dots\r\n if ( !this.dots.length ) {\r\n return;\r\n }\r\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\r\n this.selectedDot.className = 'dot is-selected';\r\n this.selectedDot.setAttribute( 'aria-current', 'step' );\r\n};\r\n\r\nPageDots.prototype.onTap = // old method name, backwards-compatible\r\nPageDots.prototype.onClick = function( event ) {\r\n var target = event.target;\r\n // only care about dot clicks\r\n if ( target.nodeName != 'LI' ) {\r\n return;\r\n }\r\n\r\n this.parent.uiChange();\r\n var index = this.dots.indexOf( target );\r\n this.parent.select( index );\r\n};\r\n\r\nPageDots.prototype.destroy = function() {\r\n this.deactivate();\r\n this.allOff();\r\n};\r\n\r\nFlickity.PageDots = PageDots;\r\n\r\n// -------------------------- Flickity -------------------------- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n pageDots: true\r\n});\r\n\r\nFlickity.createMethods.push('_createPageDots');\r\n\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createPageDots = function() {\r\n if ( !this.options.pageDots ) {\r\n return;\r\n }\r\n this.pageDots = new PageDots( this );\r\n // events\r\n this.on( 'activate', this.activatePageDots );\r\n this.on( 'select', this.updateSelectedPageDots );\r\n this.on( 'cellChange', this.updatePageDots );\r\n this.on( 'resize', this.updatePageDots );\r\n this.on( 'deactivate', this.deactivatePageDots );\r\n};\r\n\r\nproto.activatePageDots = function() {\r\n this.pageDots.activate();\r\n};\r\n\r\nproto.updateSelectedPageDots = function() {\r\n this.pageDots.updateSelected();\r\n};\r\n\r\nproto.updatePageDots = function() {\r\n this.pageDots.setDots();\r\n};\r\n\r\nproto.deactivatePageDots = function() {\r\n this.pageDots.deactivate();\r\n};\r\n\r\n// ----- ----- //\r\n\r\nFlickity.PageDots = PageDots;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// player & autoPlay\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/player',[\r\n 'ev-emitter/ev-emitter',\r\n 'fizzy-ui-utils/utils',\r\n './flickity'\r\n ], function( EvEmitter, utils, Flickity ) {\r\n return factory( EvEmitter, utils, Flickity );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('ev-emitter'),\r\n require('fizzy-ui-utils'),\r\n require('./flickity')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window.EvEmitter,\r\n window.fizzyUIUtils,\r\n window.Flickity\r\n );\r\n }\r\n\r\n}( window, function factory( EvEmitter, utils, Flickity ) {\r\n\r\n\r\n\r\n// -------------------------- Player -------------------------- //\r\n\r\nfunction Player( parent ) {\r\n this.parent = parent;\r\n this.state = 'stopped';\r\n // visibility change event handler\r\n this.onVisibilityChange = this.visibilityChange.bind( this );\r\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\r\n}\r\n\r\nPlayer.prototype = Object.create( EvEmitter.prototype );\r\n\r\n// start play\r\nPlayer.prototype.play = function() {\r\n if ( this.state == 'playing' ) {\r\n return;\r\n }\r\n // do not play if page is hidden, start playing when page is visible\r\n var isPageHidden = document.hidden;\r\n if ( isPageHidden ) {\r\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\r\n return;\r\n }\r\n\r\n this.state = 'playing';\r\n // listen to visibility change\r\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\r\n // start ticking\r\n this.tick();\r\n};\r\n\r\nPlayer.prototype.tick = function() {\r\n // do not tick if not playing\r\n if ( this.state != 'playing' ) {\r\n return;\r\n }\r\n\r\n var time = this.parent.options.autoPlay;\r\n // default to 3 seconds\r\n time = typeof time == 'number' ? time : 3000;\r\n var _this = this;\r\n // HACK: reset ticks if stopped and started within interval\r\n this.clear();\r\n this.timeout = setTimeout( function() {\r\n _this.parent.next( true );\r\n _this.tick();\r\n }, time );\r\n};\r\n\r\nPlayer.prototype.stop = function() {\r\n this.state = 'stopped';\r\n this.clear();\r\n // remove visibility change event\r\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\r\n};\r\n\r\nPlayer.prototype.clear = function() {\r\n clearTimeout( this.timeout );\r\n};\r\n\r\nPlayer.prototype.pause = function() {\r\n if ( this.state == 'playing' ) {\r\n this.state = 'paused';\r\n this.clear();\r\n }\r\n};\r\n\r\nPlayer.prototype.unpause = function() {\r\n // re-start play if paused\r\n if ( this.state == 'paused' ) {\r\n this.play();\r\n }\r\n};\r\n\r\n// pause if page visibility is hidden, unpause if visible\r\nPlayer.prototype.visibilityChange = function() {\r\n var isPageHidden = document.hidden;\r\n this[ isPageHidden ? 'pause' : 'unpause' ]();\r\n};\r\n\r\nPlayer.prototype.visibilityPlay = function() {\r\n this.play();\r\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\r\n};\r\n\r\n// -------------------------- Flickity -------------------------- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n pauseAutoPlayOnHover: true\r\n});\r\n\r\nFlickity.createMethods.push('_createPlayer');\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createPlayer = function() {\r\n this.player = new Player( this );\r\n\r\n this.on( 'activate', this.activatePlayer );\r\n this.on( 'uiChange', this.stopPlayer );\r\n this.on( 'pointerDown', this.stopPlayer );\r\n this.on( 'deactivate', this.deactivatePlayer );\r\n};\r\n\r\nproto.activatePlayer = function() {\r\n if ( !this.options.autoPlay ) {\r\n return;\r\n }\r\n this.player.play();\r\n this.element.addEventListener( 'mouseenter', this );\r\n};\r\n\r\n// Player API, don't hate the ... thanks I know where the door is\r\n\r\nproto.playPlayer = function() {\r\n this.player.play();\r\n};\r\n\r\nproto.stopPlayer = function() {\r\n this.player.stop();\r\n};\r\n\r\nproto.pausePlayer = function() {\r\n this.player.pause();\r\n};\r\n\r\nproto.unpausePlayer = function() {\r\n this.player.unpause();\r\n};\r\n\r\nproto.deactivatePlayer = function() {\r\n this.player.stop();\r\n this.element.removeEventListener( 'mouseenter', this );\r\n};\r\n\r\n// ----- mouseenter/leave ----- //\r\n\r\n// pause auto-play on hover\r\nproto.onmouseenter = function() {\r\n if ( !this.options.pauseAutoPlayOnHover ) {\r\n return;\r\n }\r\n this.player.pause();\r\n this.element.addEventListener( 'mouseleave', this );\r\n};\r\n\r\n// resume auto-play on hover off\r\nproto.onmouseleave = function() {\r\n this.player.unpause();\r\n this.element.removeEventListener( 'mouseleave', this );\r\n};\r\n\r\n// ----- ----- //\r\n\r\nFlickity.Player = Player;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// add, remove cell\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/add-remove-cell',[\r\n './flickity',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, utils ) {\r\n return factory( window, Flickity, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, utils ) {\r\n\r\n\r\n\r\n// append cells to a document fragment\r\nfunction getCellsFragment( cells ) {\r\n var fragment = document.createDocumentFragment();\r\n cells.forEach( function( cell ) {\r\n fragment.appendChild( cell.element );\r\n });\r\n return fragment;\r\n}\r\n\r\n// -------------------------- add/remove cell prototype -------------------------- //\r\n\r\nvar proto = Flickity.prototype;\r\n\r\n/**\r\n * Insert, prepend, or append cells\r\n * @param {Element, Array, NodeList} elems\r\n * @param {Integer} index\r\n */\r\nproto.insert = function( elems, index ) {\r\n var cells = this._makeCells( elems );\r\n if ( !cells || !cells.length ) {\r\n return;\r\n }\r\n var len = this.cells.length;\r\n // default to append\r\n index = index === undefined ? len : index;\r\n // add cells with document fragment\r\n var fragment = getCellsFragment( cells );\r\n // append to slider\r\n var isAppend = index == len;\r\n if ( isAppend ) {\r\n this.slider.appendChild( fragment );\r\n } else {\r\n var insertCellElement = this.cells[ index ].element;\r\n this.slider.insertBefore( fragment, insertCellElement );\r\n }\r\n // add to this.cells\r\n if ( index === 0 ) {\r\n // prepend, add to start\r\n this.cells = cells.concat( this.cells );\r\n } else if ( isAppend ) {\r\n // append, add to end\r\n this.cells = this.cells.concat( cells );\r\n } else {\r\n // insert in this.cells\r\n var endCells = this.cells.splice( index, len - index );\r\n this.cells = this.cells.concat( cells ).concat( endCells );\r\n }\r\n\r\n this._sizeCells( cells );\r\n this.cellChange( index, true );\r\n};\r\n\r\nproto.append = function( elems ) {\r\n this.insert( elems, this.cells.length );\r\n};\r\n\r\nproto.prepend = function( elems ) {\r\n this.insert( elems, 0 );\r\n};\r\n\r\n/**\r\n * Remove cells\r\n * @param {Element, Array, NodeList} elems\r\n */\r\nproto.remove = function( elems ) {\r\n var cells = this.getCells( elems );\r\n if ( !cells || !cells.length ) {\r\n return;\r\n }\r\n\r\n var minCellIndex = this.cells.length - 1;\r\n // remove cells from collection & DOM\r\n cells.forEach( function( cell ) {\r\n cell.remove();\r\n var index = this.cells.indexOf( cell );\r\n minCellIndex = Math.min( index, minCellIndex );\r\n utils.removeFrom( this.cells, cell );\r\n }, this );\r\n\r\n this.cellChange( minCellIndex, true );\r\n};\r\n\r\n/**\r\n * logic to be run after a cell's size changes\r\n * @param {Element} elem - cell's element\r\n */\r\nproto.cellSizeChange = function( elem ) {\r\n var cell = this.getCell( elem );\r\n if ( !cell ) {\r\n return;\r\n }\r\n cell.getSize();\r\n\r\n var index = this.cells.indexOf( cell );\r\n this.cellChange( index );\r\n};\r\n\r\n/**\r\n * logic any time a cell is changed: added, removed, or size changed\r\n * @param {Integer} changedCellIndex - index of the changed cell, optional\r\n */\r\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\r\n var prevSelectedElem = this.selectedElement;\r\n this._positionCells( changedCellIndex );\r\n this._getWrapShiftCells();\r\n this.setGallerySize();\r\n // update selectedIndex\r\n // try to maintain position & select previous selected element\r\n var cell = this.getCell( prevSelectedElem );\r\n if ( cell ) {\r\n this.selectedIndex = this.getCellSlideIndex( cell );\r\n }\r\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\r\n\r\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\r\n // position slider\r\n this.select( this.selectedIndex );\r\n // do not position slider after lazy load\r\n if ( isPositioningSlider ) {\r\n this.positionSliderAtSelected();\r\n }\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// lazyload\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/lazyload',[\r\n './flickity',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, utils ) {\r\n return factory( window, Flickity, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, utils ) {\r\n'use strict';\r\n\r\nFlickity.createMethods.push('_createLazyload');\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createLazyload = function() {\r\n this.on( 'select', this.lazyLoad );\r\n};\r\n\r\nproto.lazyLoad = function() {\r\n var lazyLoad = this.options.lazyLoad;\r\n if ( !lazyLoad ) {\r\n return;\r\n }\r\n // get adjacent cells, use lazyLoad option for adjacent count\r\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\r\n var cellElems = this.getAdjacentCellElements( adjCount );\r\n // get lazy images in those cells\r\n var lazyImages = [];\r\n cellElems.forEach( function( cellElem ) {\r\n var lazyCellImages = getCellLazyImages( cellElem );\r\n lazyImages = lazyImages.concat( lazyCellImages );\r\n });\r\n // load lazy images\r\n lazyImages.forEach( function( img ) {\r\n new LazyLoader( img, this );\r\n }, this );\r\n};\r\n\r\nfunction getCellLazyImages( cellElem ) {\r\n // check if cell element is lazy image\r\n if ( cellElem.nodeName == 'IMG' ) {\r\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\r\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\r\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\r\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\r\n return [ cellElem ];\r\n }\r\n }\r\n // select lazy images in cell\r\n var lazySelector = 'img[data-flickity-lazyload], ' +\r\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\r\n var imgs = cellElem.querySelectorAll( lazySelector );\r\n return utils.makeArray( imgs );\r\n}\r\n\r\n// -------------------------- LazyLoader -------------------------- //\r\n\r\n/**\r\n * class to handle loading images\r\n */\r\nfunction LazyLoader( img, flickity ) {\r\n this.img = img;\r\n this.flickity = flickity;\r\n this.load();\r\n}\r\n\r\nLazyLoader.prototype.handleEvent = utils.handleEvent;\r\n\r\nLazyLoader.prototype.load = function() {\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n // get src & srcset\r\n var src = this.img.getAttribute('data-flickity-lazyload') ||\r\n this.img.getAttribute('data-flickity-lazyload-src');\r\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\r\n // set src & serset\r\n this.img.src = src;\r\n if ( srcset ) {\r\n this.img.setAttribute( 'srcset', srcset );\r\n }\r\n // remove attr\r\n this.img.removeAttribute('data-flickity-lazyload');\r\n this.img.removeAttribute('data-flickity-lazyload-src');\r\n this.img.removeAttribute('data-flickity-lazyload-srcset');\r\n};\r\n\r\nLazyLoader.prototype.onload = function( event ) {\r\n this.complete( event, 'flickity-lazyloaded' );\r\n};\r\n\r\nLazyLoader.prototype.onerror = function( event ) {\r\n this.complete( event, 'flickity-lazyerror' );\r\n};\r\n\r\nLazyLoader.prototype.complete = function( event, className ) {\r\n // unbind events\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n\r\n var cell = this.flickity.getParentCell( this.img );\r\n var cellElem = cell && cell.element;\r\n this.flickity.cellSizeChange( cellElem );\r\n\r\n this.img.classList.add( className );\r\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\r\n};\r\n\r\n// ----- ----- //\r\n\r\nFlickity.LazyLoader = LazyLoader;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n/*!\r\n * Flickity v2.2.0\r\n * Touch, responsive, flickable carousels\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Flickity Commercial License for commercial use\r\n *\r\n * https://flickity.metafizzy.co\r\n * Copyright 2015-2018 Metafizzy\r\n */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/index',[\r\n './flickity',\r\n './drag',\r\n './prev-next-button',\r\n './page-dots',\r\n './player',\r\n './add-remove-cell',\r\n './lazyload'\r\n ], factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('./flickity'),\r\n require('./drag'),\r\n require('./prev-next-button'),\r\n require('./page-dots'),\r\n require('./player'),\r\n require('./add-remove-cell'),\r\n require('./lazyload')\r\n );\r\n }\r\n\r\n})( window, function factory( Flickity ) {\r\n /*jshint strict: false*/\r\n return Flickity;\r\n});\r\n\r\n/*!\r\n * Flickity asNavFor v2.0.1\r\n * enable asNavFor for Flickity\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true*/\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity-as-nav-for/as-nav-for',[\r\n 'flickity/js/index',\r\n 'fizzy-ui-utils/utils'\r\n ], factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('flickity'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = factory(\r\n window.Flickity,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( Flickity, utils ) {\r\n\r\n\r\n\r\n// -------------------------- asNavFor prototype -------------------------- //\r\n\r\n// Flickity.defaults.asNavFor = null;\r\n\r\nFlickity.createMethods.push('_createAsNavFor');\r\n\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createAsNavFor = function() {\r\n this.on( 'activate', this.activateAsNavFor );\r\n this.on( 'deactivate', this.deactivateAsNavFor );\r\n this.on( 'destroy', this.destroyAsNavFor );\r\n\r\n var asNavForOption = this.options.asNavFor;\r\n if ( !asNavForOption ) {\r\n return;\r\n }\r\n // HACK do async, give time for other flickity to be initalized\r\n var _this = this;\r\n setTimeout( function initNavCompanion() {\r\n _this.setNavCompanion( asNavForOption );\r\n });\r\n};\r\n\r\nproto.setNavCompanion = function( elem ) {\r\n elem = utils.getQueryElement( elem );\r\n var companion = Flickity.data( elem );\r\n // stop if no companion or companion is self\r\n if ( !companion || companion == this ) {\r\n return;\r\n }\r\n\r\n this.navCompanion = companion;\r\n // companion select\r\n var _this = this;\r\n this.onNavCompanionSelect = function() {\r\n _this.navCompanionSelect();\r\n };\r\n companion.on( 'select', this.onNavCompanionSelect );\r\n // click\r\n this.on( 'staticClick', this.onNavStaticClick );\r\n\r\n this.navCompanionSelect( true );\r\n};\r\n\r\nproto.navCompanionSelect = function( isInstant ) {\r\n if ( !this.navCompanion ) {\r\n return;\r\n }\r\n // select slide that matches first cell of slide\r\n var selectedCell = this.navCompanion.selectedCells[0];\r\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\r\n var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\r\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\r\n this.navCompanion.cellAlign ) );\r\n this.selectCell( selectIndex, false, isInstant );\r\n // set nav selected class\r\n this.removeNavSelectedElements();\r\n // stop if companion has more cells than this one\r\n if ( selectIndex >= this.cells.length ) {\r\n return;\r\n }\r\n\r\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\r\n this.navSelectedElements = selectedCells.map( function( cell ) {\r\n return cell.element;\r\n });\r\n this.changeNavSelectedClass('add');\r\n};\r\n\r\nfunction lerp( a, b, t ) {\r\n return ( b - a ) * t + a;\r\n}\r\n\r\nproto.changeNavSelectedClass = function( method ) {\r\n this.navSelectedElements.forEach( function( navElem ) {\r\n navElem.classList[ method ]('is-nav-selected');\r\n });\r\n};\r\n\r\nproto.activateAsNavFor = function() {\r\n this.navCompanionSelect( true );\r\n};\r\n\r\nproto.removeNavSelectedElements = function() {\r\n if ( !this.navSelectedElements ) {\r\n return;\r\n }\r\n this.changeNavSelectedClass('remove');\r\n delete this.navSelectedElements;\r\n};\r\n\r\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\r\n if ( typeof cellIndex == 'number' ) {\r\n this.navCompanion.selectCell( cellIndex );\r\n }\r\n};\r\n\r\nproto.deactivateAsNavFor = function() {\r\n this.removeNavSelectedElements();\r\n};\r\n\r\nproto.destroyAsNavFor = function() {\r\n if ( !this.navCompanion ) {\r\n return;\r\n }\r\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\r\n this.off( 'staticClick', this.onNavStaticClick );\r\n delete this.navCompanion;\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n/*!\r\n * imagesLoaded v4.1.4\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n\r\n( function( window, factory ) { 'use strict';\r\n // universal module definition\r\n\r\n /*global define: false, module: false, require: false */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'imagesloaded/imagesloaded',[\r\n 'ev-emitter/ev-emitter'\r\n ], function( EvEmitter ) {\r\n return factory( window, EvEmitter );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter')\r\n );\r\n } else {\r\n // browser global\r\n window.imagesLoaded = factory(\r\n window,\r\n window.EvEmitter\r\n );\r\n }\r\n\r\n})( typeof window !== 'undefined' ? window : this,\r\n\r\n// -------------------------- factory -------------------------- //\r\n\r\nfunction factory( window, EvEmitter ) {\r\n\r\n\r\n\r\nvar $ = window.jQuery;\r\nvar console = window.console;\r\n\r\n// -------------------------- helpers -------------------------- //\r\n\r\n// extend objects\r\nfunction extend( a, b ) {\r\n for ( var prop in b ) {\r\n a[ prop ] = b[ prop ];\r\n }\r\n return a;\r\n}\r\n\r\nvar arraySlice = Array.prototype.slice;\r\n\r\n// turn element or nodeList into an array\r\nfunction makeArray( obj ) {\r\n if ( Array.isArray( obj ) ) {\r\n // use object if already an array\r\n return obj;\r\n }\r\n\r\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\r\n if ( isArrayLike ) {\r\n // convert nodeList to array\r\n return arraySlice.call( obj );\r\n }\r\n\r\n // array of single index\r\n return [ obj ];\r\n}\r\n\r\n// -------------------------- imagesLoaded -------------------------- //\r\n\r\n/**\r\n * @param {Array, Element, NodeList, String} elem\r\n * @param {Object or Function} options - if function, use as callback\r\n * @param {Function} onAlways - callback function\r\n */\r\nfunction ImagesLoaded( elem, options, onAlways ) {\r\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\r\n if ( !( this instanceof ImagesLoaded ) ) {\r\n return new ImagesLoaded( elem, options, onAlways );\r\n }\r\n // use elem as selector string\r\n var queryElem = elem;\r\n if ( typeof elem == 'string' ) {\r\n queryElem = document.querySelectorAll( elem );\r\n }\r\n // bail if bad element\r\n if ( !queryElem ) {\r\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\r\n return;\r\n }\r\n\r\n this.elements = makeArray( queryElem );\r\n this.options = extend( {}, this.options );\r\n // shift arguments if no options set\r\n if ( typeof options == 'function' ) {\r\n onAlways = options;\r\n } else {\r\n extend( this.options, options );\r\n }\r\n\r\n if ( onAlways ) {\r\n this.on( 'always', onAlways );\r\n }\r\n\r\n this.getImages();\r\n\r\n if ( $ ) {\r\n // add jQuery Deferred object\r\n this.jqDeferred = new $.Deferred();\r\n }\r\n\r\n // HACK check async to allow time to bind listeners\r\n setTimeout( this.check.bind( this ) );\r\n}\r\n\r\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\r\n\r\nImagesLoaded.prototype.options = {};\r\n\r\nImagesLoaded.prototype.getImages = function() {\r\n this.images = [];\r\n\r\n // filter & find items if we have an item selector\r\n this.elements.forEach( this.addElementImages, this );\r\n};\r\n\r\n/**\r\n * @param {Node} element\r\n */\r\nImagesLoaded.prototype.addElementImages = function( elem ) {\r\n // filter siblings\r\n if ( elem.nodeName == 'IMG' ) {\r\n this.addImage( elem );\r\n }\r\n // get background image on element\r\n if ( this.options.background === true ) {\r\n this.addElementBackgroundImages( elem );\r\n }\r\n\r\n // find children\r\n // no non-element nodes, #143\r\n var nodeType = elem.nodeType;\r\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\r\n return;\r\n }\r\n var childImgs = elem.querySelectorAll('img');\r\n // concat childElems to filterFound array\r\n for ( var i=0; i < childImgs.length; i++ ) {\r\n var img = childImgs[i];\r\n this.addImage( img );\r\n }\r\n\r\n // get child background images\r\n if ( typeof this.options.background == 'string' ) {\r\n var children = elem.querySelectorAll( this.options.background );\r\n for ( i=0; i < children.length; i++ ) {\r\n var child = children[i];\r\n this.addElementBackgroundImages( child );\r\n }\r\n }\r\n};\r\n\r\nvar elementNodeTypes = {\r\n 1: true,\r\n 9: true,\r\n 11: true\r\n};\r\n\r\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\r\n var style = getComputedStyle( elem );\r\n if ( !style ) {\r\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\r\n return;\r\n }\r\n // get url inside url(\"...\")\r\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\r\n var matches = reURL.exec( style.backgroundImage );\r\n while ( matches !== null ) {\r\n var url = matches && matches[2];\r\n if ( url ) {\r\n this.addBackground( url, elem );\r\n }\r\n matches = reURL.exec( style.backgroundImage );\r\n }\r\n};\r\n\r\n/**\r\n * @param {Image} img\r\n */\r\nImagesLoaded.prototype.addImage = function( img ) {\r\n var loadingImage = new LoadingImage( img );\r\n this.images.push( loadingImage );\r\n};\r\n\r\nImagesLoaded.prototype.addBackground = function( url, elem ) {\r\n var background = new Background( url, elem );\r\n this.images.push( background );\r\n};\r\n\r\nImagesLoaded.prototype.check = function() {\r\n var _this = this;\r\n this.progressedCount = 0;\r\n this.hasAnyBroken = false;\r\n // complete if no images\r\n if ( !this.images.length ) {\r\n this.complete();\r\n return;\r\n }\r\n\r\n function onProgress( image, elem, message ) {\r\n // HACK - Chrome triggers event before object properties have changed. #83\r\n setTimeout( function() {\r\n _this.progress( image, elem, message );\r\n });\r\n }\r\n\r\n this.images.forEach( function( loadingImage ) {\r\n loadingImage.once( 'progress', onProgress );\r\n loadingImage.check();\r\n });\r\n};\r\n\r\nImagesLoaded.prototype.progress = function( image, elem, message ) {\r\n this.progressedCount++;\r\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\r\n // progress event\r\n this.emitEvent( 'progress', [ this, image, elem ] );\r\n if ( this.jqDeferred && this.jqDeferred.notify ) {\r\n this.jqDeferred.notify( this, image );\r\n }\r\n // check if completed\r\n if ( this.progressedCount == this.images.length ) {\r\n this.complete();\r\n }\r\n\r\n if ( this.options.debug && console ) {\r\n console.log( 'progress: ' + message, image, elem );\r\n }\r\n};\r\n\r\nImagesLoaded.prototype.complete = function() {\r\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\r\n this.isComplete = true;\r\n this.emitEvent( eventName, [ this ] );\r\n this.emitEvent( 'always', [ this ] );\r\n if ( this.jqDeferred ) {\r\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\r\n this.jqDeferred[ jqMethod ]( this );\r\n }\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nfunction LoadingImage( img ) {\r\n this.img = img;\r\n}\r\n\r\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\r\n\r\nLoadingImage.prototype.check = function() {\r\n // If complete is true and browser supports natural sizes,\r\n // try to check for image status manually.\r\n var isComplete = this.getIsImageComplete();\r\n if ( isComplete ) {\r\n // report based on naturalWidth\r\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\r\n return;\r\n }\r\n\r\n // If none of the checks above matched, simulate loading on detached element.\r\n this.proxyImage = new Image();\r\n this.proxyImage.addEventListener( 'load', this );\r\n this.proxyImage.addEventListener( 'error', this );\r\n // bind to image as well for Firefox. #191\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n this.proxyImage.src = this.img.src;\r\n};\r\n\r\nLoadingImage.prototype.getIsImageComplete = function() {\r\n // check for non-zero, non-undefined naturalWidth\r\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\r\n return this.img.complete && this.img.naturalWidth;\r\n};\r\n\r\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\r\n this.isLoaded = isLoaded;\r\n this.emitEvent( 'progress', [ this, this.img, message ] );\r\n};\r\n\r\n// ----- events ----- //\r\n\r\n// trigger specified handler for event type\r\nLoadingImage.prototype.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\nLoadingImage.prototype.onload = function() {\r\n this.confirm( true, 'onload' );\r\n this.unbindEvents();\r\n};\r\n\r\nLoadingImage.prototype.onerror = function() {\r\n this.confirm( false, 'onerror' );\r\n this.unbindEvents();\r\n};\r\n\r\nLoadingImage.prototype.unbindEvents = function() {\r\n this.proxyImage.removeEventListener( 'load', this );\r\n this.proxyImage.removeEventListener( 'error', this );\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n};\r\n\r\n// -------------------------- Background -------------------------- //\r\n\r\nfunction Background( url, element ) {\r\n this.url = url;\r\n this.element = element;\r\n this.img = new Image();\r\n}\r\n\r\n// inherit LoadingImage prototype\r\nBackground.prototype = Object.create( LoadingImage.prototype );\r\n\r\nBackground.prototype.check = function() {\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n this.img.src = this.url;\r\n // check if image is already complete\r\n var isComplete = this.getIsImageComplete();\r\n if ( isComplete ) {\r\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\r\n this.unbindEvents();\r\n }\r\n};\r\n\r\nBackground.prototype.unbindEvents = function() {\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n};\r\n\r\nBackground.prototype.confirm = function( isLoaded, message ) {\r\n this.isLoaded = isLoaded;\r\n this.emitEvent( 'progress', [ this, this.element, message ] );\r\n};\r\n\r\n// -------------------------- jQuery -------------------------- //\r\n\r\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\r\n jQuery = jQuery || window.jQuery;\r\n if ( !jQuery ) {\r\n return;\r\n }\r\n // set local variable\r\n $ = jQuery;\r\n // $().imagesLoaded()\r\n $.fn.imagesLoaded = function( options, callback ) {\r\n var instance = new ImagesLoaded( this, options, callback );\r\n return instance.jqDeferred.promise( $(this) );\r\n };\r\n};\r\n// try making plugin\r\nImagesLoaded.makeJQueryPlugin();\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nreturn ImagesLoaded;\r\n\r\n});\r\n\r\n/*!\r\n * Flickity imagesLoaded v2.0.0\r\n * enables imagesLoaded option for Flickity\r\n */\r\n\r\n/*jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( [\r\n 'flickity/js/index',\r\n 'imagesloaded/imagesloaded'\r\n ], function( Flickity, imagesLoaded ) {\r\n return factory( window, Flickity, imagesLoaded );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('flickity'),\r\n require('imagesloaded')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = factory(\r\n window,\r\n window.Flickity,\r\n window.imagesLoaded\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, imagesLoaded ) {\r\n'use strict';\r\n\r\nFlickity.createMethods.push('_createImagesLoaded');\r\n\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createImagesLoaded = function() {\r\n this.on( 'activate', this.imagesLoaded );\r\n};\r\n\r\nproto.imagesLoaded = function() {\r\n if ( !this.options.imagesLoaded ) {\r\n return;\r\n }\r\n var _this = this;\r\n function onImagesLoadedProgress( instance, image ) {\r\n var cell = _this.getParentCell( image.img );\r\n _this.cellSizeChange( cell && cell.element );\r\n if ( !_this.options.freeScroll ) {\r\n _this.positionSliderAtSelected();\r\n }\r\n }\r\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\r\n};\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n","/*!\r\n * imagesLoaded PACKAGED v5.0.0\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n!function (t, e) { \"object\" == typeof module && module.exports ? module.exports = e() : t.EvEmitter = e() }(\"undefined\" != typeof window ? window : this, (function () { function t() { } let e = t.prototype; return e.on = function (t, e) { if (!t || !e) return this; let i = this._events = this._events || {}, s = i[t] = i[t] || []; return s.includes(e) || s.push(e), this }, e.once = function (t, e) { if (!t || !e) return this; this.on(t, e); let i = this._onceEvents = this._onceEvents || {}; return (i[t] = i[t] || {})[e] = !0, this }, e.off = function (t, e) { let i = this._events && this._events[t]; if (!i || !i.length) return this; let s = i.indexOf(e); return -1 != s && i.splice(s, 1), this }, e.emitEvent = function (t, e) { let i = this._events && this._events[t]; if (!i || !i.length) return this; i = i.slice(0), e = e || []; let s = this._onceEvents && this._onceEvents[t]; for (let n of i) { s && s[n] && (this.off(t, n), delete s[n]), n.apply(this, e) } return this }, e.allOff = function () { return delete this._events, delete this._onceEvents, this }, t })),\r\n /*!\r\n * imagesLoaded v5.0.0\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n function (t, e) { \"object\" == typeof module && module.exports ? module.exports = e(t, require(\"ev-emitter\")) : t.imagesLoaded = e(t, t.EvEmitter) }(\"undefined\" != typeof window ? window : this, (function (t, e) { let i = t.jQuery, s = t.console; function n(t, e, o) { if (!(this instanceof n)) return new n(t, e, o); let r = t; var h; (\"string\" == typeof t && (r = document.querySelectorAll(t)), r) ? (this.elements = (h = r, Array.isArray(h) ? h : \"object\" == typeof h && \"number\" == typeof h.length ? [...h] : [h]), this.options = {}, \"function\" == typeof e ? o = e : Object.assign(this.options, e), o && this.on(\"always\", o), this.getImages(), i && (this.jqDeferred = new i.Deferred), setTimeout(this.check.bind(this))) : s.error(`Bad element for imagesLoaded ${r || t}`) } n.prototype = Object.create(e.prototype), n.prototype.getImages = function () { this.images = [], this.elements.forEach(this.addElementImages, this) }; const o = [1, 9, 11]; n.prototype.addElementImages = function (t) { \"IMG\" === t.nodeName && this.addImage(t), !0 === this.options.background && this.addElementBackgroundImages(t); let { nodeType: e } = t; if (!e || !o.includes(e)) return; let i = t.querySelectorAll(\"img\"); for (let t of i) this.addImage(t); if (\"string\" == typeof this.options.background) { let e = t.querySelectorAll(this.options.background); for (let t of e) this.addElementBackgroundImages(t) } }; const r = /url\\((['\"])?(.*?)\\1\\)/gi; function h(t) { this.img = t } function d(t, e) { this.url = t, this.element = e, this.img = new Image } return n.prototype.addElementBackgroundImages = function (t) { let e = getComputedStyle(t); if (!e) return; let i = r.exec(e.backgroundImage); for (; null !== i;) { let s = i && i[2]; s && this.addBackground(s, t), i = r.exec(e.backgroundImage) } }, n.prototype.addImage = function (t) { let e = new h(t); this.images.push(e) }, n.prototype.addBackground = function (t, e) { let i = new d(t, e); this.images.push(i) }, n.prototype.check = function () { if (this.progressedCount = 0, this.hasAnyBroken = !1, !this.images.length) return void this.complete(); let t = (t, e, i) => { setTimeout((() => { this.progress(t, e, i) })) }; this.images.forEach((function (e) { e.once(\"progress\", t), e.check() })) }, n.prototype.progress = function (t, e, i) { this.progressedCount++, this.hasAnyBroken = this.hasAnyBroken || !t.isLoaded, this.emitEvent(\"progress\", [this, t, e]), this.jqDeferred && this.jqDeferred.notify && this.jqDeferred.notify(this, t), this.progressedCount === this.images.length && this.complete(), this.options.debug && s && s.log(`progress: ${i}`, t, e) }, n.prototype.complete = function () { let t = this.hasAnyBroken ? \"fail\" : \"done\"; if (this.isComplete = !0, this.emitEvent(t, [this]), this.emitEvent(\"always\", [this]), this.jqDeferred) { let t = this.hasAnyBroken ? \"reject\" : \"resolve\"; this.jqDeferred[t](this) } }, h.prototype = Object.create(e.prototype), h.prototype.check = function () { this.getIsImageComplete() ? this.confirm(0 !== this.img.naturalWidth, \"naturalWidth\") : (this.proxyImage = new Image, this.img.crossOrigin && (this.proxyImage.crossOrigin = this.img.crossOrigin), this.proxyImage.addEventListener(\"load\", this), this.proxyImage.addEventListener(\"error\", this), this.img.addEventListener(\"load\", this), this.img.addEventListener(\"error\", this), this.proxyImage.src = this.img.currentSrc || this.img.src) }, h.prototype.getIsImageComplete = function () { return this.img.complete && this.img.naturalWidth }, h.prototype.confirm = function (t, e) { this.isLoaded = t; let { parentNode: i } = this.img, s = \"PICTURE\" === i.nodeName ? i : this.img; this.emitEvent(\"progress\", [this, s, e]) }, h.prototype.handleEvent = function (t) { let e = \"on\" + t.type; this[e] && this[e](t) }, h.prototype.onload = function () { this.confirm(!0, \"onload\"), this.unbindEvents() }, h.prototype.onerror = function () { this.confirm(!1, \"onerror\"), this.unbindEvents() }, h.prototype.unbindEvents = function () { this.proxyImage.removeEventListener(\"load\", this), this.proxyImage.removeEventListener(\"error\", this), this.img.removeEventListener(\"load\", this), this.img.removeEventListener(\"error\", this) }, d.prototype = Object.create(h.prototype), d.prototype.check = function () { this.img.addEventListener(\"load\", this), this.img.addEventListener(\"error\", this), this.img.src = this.url, this.getIsImageComplete() && (this.confirm(0 !== this.img.naturalWidth, \"naturalWidth\"), this.unbindEvents()) }, d.prototype.unbindEvents = function () { this.img.removeEventListener(\"load\", this), this.img.removeEventListener(\"error\", this) }, d.prototype.confirm = function (t, e) { this.isLoaded = t, this.emitEvent(\"progress\", [this, this.element, e]) }, n.makeJQueryPlugin = function (e) { (e = e || t.jQuery) && (i = e, i.fn.imagesLoaded = function (t, e) { return new n(this, t, e).jqDeferred.promise(i(this)) }) }, n.makeJQueryPlugin(), n }));","/*\n * MAIN SCRIPT\n * DON'T WRITE FUNCTION HERE, CALL THEM ONLY\n *\n * **/\n// document event listeners\ndocument.addEventListener('scroll', () => {\n initRecaptcha();\n});\nconst cardsAnimationTiming = 300;\ndocument.addEventListener('DOMContentLoaded', (event) => {\n initFormFieldsToggle();\n initFormsValidation();\n initModalResponse();\n initIubendaProof();\n initLoadMore();\n initFilter();\n initVideo();\n initMapScript();\n initSwitchLanguage();\n initMobileMenu();\n initCardsAnimation(cardsAnimationTiming);\n initFadeInAnimations();\n initImageGalleryWidget();\n initRelatedUsageAreasWidget();\n initTextImageExtendedBlockReadMore();\n initRelatedPreparationsWidget();\n initMultimediaGalleryWidget();\n initMultipleHeadingWidget();\n initHeadingVideo();\n jsLazyLoadImages();\n initRotatingHeadingComponent();\n initProductColorsWidget();\n initMediaVideoComponent();\n initImageBanner();\n shopifyGTMEvent();\n initIncludedOptionalsWidget();\n});\n","/**\n * Align cells within the carousel element.\n * \"left\", \"center\", \"right\"\n */\nvar cellAlign;\n(function (cellAlign) {\n cellAlign[\"left\"] = \"left\";\n cellAlign[\"center\"] = \"center\";\n cellAlign[\"right\"] = \"right\";\n})(cellAlign || (cellAlign = {}));\n/**\n * Responsive slider\n * If the container can't contain all the slides then the carousel will be initialized\n *\n * ATTENTION\n * You MUST add the attribute\n * data-slide to every slide of the slider\n *\n * @param {string} sliderSelector - querySelector of carousel. Choose [data-carousel] if you want to select all carousel.\n * @param {cellAlign} cellAlign - Align cells within the carousel element. Choose \"left\", \"center\", \"right\".\n * @param {boolean} contain - Contains cells to carousel element to prevent excess scroll at beginning or end. Has no effect if wrapAround: true\n * @param {boolean | number} autoPlay - Automatically advances to the next cell.\n * @param {boolean} wrapAround - At the end of cells, wrap-around to the other end for infinite scrolling.\n * @param {number} viewport - An optional parameter to decide at which viewport the carousel should be activated\n *\n */\nconst initCarousel = (sliderSelector, cellAlign, contain, autoPlay, wrapAround, showArrows, showDots, viewport) => {\n const createdSlidersArray = [];\n if (window.innerWidth <= viewport || !viewport) {\n const arrayCarousel = document.querySelectorAll(sliderSelector);\n if (arrayCarousel && arrayCarousel.length > 0) {\n arrayCarousel.forEach((carouselContainer) => {\n const arraySliderItems = carouselContainer.querySelectorAll(\"[data-slide]\");\n //Max number of slides that could exist into the slider\n const maxNumberOfItems = ((carouselContainer.clientWidth + (arraySliderItems[0].offsetWidth - arraySliderItems[0].clientWidth)) / arraySliderItems[0].offsetWidth);\n //Array of slider's items (How many slide there are on the carousel)\n const actualSliderItemsNumber = arraySliderItems.length;\n //If maxNumberOfItems is less than actualSliderItemsNumber then initialize slider carousel or add a class to center item\n if (actualSliderItemsNumber > maxNumberOfItems) {\n const flickitySlider = new Flickity(carouselContainer, {\n on: {\n ready: function () {\n carouselContainer.setAttribute(\"data-carousel\", \"active\");\n }\n },\n //slider options\n cellAlign: cellAlign.toString(),\n contain: contain,\n autoPlay: autoPlay,\n wrapAround: wrapAround,\n prevNextButtons: showArrows,\n pageDots: showDots,\n imagesLoaded: true,\n adaptiveHeight: true\n });\n //add created slider to list, in order to return it when the function is called\n createdSlidersArray.push(flickitySlider);\n }\n else {\n carouselContainer.classList.add(\"is-not-slider\");\n }\n });\n }\n }\n return createdSlidersArray;\n};\n","/**\n* Animates cards opacity for ease-in rendering.\n*\n* @param delay - Rendering delay between one card and another\n*/\nconst initCardsAnimation = (delay, cardsToAnimateNodeList) => {\n if (!cardsToAnimateNodeList) {\n cardsToAnimateNodeList = document.querySelectorAll(\"[data-animate-opacity]\");\n }\n if (cardsToAnimateNodeList && cardsToAnimateNodeList.length > 0) {\n cardsToAnimateNodeList.forEach((card, index) => {\n if (card.hasAttribute(\"data-animate-opacity\")) {\n imagesLoaded(card, () => {\n setTimeout(() => {\n card.classList.add(\"active\");\n }, delay * index);\n });\n }\n });\n }\n};\n","// ACTIVATE:\n// invoke initFormFieldsToggle() in main.ts if you need to add this hide / show feature for form fields\n// EXAMPLE:\n// you need to show additional fields if a specific option is selected\n// and hide other non-related-fields\n// HOW TO DO IT:\n// add [data-toggler] to all the select fields, that make some extra fields appear\nconst initFormFieldsToggle = () => {\n const contactFormsArray = document.querySelectorAll(\"[contact-form]\");\n if (contactFormsArray && contactFormsArray.length > 0) {\n contactFormsArray.forEach((form) => {\n const togglerArray = form.querySelectorAll(\"[data-toggler]\");\n const elementsToBeToggledArray = document.querySelectorAll(\"[data-form-toggle-type]\");\n togglerArray && togglerArray.length > 0 && togglerArray.forEach((toggler) => {\n //give it a first run to show correct data only\n toggleFormFields(elementsToBeToggledArray, toggler);\n //bind the function to the change event\n toggler.addEventListener(\"change\", () => {\n toggleFormFields(elementsToBeToggledArray, toggler);\n });\n });\n });\n }\n};\n//IF YOU WANT TO INSERT A NEW \"data-form-toggle-type\", THIS CODE HANDLES ONLY SINGLE WORDS\n//SO MAKE THE VALUE OF THE OPTION AND THE ATTR BE JUST ONE WORD\n//EXAMPLE: \n// OK => NEWTYPE, newtype, NewType\n// NOT OK => NEW-TYPE, NEW TYPE\n//IF YOU WANT AN ELEMENT TO BE AVAILABLE FOR MORE THAN ONE TYPE OF OPTION\n//THEN SEPARE THE TYPES WITH \";\"\n//LIKE THIS \"data-form-toggle-type=\"type1;type2\"\nconst toggleFormFields = (array, selectToggler) => {\n array.forEach((element) => {\n if (element.getAttribute(\"data-form-toggle-type\").split(\";\").includes(selectToggler.value.toLowerCase())) {\n element.classList.remove(\"hidden\");\n if (element instanceof HTMLInputElement || element instanceof HTMLSelectElement) {\n element.removeAttribute('disabled');\n }\n else {\n element.querySelectorAll(\"input, select\").forEach((input) => {\n input.removeAttribute('disabled');\n });\n }\n }\n else {\n element.classList.add(\"hidden\");\n if (element instanceof HTMLInputElement || element instanceof HTMLSelectElement) {\n element.disabled = true;\n }\n else {\n element.querySelectorAll(\"input, select\").forEach((input) => {\n input.disabled = true;\n });\n }\n }\n });\n};\n","const mapsArray = document.querySelectorAll(\".google-map\");\nconst initMapScript = () => {\n if (mapsArray && mapsArray.length > 0) {\n const APIKEY = document.querySelector(\"[data-api-key]\").getAttribute(\"data-api-key\");\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://maps.googleapis.com/maps/api/js?key=${APIKEY}&callback=initMap&libraries=&v=weekly`;\n document.head.appendChild(script);\n }\n};\nconst initMap = () => {\n mapsArray && mapsArray.length > 0 && mapsArray.forEach((singleMap) => {\n const markerLat = parseFloat(singleMap.getAttribute(\"data-lat\").replace(\",\", \".\"));\n const markerLng = parseFloat(singleMap.getAttribute(\"data-lng\").replace(\",\", \".\"));\n const markerTitle = singleMap.getAttribute(\"data-marker-title\");\n const markerDescription = singleMap.getAttribute(\"data-marker-description\");\n if (markerLat && markerLng) {\n const map = new google.maps.Map(singleMap, {\n zoom: 10,\n center: { lat: markerLat, lng: markerLng }\n });\n if (markerTitle && markerDescription) {\n new google.maps.Marker({\n position: { lat: markerLat, lng: markerLng },\n map: map,\n title: markerTitle,\n label: markerDescription\n });\n }\n }\n });\n};\n//USARE PER DUE MARKER\n/**\n * Come dovrebbero arrivarmi i dati?\n * Crea un mockup\n * */\n//const mapsArray = document.querySelectorAll(\".google-map\");\n//const initMapScript = () => {\n// if (mapsArray && mapsArray.length > 0) {\n// const APIKEY = \"AIzaSyD03t8qazgdw-SdqcNnlH124LtF4NpLkes\";\n// const script = document.createElement('script');\n// script.async = true;\n// script.src = `https://maps.googleapis.com/maps/api/js?key=${APIKEY}&callback=initMap&libraries=&v=weekly`;\n// document.head.appendChild(script);\n// }\n//};\n//const initMap = () => {\n// mapsArray && mapsArray.length > 0 && mapsArray.forEach((singleMap) => {\n// //styling map\n// const styleMap = [\n// {\n// \"featureType\": \"landscape\",\n// \"stylers\": [\n// {\n// \"hue\": \"#FFBB00\"\n// },\n// {\n// \"saturation\": 43.400000000000006\n// },\n// {\n// \"lightness\": 37.599999999999994\n// },\n// {\n// \"gamma\": 1\n// }\n// ]\n// },\n// {\n// \"featureType\": \"road.highway\",\n// \"stylers\": [\n// {\n// \"hue\": \"#FFC200\"\n// },\n// {\n// \"saturation\": -61.8\n// },\n// {\n// \"lightness\": 45.599999999999994\n// },\n// {\n// \"gamma\": 1\n// }\n// ]\n// },\n// {\n// \"featureType\": \"road.arterial\",\n// \"stylers\": [\n// {\n// \"hue\": \"#FF0300\"\n// },\n// {\n// \"saturation\": -100\n// },\n// {\n// \"lightness\": 51.19999999999999\n// },\n// {\n// \"gamma\": 1\n// }\n// ]\n// },\n// {\n// \"featureType\": \"road.local\",\n// \"stylers\": [\n// {\n// \"hue\": \"#FF0300\"\n// },\n// {\n// \"saturation\": -100\n// },\n// {\n// \"lightness\": 52\n// },\n// {\n// \"gamma\": 1\n// }\n// ]\n// },\n// {\n// \"featureType\": \"water\",\n// \"stylers\": [\n// {\n// \"hue\": \"#0078FF\"\n// },\n// {\n// \"saturation\": -13.200000000000003\n// },\n// {\n// \"lightness\": 2.4000000000000057\n// },\n// {\n// \"gamma\": 1\n// }\n// ]\n// },\n// {\n// \"featureType\": \"poi\",\n// \"stylers\": [\n// {\n// \"hue\": \"#00FF6A\"\n// },\n// {\n// \"saturation\": -1.0989010989011234\n// },\n// {\n// \"lightness\": 11.200000000000017\n// },\n// {\n// \"gamma\": 1\n// }\n// ]\n// }\n// ];\n// // lat lng marker\n//TODO AGGIUNGERE REPLACE\n// const markerLatArray = singleMap.getAttribute(\"data-marker-lat\").split(\";\");\n// const markerLngArray = singleMap.getAttribute(\"data-marker-lng\").split(\";\");\n// // create empty LatLngBounds object to center map automatically between markers\n// let bounds = new google.maps.LatLngBounds();\n// if (markerLatArray && markerLngArray) {\n// const map = new google.maps.Map(singleMap, {\n// zoom: 11,\n// disableDefaultUI: true,\n// styles: styleMap\n// });\n// const iconDefault = \"/assets/icons/Marker.svg\";\n// if (markerLatArray && markerLngArray && markerLatArray.length > 0 && markerLngArray.length > 0) {\n// for (let i = 0; i < markerLatArray.length && i < markerLngArray.length; i++) {\n// let markerLat = parseFloat(markerLatArray[i]);\n// let markerLng = parseFloat(markerLngArray[i]);\n// let marker = new google.maps.Marker({\n// position: { lat: markerLat, lng: markerLng },\n// map: map,\n// icon: iconDefault\n// });\n// bounds.extend(marker.getPosition());\n// }\n// map.fitBounds(bounds);\n// }\n// }\n// });\n//};\n","const initHeadingVideo = () => {\n const video = document.querySelector(\"[data-heading-video]\");\n if (video) {\n const container = video.closest(\"[data-slide]\");\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://player.vimeo.com/api/player.js`;\n document.head.appendChild(script);\n if (container) {\n video.addEventListener('load', () => {\n container.style.background = \"transparent\";\n }, true);\n }\n }\n};\n","const initImageBanner = () => {\n const imageBannerWidgetList = document.querySelectorAll(\"[data-image-banner-widget]\");\n if (imageBannerWidgetList && imageBannerWidgetList.length > 0) {\n imageBannerWidgetList.forEach((imageBannerWidget) => {\n let isDown = false;\n let startX;\n let scrollLeft;\n imageBannerWidget.addEventListener(\"mousedown\", (e) => {\n isDown = true;\n // the X (horizontal) coordinate (in pixels) at which the mouse was clicked - the number of pixels that the upper left corner of the current element is offset to the left within the HTMLElement.offsetParent node\n startX = e.pageX - imageBannerWidget.offsetLeft;\n // number of pixels that an element's content is scrolled from its left edge\n scrollLeft = imageBannerWidget.scrollLeft;\n });\n imageBannerWidget.addEventListener(\"mouseleave\", (e) => {\n isDown = false;\n });\n imageBannerWidget.addEventListener(\"mouseup\", (e) => {\n isDown = false;\n });\n imageBannerWidget.addEventListener(\"mousemove\", (e) => {\n if (!isDown) {\n return;\n }\n e.preventDefault();\n const x = e.pageX - imageBannerWidget.offsetLeft;\n //speed of scrolling\n const walk = (x - startX) * 1;\n imageBannerWidget.scrollLeft = scrollLeft - walk;\n });\n });\n }\n};\n","const initImageGalleryWidget = () => {\n const flickitySlidersArray = initCarousel(\"[data-image-gallery-widget-slider] [data-slider]\", cellAlign.left, true, 5000, true, false, false);\n flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-image-gallery-widget-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-image-gallery-widget-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n });\n};\n","const initIncludedOptionalsWidget = () => {\n const flickitySlidersArray = initCarousel(\"[data-included-optionals-widget-slider] [data-slider]\", cellAlign.left, true, 5000, true, false, false);\n flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-included-optionals-widget-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-included-optionals-widget-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n });\n};\n","const initSwitchLanguage = () => {\n const langIcon = document.querySelector(\"[data-language-selector-container]\");\n const dropdownMenuLanguage = document.querySelector(\"[data-dropdown-lang]\");\n langIcon && langIcon.addEventListener('click', () => {\n if (dropdownMenuLanguage.classList.contains('is-visible')) {\n dropdownMenuLanguage.classList.remove('is-visible');\n dropdownMenuLanguage.classList.add('not-visible');\n }\n else {\n dropdownMenuLanguage.classList.remove('not-visible');\n dropdownMenuLanguage.classList.add('is-visible');\n }\n });\n};\n","const initMediaVideoComponent = () => {\n const videosArray = document.querySelectorAll(\"[data-iframe-to-create-src]\");\n if (videosArray && videosArray.length > 0) {\n videosArray.forEach((video) => {\n video.addEventListener(\"click\", () => {\n const videoUrl = video.getAttribute(\"data-iframe-to-create-src\");\n const queryForAlreadyCreatedIframe = document.querySelector(`iframe[src=\"${videoUrl}\"]`);\n //check if iframe has already been generated\n if (videoUrl && !queryForAlreadyCreatedIframe) {\n //create iframe\n const iframe = document.createElement('iframe');\n // assign url\n iframe.setAttribute('src', videoUrl);\n //set various useful attributes\n iframe.frameBorder = \"0\";\n iframe.allowFullscreen = true;\n iframe.allow = \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\";\n iframe.width = (window.innerWidth - 100).toString();\n iframe.height = (window.innerHeight - 100).toString();\n //create iframe container\n const iframeContainer = document.createElement('div');\n //add class\n iframeContainer.classList.add(\"iframe-container\", \"active\");\n //add title\n iframeContainer.title = \"Click to exit\";\n //append close icon to its container\n iframeContainer.innerHTML = `\r\n \r\n \r\n `;\n //append iframe to its container\n iframeContainer.appendChild(iframe);\n //insert iframecontainer to body\n document.body.appendChild(iframeContainer);\n //remove active class if user clicks outside\n iframeContainer.addEventListener(\"click\", () => {\n iframeContainer.classList.remove(\"active\");\n iframe.setAttribute('src', \"\");\n });\n //scroll to iframe\n iframe.scrollIntoView({ \"block\": \"center\", \"inline\": \"center\" });\n }\n else {\n //add active to iframe's container\n const iframe = document.createElement('iframe');\n // assign url\n iframe.setAttribute('src', videoUrl);\n queryForAlreadyCreatedIframe.parentElement.classList.add(\"active\");\n //scroll to already created iframe\n queryForAlreadyCreatedIframe.scrollIntoView({ \"block\": \"center\", \"inline\": \"center\" });\n }\n });\n });\n }\n};\n","const initMobileMenu = () => {\n const header = document.querySelector(\".header\");\n const hamburgerIcon = document.querySelector(\".hamburger-icon\");\n const closeIcon = document.querySelector(\".close-icon\");\n const body = document.querySelector(\"body\");\n if (header && hamburgerIcon && closeIcon) {\n hamburgerIcon.addEventListener(\"click\", () => {\n closeIcon.classList.add(\"active\");\n hamburgerIcon.classList.remove(\"active\");\n header.classList.add(\"active\");\n });\n closeIcon.addEventListener(\"click\", () => {\n closeIcon.classList.remove(\"active\");\n hamburgerIcon.classList.add(\"active\");\n header.classList.remove(\"active\");\n });\n }\n initAccordionForMobileMenu();\n};\nconst initAccordionForMobileMenu = () => {\n const accordionTogglerArray = document.querySelectorAll(\".accordion-toggler-mobile\");\n if (accordionTogglerArray && accordionTogglerArray.length > 0) {\n accordionTogglerArray.forEach((accordionToggler) => {\n accordionToggler.addEventListener(\"click\", () => {\n accordionToggler.classList.toggle(\"active\");\n for (const sibling of accordionToggler.parentNode.children) {\n if (sibling.classList.contains(\"accordion-child-mobile\")) {\n sibling.classList.toggle('active');\n }\n }\n });\n });\n }\n};\n","const initMultimediaGalleryWidget = () => {\n const flickitySlidersArray = initCarousel(\"[data-multimedia-gallery-widget-slider] [data-slider]\", cellAlign.left, true, 5000, true, false, false);\n flickitySlidersArray && flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-multimedia-gallery-widget-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-multimedia-gallery-widget-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n });\n};\n","const initMultipleHeadingWidget = () => {\n const slidesArray = document.querySelectorAll(\"[data-multiple-heading-component-slider] [data-slide]\");\n if (slidesArray.length > 1) {\n const flickitySlidersArray = initCarousel(\"[data-multiple-heading-component-slider] [data-slider]\", cellAlign.left, true, 5000, true, false, false);\n flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-multiple-heading-component-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-multiple-heading-component-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n });\n }\n};\n","const initFadeInAnimations = () => {\n const elementsToAnimate = document.querySelectorAll(\"[data-animation]\");\n //instance new observer\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n setTimeout(() => {\n entry.target.classList.add(\"active\");\n }, 400);\n }\n });\n });\n //observe\n elementsToAnimate.forEach((element) => {\n observer.observe(element);\n });\n};\n","/**\n* debouncer - Limits the rate at which a function can fire.\n*\n* Example:\n*\n* $(window).resize(debouncer(function(e) {\n* function();\n* }, 300));\n*\n* @param {function} func The function you want to limit\n* @param {ms} timeout Optional: timeout of the debouncer. Defaults at 200ms.\n*/\nconst debouncer = (func, timeout = 300) => {\n let timeoutId;\n return function (...args) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => func.apply(this, args), timeout);\n };\n};\n","const initFilter = () => {\n const filterInput = document.querySelector(\"[data-input-filter]\");\n const itemsToFilterArray = document.querySelectorAll(\"[data-item-toggle]\");\n const itemsTitleToFilterArray = document.querySelectorAll(\"[data-item-filter]\");\n if (filterInput) {\n filterInput.addEventListener(\"keyup\", (e) => {\n const inputText = e.target.value.toLowerCase();\n for (let i = 0; i < itemsTitleToFilterArray.length; i++) {\n if (itemsTitleToFilterArray[i].innerText.toLowerCase().includes(inputText)) {\n itemsToFilterArray[i].classList.remove(\"not-visible\");\n }\n else {\n itemsToFilterArray[i].classList.add(\"not-visible\");\n }\n }\n });\n }\n};\n","let isFormValid = false;\nconst contactForms = document.querySelectorAll(\"form\");\nconst initFormsValidation = () => {\n contactForms && contactForms.forEach((form) => {\n const submitButton = form.querySelector(\"[submit-button]\");\n submitButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n // set active form\n contactForms.forEach((singleForm) => singleForm.removeAttribute(\"data-active-form\"));\n form.setAttribute(\"data-active-form\", \"true\");\n const sessionStorage = window.sessionStorage;\n const modalForm = form.parentElement.querySelector(\".modal.success\");\n if (modalForm) {\n sessionStorage.setItem(`modal`, `${modalForm.getAttribute(\"data-modal\")}`);\n }\n // disable button\n temporaryDisableButton(submitButton);\n // check form validity\n const contactFormRequiredElements = form.querySelectorAll(\"[required]:not([disabled])\");\n if (contactFormRequiredElements && contactFormRequiredElements.length > 0) {\n isFormValid = checkFormValidity(contactFormRequiredElements);\n if (isFormValid) {\n if (isRecaptchaEnabled) {\n grecaptcha.execute(parseInt(form.getAttribute(\"g-recaptcha-index\")));\n }\n else {\n form.submit();\n }\n }\n }\n });\n });\n};\nconst temporaryDisableButton = (button) => {\n button.disabled = true;\n setTimeout(() => {\n button.removeAttribute(\"disabled\");\n }, 2000);\n};\nconst checkFormValidity = (arrayOfRequiredElements) => {\n let errorCounter = 0;\n arrayOfRequiredElements.forEach((item) => {\n if (item.hasAttribute(\"required\")) {\n const isValidItem = item.checkValidity();\n //handle checkbox\n if (item.type === \"checkbox\") {\n const label = item.parentElement.querySelector(\"label\");\n if (isValidItem) {\n label.classList.remove('error');\n }\n else {\n label.classList.add('error');\n errorCounter++;\n }\n //all other inputs\n }\n else {\n if (isValidItem) {\n item.classList.remove('error');\n }\n else {\n item.classList.add('error');\n errorCounter++;\n }\n }\n item.addEventListener(\"click\", () => {\n item.classList.remove('error');\n });\n }\n });\n return errorCounter > 0 ? false : true;\n};\n","const initIubendaProof = () => {\n document.querySelectorAll('form[method=POST]').forEach(function (value) {\n const html = btoa(encodeURI(value.innerHTML));\n const textArea = document.createElement(\"textarea\");\n const innerText = document.createTextNode(html);\n textArea.name = \"iubenda_proof\";\n textArea.style.display = \"none\";\n value.appendChild(textArea);\n textArea.appendChild(innerText);\n });\n};\n","/**\n* LAZY LOAD IMG\n* loading non-critical img (and background img) at the moment of need\n*\n* for img use:\n* - data-src=url\n* -\n* - src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII= *\n*\n* - class => \"notLazy\" to not include that img in lazyLoading function\n*\n* for background img use:\n* - data-bg=url\n*\n* To exclude an entire DOM element (as well as all the children) apply the class \"notLazy\" to that element.\n*\n* recall jsLazyLoadImages() every time you add images asynchronously\n*\n* @external Debouncer.fn\n* @see {@link ./frontend.util.js => debouncer}\n*\n* @external imagesloaded\n* @see {@link https://imagesloaded.desandro.com/}\n*\n* @param {object} settings => [OPTIONAL] settings object\n* @param {bool} settings0=> [OPTIONAL] add all img to lazyLoad\n* @param {bool} settings1 => [OPTIONAL] add all bacgkroundImg to lazyLoad\n* @param {bool} settings2 => [OPTIONAL] container\n*\n*/\nconst jsLazyLoadImages = (asyncImg = true, asyncBg = true, container = document) => {\n if (!asyncImg && !asyncBg)\n return false;\n let lazyImgs = [];\n let lazyImagesBG = [];\n let lazyImages = [];\n let active = false;\n const jsLazyLoad = () => {\n // Puts the contents of the querySelectorAll into the array.\n lazyImgs = asyncImg ? [].slice.call(container.querySelectorAll(\"[data-src]:not(.notLazy):not([js-done])\")) : lazyImgs;\n lazyImagesBG = asyncBg ? [].slice.call(container.querySelectorAll(\"[data-bg]:not([js-done])\")) : lazyImagesBG;\n // filter out images inside '.notLazy' containers\n const notLazyNodes = [...container.querySelectorAll('.notLazy:not(img)')];\n lazyImgs.forEach(img => {\n if (notLazyNodes.some(node => node.contains(img)))\n lazyImgs.splice(img);\n });\n //notLazyNodes\n lazyImages = lazyImgs.concat(lazyImagesBG);\n active = false;\n if (active === false) {\n active = true;\n lazyImages.forEach(lazyImage => {\n if ((lazyImage.getBoundingClientRect().top - window.innerHeight / 2 <= window.innerHeight &&\n lazyImage.getBoundingClientRect().bottom + window.innerHeight / 2 >= 0) &&\n getComputedStyle(lazyImage).display !== \"none\") {\n setTimeout(() => {\n if (lazyImage.getAttribute(\"data-bg\")) {\n resizeBg([lazyImage]);\n }\n else {\n lazyImage.src = lazyImage.getAttribute(\"data-src\");\n }\n lazyImage.setAttribute(\"js-done\", \"1\");\n lazyImages = lazyImages.filter(image => image !== lazyImage);\n if (lazyImages.length === 0) {\n document.removeEventListener(\"scroll\", jsLazyLoad);\n }\n }, 300);\n }\n });\n active = false;\n }\n };\n //clear old events\n document.removeEventListener(\"scroll\", jsLazyLoad);\n window.removeEventListener('resize', debouncer(() => {\n resizeBg();\n }, 150));\n window.removeEventListener('orientationchange', debouncer(() => {\n resizeBg();\n }, 150));\n jsLazyLoad();\n document.addEventListener(\"scroll\", jsLazyLoad);\n window.addEventListener('resize', debouncer(() => {\n resizeBg();\n }, 150));\n window.addEventListener('orientationchange', debouncer(() => {\n resizeBg();\n }, 150));\n};\nconst resizeBg = (lazyImage) => {\n const lazyImagesBG = lazyImage ? lazyImage : [].slice.call(document.querySelectorAll(\"[data-bg]\"));\n lazyImagesBG.forEach(lazyImage => {\n let url = \"\";\n if (window.innerWidth < 1200) {\n if (window.innerWidth > 767) {\n url = \"data-bg768\";\n }\n else {\n url = \"data-bg480\";\n }\n }\n else {\n url = \"data-bg\";\n }\n const backgroundImage = lazyImage.getAttribute(url) || lazyImage.getAttribute(\"data-bg\");\n lazyImage.style.backgroundImage = `url('${backgroundImage}')`;\n });\n};\n","/**\n * In the page there should be one or more listings [data-container-loadmore] with the functionality of the load more [data-btn-loadmore];\n * At the click of the load more button of the listing referenced by its ID, it executes a fetch call in GET\n * The resolution of the PROMISE of the fetch transforms the data into a text with the PROMISE Text()\n * The resolution of the PROMISE Text() gives us the result NOT parsed.\n * At this point we will instantiate a DOM Parser, so that it allows us to parse our result in text / html\n * We take only the elements we want [data-to-append]\n * We verify that the listing to which we will hang the elements received is related to the Load more button clicked\n * I append the elements to the listing.\n *\n * At this point, the button will update with the new href\n * If it doesn't have an href, the button node will be removed\n *\n * */\nconst initLoadMore = () => {\n const buttonsArray = document.querySelectorAll(\"[data-btn-loadmore]\");\n const dataContainersArray = document.querySelectorAll(\"[data-container-loadmore]\");\n if (buttonsArray && dataContainersArray && buttonsArray.length > 0 && dataContainersArray.length > 0) {\n // Put unique id on data container\n dataContainersArray.forEach((dataContainer, index) => {\n dataContainer.setAttribute(\"data-container-loadmore\", index.toString());\n });\n buttonsArray.forEach((button, index) => {\n //Put unique id on data button load more\n button.setAttribute(\"data-btn-loadmore\", index.toString());\n button.addEventListener(\"click\", (event) => {\n event.preventDefault();\n //start loading animation\n button.classList.add(\"loading\");\n const nextPageUrl = button.href;\n fetch(`${nextPageUrl}&partial=1`)\n .then(data => {\n //convert the response into plain text\n data.text()\n //resolve the promise\n .then((result) => {\n // Initialize the DOM parser\n const parser = new DOMParser();\n // Parse the text and convert it into HTML\n const parsedHTML = parser.parseFromString(result, \"text/html\");\n //get only the cards\n const cardsToAppendArray = parsedHTML.querySelectorAll(\"[data-to-append]\");\n //append them to the deck\n const loadMoreButtonId = button.getAttribute(\"data-btn-loadmore\");\n const dataContainer = document.querySelector(`[data-container-loadmore='${loadMoreButtonId}']`);\n cardsToAppendArray.forEach(card => {\n dataContainer.append(card);\n });\n //add animation\n initCardsAnimation(cardsAnimationTiming, cardsToAppendArray);\n //update loadmore link or hide button\n const updatedButton = parsedHTML.querySelector(\"[data-btn-loadmore]\");\n if (updatedButton != null) {\n button.href = updatedButton.href;\n //stop loading animation\n button.classList.remove(\"loading\");\n }\n else {\n //remove load more button\n button.remove();\n }\n });\n });\n });\n });\n }\n};\n","const initModalResponse = () => {\n const modal = document.querySelector(\".modal\");\n const closeModal = document.querySelector(\".modal .close-icon\");\n if (modal && closeModal) {\n const url = new URL(window.location.href);\n const modalResponse = url.searchParams.get(\"contact\") === \"1\";\n const errorResponse = url.searchParams.get(\"contact\") === \"0\";\n if (modalResponse || errorResponse) {\n modal.classList.remove('not-visible');\n if (modalResponse) {\n modal.classList.add('success');\n }\n if (errorResponse) {\n modal.classList.add('error');\n }\n }\n closeModal.addEventListener('click', () => {\n modal.classList.add('not-visible');\n });\n }\n};\n","(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\")\n return;\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n }\n else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\", \"typeError\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\", \"typeError\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name);\n }\n})(HTMLFormElement.prototype);\nconst isRecaptchaEnabled = true;\nconst initRecaptcha = () => {\n if (isRecaptchaEnabled && typeof grecaptcha == 'undefined') {\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://www.google.com/recaptcha/api.js`;\n document.head.appendChild(script);\n contactForms && contactForms.length > 0 && contactForms.forEach((form, i) => {\n const recaptchaContainer = form.querySelector(\"[data-recaptcha]\");\n //check that i have a recaptcha to render and that is not altready created\n if (recaptchaContainer && form.getAttribute(\"g-recaptcha-rendered\") === null) {\n form.setAttribute(\"g-recaptcha-rendered\", \"true\");\n setTimeout(() => {\n grecaptcha.ready(() => {\n const widgetId = grecaptcha.render(recaptchaContainer, {\n 'sitekey': '6Ld63QofAAAAAGEk92Vxs0-cj6fyJ4YcAX4YC4BD',\n 'size': 'invisible',\n 'tabindex': i,\n 'callback': submitAfterCaptcha\n });\n form.setAttribute(\"g-recaptcha-index\", widgetId.toString());\n return true;\n });\n }, 2000);\n }\n });\n }\n return false;\n};\nconst submitAfterCaptcha = (token) => {\n const formToSubmit = document.querySelector(`form[data-active-form='true']`);\n const recaptchaTextarea = formToSubmit.querySelector(\".g-recaptcha-response\");\n recaptchaTextarea.value = token;\n formToSubmit.requestSubmit();\n};\n","/*\n * Put data-shopify-gtm on container and data-custom-cta on the first CTA container of shopify btn.\n * If you want add a view item event on GTM you need to insert the \"view\" value into data-shopify-gtm attribute.\n*/\nconst shopifyGTMEvent = () => {\n const shopifyContainerList = document.querySelectorAll(\"[data-shopify-gtm]\");\n if (shopifyContainerList && shopifyContainerList.length > 0) {\n shopifyContainerList.forEach((shopifyContainer) => {\n const buttonContainer = shopifyContainer.querySelector(\"[data-custom-cta]\");\n buttonContainer.classList.add(\"disabled\");\n setTimeout(() => {\n buttonContainer.classList.remove(\"disabled\");\n const iframe = buttonContainer.querySelector(\"iframe\");\n if (iframe) {\n const buttonIframe = iframe.contentWindow.document.querySelector('html body button.shopify-buy__btn');\n buttonIframe.addEventListener(\"click\", () => {\n setTimeout(() => {\n const iframeContainer = document.querySelector(\".shopify-buy-modal-wrapper\");\n const iframeModal = iframeContainer.querySelector(\"iframe\");\n if (iframeModal) {\n let title = iframeModal.contentWindow.document.querySelector('.shopify-buy__product__title').innerHTML;\n let selectedOption = iframeModal.contentWindow.document.querySelector('.shopify-buy__option-select__select option[selected]');\n let variant = selectedOption ? selectedOption.getAttribute(\"value\") : \"\";\n let quantity = parseInt(iframeModal.contentWindow.document.querySelector('.shopify-buy__quantity').getAttribute(\"value\"));\n let price = parseFloat(iframeModal.contentWindow.document.querySelector('.shopify-buy__product__actual-price').innerHTML.replace(\"€\", \"\").replace(\".\", \"\").replace(\",\", \".\"));\n const button = iframeModal.contentWindow.document.querySelector('.shopify-buy__btn.shopify-buy__beside-quantity[data-element=\"product.button\"]');\n if (shopifyContainer.getAttribute(\"data-shopify-gtm\") === \"view\") {\n //@ts-ignore - dataLayer comes from GTM\n dataLayer.push({ ecommerce: null });\n //@ts-ignore - dataLayer comes from GTM\n dataLayer.push({\n event: \"view_item\",\n ecommerce: {\n currency: \"EUR\",\n value: price * quantity,\n items: [\n {\n item_name: title,\n item_variant: variant,\n price: price,\n quantity: quantity\n }\n ]\n }\n });\n }\n button.addEventListener(\"click\", () => {\n title = iframeModal.contentWindow.document.querySelector('.shopify-buy__product__title').innerHTML;\n selectedOption = iframeModal.contentWindow.document.querySelector('.shopify-buy__option-select__select option[selected]');\n variant = selectedOption ? selectedOption.getAttribute(\"value\") : \"\";\n quantity = parseInt(iframeModal.contentWindow.document.querySelector('.shopify-buy__quantity').getAttribute(\"value\"));\n price = parseFloat(iframeModal.contentWindow.document.querySelector('.shopify-buy__product__actual-price').innerHTML.replace(\"€\", \"\").replace(\".\", \"\").replace(\",\", \".\"));\n //@ts-ignore - dataLayer comes from GTM\n dataLayer.push({ ecommerce: null });\n //@ts-ignore - dataLayer comes from GTM\n dataLayer.push({\n event: \"add_to_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: price * quantity,\n items: [\n {\n item_name: title,\n item_variant: variant,\n price: price,\n quantity: quantity\n }\n ]\n }\n });\n });\n }\n }, 1000);\n });\n }\n }, 3000);\n });\n }\n};\n","const initProductColorsWidget = () => {\n const colorPickerElementsArray = document.querySelectorAll(\"[data-color-picker-element]\");\n const productColorElementsArray = document.querySelectorAll(\"[data-product-color-component]\");\n const backGroundImagesArray = document.querySelectorAll(\"[data-background-image]\");\n colorPickerElementsArray && colorPickerElementsArray.forEach((element) => {\n element.addEventListener(\"click\", () => {\n if (!element.classList.contains(\"active\")) {\n const selectedColor = element.getAttribute(\"data-color-picker-element\");\n //1. COLOR PICKER\n //remove class active for all elements\n colorPickerElementsArray.forEach((notClickedElement) => notClickedElement.classList.remove(\"active\"));\n ///set clicked element as active\n element.classList.add(\"active\");\n //2. PRODUCT COLOR COMPONENT\n const selectedProductColor = document.querySelector(`[data-product-color-component=\"${selectedColor}\"]`);\n productColorElementsArray && productColorElementsArray.forEach((notSelectedElement) => {\n //add class \"was-active\" to the previous color\n notSelectedElement.classList.contains(\"active\") ? notSelectedElement.classList.add(\"was-active\") : null;\n //remove class active from all other active elements\n notSelectedElement.classList.remove(\"active\");\n });\n //set selected product as active\n selectedProductColor.classList.add(\"active\");\n //3. BACKGROUND\n const selectedBackgroundImage = document.querySelector(`[data-background-image=\"${selectedColor}\"]`);\n //remove class active for all elements\n backGroundImagesArray && backGroundImagesArray.forEach((notSelectedImage) => {\n //add class \"was-active\" to the previous background\n notSelectedImage.classList.contains(\"active\") ? notSelectedImage.classList.add(\"was-active\") : null;\n //remove class active from all other active elements\n notSelectedImage.classList.remove(\"active\");\n });\n //set selected product as active\n selectedBackgroundImage.classList.add(\"active\");\n //when element is set, remove \"was active\" class\n setTimeout(() => {\n const wasActiveElementsList = document.querySelectorAll(\".was-active\");\n wasActiveElementsList.forEach((wasActiveElement) => {\n wasActiveElement.classList.remove(\"was-active\");\n });\n }, 1000);\n }\n });\n });\n};\n","const initRelatedPreparationsWidget = () => {\n const flickitySlidersArray = initCarousel(\"[data-related-preparations-widget-slider] [data-slider]\", cellAlign.left, true, 5000, true, false, false);\n flickitySlidersArray && flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-related-preparations-widget-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-related-preparations-widget-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n });\n};\n","const initRelatedUsageAreasWidget = () => {\n const flickitySlidersArray = initCarousel(\"[data-related-usage-areas-widget-slider] [data-slider]\", cellAlign.left, true, 5000, true, false, false);\n flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-related-usage-areas-widget-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-related-usage-areas-widget-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n });\n};\n","const initRotatingHeadingComponent = () => {\n let flickitySlidersArray;\n if (window.innerWidth <= 819) {\n //if mobile, do something different ( if needed )\n flickitySlidersArray = initCarousel(\"[data-rotating-heading-component-slider] [data-slider]\", cellAlign.center, true, false, true, false, true);\n }\n else {\n flickitySlidersArray = initCarousel(\"[data-rotating-heading-component-slider] [data-slider]\", cellAlign.center, true, false, true, false, false);\n }\n flickitySlidersArray.forEach(flickitySlider => {\n const prevButton = flickitySlider.slider.closest(\"[data-rotating-heading-component-slider]\").querySelector(\"[data-prev-button]\");\n //custom binding to prev button\n prevButton.addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n //custom binding to next button\n const nextButton = flickitySlider.slider.closest(\"[data-rotating-heading-component-slider]\").querySelector(\"[data-next-button]\");\n nextButton.addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n const addPreviousAndNextClassesToSlides = () => {\n const slidesArray = flickitySlider.slider.querySelectorAll(\"[data-slide]\");\n // remove all \"previous-slide\" classes\n slidesArray.forEach(slide => slide.classList.remove(\"previous-slide\"));\n //set previous slide class\n if (flickitySlider.selectedElement.previousElementSibling == null) {\n const previousElement = slidesArray[flickitySlider.cells.length - 1];\n previousElement.classList.add(\"previous-slide\");\n }\n else {\n flickitySlider.selectedElement.previousElementSibling.classList.add(\"previous-slide\");\n }\n // remove all \"next-slide\" classes\n slidesArray.forEach(slide => slide.classList.remove(\"next-slide\"));\n if (flickitySlider.selectedElement.nextSibling == null) {\n const nextElement = slidesArray[0];\n nextElement.classList.add(\"next-slide\");\n }\n else {\n flickitySlider.selectedElement.nextElementSibling.classList.add(\"next-slide\");\n }\n };\n flickitySlider.on('change', addPreviousAndNextClassesToSlides);\n //first run only\n addPreviousAndNextClassesToSlides();\n });\n};\n","const initTextImageExtendedBlockReadMore = () => {\n const textTogglerNodeList = document.querySelectorAll(\"[data-text-toggler]\");\n textTogglerNodeList.forEach((textToggler) => {\n textToggler.addEventListener(\"click\", () => {\n textToggler.classList.toggle(\"active\");\n textToggler.closest(\"[data-text-container]\").querySelectorAll(\"[data-text-to-show]\").forEach((textToShow) => {\n textToShow.classList.toggle(\"active\");\n });\n });\n });\n};\n","const initVideo = () => {\n const video = document.querySelector(\"[data-video]\");\n if (video) {\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://player.vimeo.com/api/player.js`;\n document.head.appendChild(script);\n }\n};\n"]}