{"version":3,"sources":["flickity/flickity.pkgd.js","main.js","Card/card.component.js","partials/_responsive-carousel.js","ContactForm/contactForm.widget.js","HeadingsSlider/headings-slider.widget.js","LanguageSelector/language-selector.component.js","MegaMenu/mega-menu.component.js","PagesSlider/pages-slider.widget.js","partials/_debouncer.js","partials/_filter.js","partials/_form-validation.js","partials/_initAos.js","partials/_iubenda.js","partials/_lazy-loading-image.js","partials/_load-more.js","partials/_modal-response.js","partials/_recaptcha.js","partials/_toggler.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","initFormFieldsToggle","initRecaptcha","initFormsValidation","initModalResponse","initIubendaProof","initLoadMore","initFilter","initVideo","initPagesSliderWidget","initToggler","initAos","initHeadingsSliderWidget","simpleTextWidget","h2Element","aElement","componentFunction","test","contactFormsArray","form","togglerArray","elementsToBeToggledArray","toggler","toggleFormFields","array","selectToggler","split","includes","HTMLInputElement","HTMLSelectElement","input","initCarousel","initSwitchLanguage","langIcon","dropdownMenuLanguage","contains","initMegaMenu","megaMenuContainer","megaMenuTogglerContainer","toggle","debouncer","func","timeoutId","_this2","_len","_key","filterInput","itemsToFilterArray","itemsTitleToFilterArray","e","inputText","innerText","isFormValid","contactForms","submitButton","singleForm","sessionStorage","modalForm","parentElement","contactFormRequiredElements","setItem","temporaryDisableButton","checkFormValidity","isRecaptchaEnabled","grecaptcha","execute","arrayOfRequiredElements","errorCounter","item","isValidItem","label","hasAttribute","checkValidity","AOS","init","offset","delay","duration","easing","mirror","anchorPlacement","html","btoa","encodeURI","innerHTML","textArea","createTextNode","name","jsLazyLoadImages","asyncImg","asyncBg","container","jsLazyLoad","lazyImgs","lazyImagesBG","notLazyNodes","_toConsumableArray","some","node","active","lazyImage","getBoundingClientRect","top","bottom","resizeBg","filter","buttonsArray","dataContainersArray","dataContainer","toString","clickedButton","HTMLAnchorElement","nextPageUrl","href","fetch","then","text","result","parsedHTML","DOMParser","parseFromString","cardsToAppendArray","loadMoreButtonId","updatedButton","card","modalResponse","success","modal","closeModal","URL","location","searchParams","has","get","raise","errorConstructor","requestSubmit","submitter","TypeError","DOMException","click","HTMLFormElement","script","async","head","recaptchaContainer","ready","widgetId","render","sitekey","tabindex","submitAfterCaptcha","token","formToSubmit","sliderSelector","showArrows","showDots","createdSlidersArray","arrayCarousel","carouselContainer","flickitySlider","warn"],"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","/*\n * MAIN SCRIPT\n * DON'T WRITE FUNCTION HERE, ONLY CALL THEM\n *\n * **/\ndocument.addEventListener('DOMContentLoaded', (event) => {\n initFormFieldsToggle();\n initRecaptcha();\n initFormsValidation();\n initModalResponse();\n initIubendaProof();\n initLoadMore();\n initFilter();\n initVideo();\n initPagesSliderWidget();\n initToggler();\n initAos();\n initHeadingsSliderWidget();\n const simpleTextWidgetArray = document.querySelectorAll(\".text-simple-widget\");\n simpleTextWidgetArray.forEach(simpleTextWidget => {\n if (simpleTextWidget) {\n const h2Element = simpleTextWidget.querySelector(\"h2\");\n const aElement = simpleTextWidget.querySelector(\"a.cta\");\n if (h2Element && aElement && simpleTextWidget.children.length === 2) {\n simpleTextWidget.classList.add(\"inline-elements\");\n }\n }\n });\n});\n","const componentFunction = (test) => {\n return test;\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 if (arraySliderItems.length > 1) {\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: false\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 console.warn(\"Slider non inizializzato per mancanza di slide. Hai aggiunto [data-slide] alla singola slide?\");\n }\n });\n }\n }\n return createdSlidersArray;\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 initHeadingsSliderWidget = () => {\n const flickitySlidersArray = initCarousel(\"[data-headings-slider] [data-slider]\", cellAlign.center, true, false, true, true, false);\n //flickitySlidersArray && flickitySlidersArray.forEach(flickitySlider => {\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 initMegaMenu = () => {\n const megaMenuContainer = document.querySelector(\"[data-mega-menu-container]\");\n const megaMenuTogglerContainer = document.querySelector(\"[data-menu-toggler-container]\");\n const body = document.querySelector(\"body\");\n if (megaMenuContainer && megaMenuTogglerContainer) {\n megaMenuTogglerContainer.addEventListener(\"click\", () => {\n megaMenuContainer.classList.toggle(\"active\");\n megaMenuTogglerContainer.classList.toggle(\"active\");\n body.classList.toggle(\"no-scroll\");\n });\n }\n};\n","const initPagesSliderWidget = () => {\n if (document.querySelectorAll(\".category\").length == 0 || window.innerWidth <= 1024) {\n const flickitySlidersArray = initCarousel(\"[data-pages-slider] [data-slider]\", cellAlign.center, true, false, true, true, false);\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(\".contact-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 initAos = () => {\n // @ts-ignore\n AOS.init({\n // Settings that can be overridden on per-element basis, by `data-aos-*` attributes:\n offset: 200,\n delay: 5,\n duration: 400,\n easing: 'ease',\n once: true,\n mirror: false,\n anchorPlacement: 'top-bottom', // defines which position of the element regarding to window should trigger the animation\n });\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 if (event.target instanceof HTMLAnchorElement) {\n const clickedButton = event.target;\n //start loading animation\n clickedButton.classList.add(\"loading\");\n const nextPageUrl = event.target.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 = clickedButton.getAttribute(\"data-btn-loadmore\");\n const dataContainer = document.querySelector(`[data-container-loadmore='${loadMoreButtonId}']`);\n cardsToAppendArray.forEach(card => {\n dataContainer.append(card);\n });\n //update loadmore link or hide button\n const updatedButton = parsedHTML.querySelector(\"[data-btn-loadmore]\");\n if (updatedButton != null) {\n clickedButton.href = updatedButton.href;\n //stop loading animation\n clickedButton.classList.remove(\"loading\");\n }\n else {\n //remove load more button\n clickedButton.remove();\n }\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.has(\"contact\");\n const success = url.searchParams.get(\"contact\") === \"1\" && url.searchParams.get(\"captchaerror\") === \"0\";\n if (modalResponse) {\n if (success) {\n modal.classList.remove('not-visible');\n modal.classList.add('success');\n }\n else {\n modal.classList.remove('not-visible');\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': '6Lcp6B4gAAAAAGQMX4MAoDt_Xkby8J9hoPTOctPg',\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","//IF YOU WANT TO INSERT A NEW \"data-to-be-toggled\", THIS CODE HANDLES ONLY SINGLE WORDS\n//SO MAKE THE VALUE OF THE OPTION AND THE ATTR BE JUST ONE WORD\n//EXAMPLE: NEWTYPE IS OK, NEW-TYPE WILL CAUSE ERRORS\n//IF YOU WANT AN ELEMENT TO BE AVAILABLE FOR MORE THAN ONE TYPE OF OPTION\n//THEN SEPARE THE TYPES WITH \";\" LIKE THIS \"data-to-be-toggled=\"filling;processing\"\nconst initToggler = () => {\n const elementsToBeToggledArray = document.querySelectorAll(\"[data-to-be-toggled]\");\n const togglersArray = document.querySelectorAll(\"[data-toggler]\");\n togglersArray.forEach(toggler => {\n toggler.addEventListener(\"click\", () => {\n elementsToBeToggledArray.forEach((element) => {\n if (element.getAttribute(\"data-to-be-toggled\").split(\";\").includes(toggler.getAttribute(\"data-toggler\").toLowerCase())) {\n element.classList.toggle(\"active\");\n }\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"]}