{"version":3,"sources":["webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./src/components/app-adspace.vue?f2e9","webpack:///./node_modules/vue-flickity/src/flickity.vue?3ac5","webpack:///node_modules/vue-flickity/src/flickity.vue","webpack:///./node_modules/vue-flickity/src/flickity.vue?a1fa","webpack:///./node_modules/vue-flickity/src/flickity.vue","webpack:///src/components/app-adspace.vue","webpack:///./src/components/app-adspace.vue?fef8","webpack:///./src/components/app-adspace.vue","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/flickity/dist/flickity.css?cfaa","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/unidragger/unidragger.js"],"names":["window","factory","utils","proto","this","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","_this","requestAnimationFrame","options","wrapAround","cells","length","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","slider","style","transform","firstSlide","slides","positionX","target","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","Math","round","size","innerWidth","isResting","isPointerDown","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","i","cell","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragVelocity","dragX","dragForce","applyForce","dragDown","distance","selectedAttraction","Flickity","Unipointer","PageDots","parent","_create","prototype","Object","create","holder","document","createElement","className","dots","handleClick","onClick","bind","on","childUIPointerDown","activate","setDots","addEventListener","bindStartEvent","element","appendChild","deactivate","removeEventListener","unbindStartEvent","removeChild","delta","addDots","removeDots","count","fragment","createDocumentFragment","newDots","max","dot","setAttribute","push","concat","splice","forEach","updateSelected","selectedDot","removeAttribute","onTap","event","nodeName","uiChange","index","indexOf","select","destroy","allOff","extend","defaults","pageDots","createMethods","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","global","EvEmitter","eventName","listener","events","_events","listeners","once","onceEvents","_onceEvents","onceListeners","off","emitEvent","args","slice","isOnce","apply","getSize","Cell","Slide","animatePrototype","jQuery","getComputedStyle","console","moveElements","elems","toElem","makeArray","GUID","instances","queryElement","getQueryElement","flickityGUID","instance","option","$element","constructor","error","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","id","guid","originSide","viewport","_createSlider","watchCSS","method","opts","isActive","classList","add","cellElems","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","len","setPosition","outerHeight","updateSlides","_containSlides","slide","isOriginLeft","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","call","updateTarget","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","match","percent","_init","reposition","positionSliderAtSelected","setCellAlign","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","_unshiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","type","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","isWrapping","wrapIndex","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","value","getCellSlideIndex","getCell","elem","getCells","getParentCell","getParent","getAdjacentCellElements","adjCount","undefined","slideIndex","selector","querySelector","preventDefault","focus","onresize","debounceMethod","isDragging","watchOption","afterContent","content","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","remove","removeData","data","htmlInit","bridget","setJQuery","jq","render","_vm","_h","$createElement","_c","_self","isReady","hasData","ref","class","attrs","flickityOptions","_l","image","key","code","staticClass","linkToUrl","linkTitleText","imgSrc","imageAltText","_e","staticRenderFns","_t","props","mounted","init","beforeDestroy","$flickity","methods","$el","$emit","flickity","isWrapped","prepend","elements","append","insert","playPlayer","stopPlayer","pausePlayer","unpausePlayer","rerender","disableDrag","draggable","updateDraggable","enableDrag","component","name","components","default","validator","adImages","images","imageUrl","linkUrl","prevNextButtons","autoPlay","fullScreen","getStyleSize","num","parseFloat","isValid","isNaN","noop","logError","message","measurements","measurementsLength","getZeroSize","width","innerHeight","measurement","getStyle","isBoxSizeOuter","isSetup","setup","div","padding","borderStyle","borderWidth","boxSizing","body","documentElement","nodeType","display","offsetWidth","offsetHeight","isBorderBox","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","Unidragger","dragThreshold","_touchActionValue","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","handles","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","pointer","isOkay","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","y","isFocusNode","isTouchStart","isTouchPointer","pointerType","hasDragStarted","moveVector","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","dragStart","dragStartPosition","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","floor","staticClick","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","matchesSelector","a","b","prop","arraySlice","Array","obj","isArray","isArrayLike","removeFrom","ary","parentNode","handleEvent","ffElems","HTMLElement","childElems","querySelectorAll","_class","methodName","threshold","timeoutName","timeout","clearTimeout","arguments","setTimeout","docReady","callback","readyState","toDashed","str","replace","$1","$2","toLowerCase","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","attr","getAttribute","JSON","parse","lastCell","lastMargin","getCellLazyImages","lazyloadAttr","srcAttr","srcsetAttr","lazySelector","imgs","LazyLoader","img","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","src","srcset","onload","complete","onerror","cellSizeChange","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","isPageHidden","hidden","tick","time","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","deactivatePlayer","onmouseenter","onmouseleave","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","minCellIndex","changedCellIndex","isPositioningSlider","prevSelectedElem","matchesMethod","ElemProto","Element","matches","prefixes","prefix","side","renderPosition","setDefaultTarget","marginProperty","sideOffset","adjustedX","svgURI","PrevNextButton","getArrowMovements","shape","x0","x1","y1","x2","y2","x3","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","arrowShape","onclick","enable","disabled","lastIndex","boundIndex","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","_bindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerReset","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","_bindHandles","touchAction","handle","cursorNodes","OPTION","clickTypes","radio","checkbox","submit","file","isCursorNode","isClickType","focused","canBlur","blur","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp"],"mappings":"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","file":"js/chunk-495b6dda.2df28264.js","sourcesContent":["// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.isReady && _vm.hasData)?_c('flickity',{ref:\"flickity\",class:(\"carousel--\" + _vm.size + \" mx-auto\"),attrs:{\"options\":_vm.flickityOptions}},_vm._l((_vm.images),function(image){return _c('div',{key:'adspace-' + _vm.code + '-' + image.id,staticClass:\"carousel__slides__cell\",class:(\"slide--\" + _vm.size)},[_c('a',{staticClass:\"mx-auto my-4 overflow-hidden ad-space\",class:(\"ad-space--\" + _vm.size),attrs:{\"href\":image.linkToUrl,\"rel\":\"noopener\",\"target\":\"_blank\",\"title\":image.linkTitleText}},[_c('img',{staticClass:\"position-absolute\",attrs:{\"loading\":\"lazy\",\"src\":image.imgSrc,\"alt\":image.imageAltText}})])])}),0):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n
\n\n\n\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./flickity.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./flickity.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./flickity.vue?vue&type=template&id=42695eab&\"\nimport script from \"./flickity.vue?vue&type=script&lang=js&\"\nexport * from \"./flickity.vue?vue&type=script&lang=js&\"\nimport style0 from \"flickity/dist/flickity.css?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app-adspace.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app-adspace.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./app-adspace.vue?vue&type=template&id=057c06aa&\"\nimport script from \"./app-adspace.vue?vue&type=script&lang=js&\"\nexport * from \"./app-adspace.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!./flickity.css?vue&type=style&index=0&lang=css&\"","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n"],"sourceRoot":""}