{"version":3,"sources":["webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/flickity/js/lazyload.js"],"names":["window","factory","matchesSelector","utils","a","b","prop","num","div","arraySlice","Array","prototype","slice","makeArray","obj","isArray","length","call","removeFrom","ary","index","indexOf","splice","getParent","elem","selector","parentNode","document","body","getQueryElement","querySelector","handleEvent","event","method","type","this","filterFindElements","elems","ffElems","forEach","HTMLElement","push","childElems","querySelectorAll","i","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","args","arguments","_this","setTimeout","apply","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","attr","getAttribute","JSON","parse","error","className","instance","data","EvEmitter","getSize","Cell","Slide","animatePrototype","getComputedStyle","moveElements","toElem","appendChild","shift","GUID","instances","Flickity","element","queryElement","flickityGUID","option","$element","extend","constructor","defaults","_create","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","percentPosition","resize","selectedAttraction","setGallerySize","createMethods","proto","id","guid","eventName","selectedIndex","restingFrames","x","velocity","originSide","rightToLeft","viewport","createElement","_createSlider","watchCSS","on","listener","activate","opts","isActive","classList","add","_filterFindCellElements","children","slider","reloadCells","tabIndex","emitEvent","selectInitialIndex","isInitActivated","dispatchEvent","style","cellSelector","cells","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","slides","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","size","outerWidth","len","cell","setPosition","Math","max","outerHeight","slideableWidth","updateSlides","_containSlides","slidesWidth","target","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","updateTarget","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","innerWidth","_init","reposition","positionSliderAtSelected","setCellAlign","cursorPosition","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","selectedSlide","wrapAround","_unshiftCells","beforeShiftCells","afterShiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","select","isWrap","isInstant","_wrapSelect","modulo","prevIndex","startAnimation","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","value","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","undefined","cellElems","slideIndex","uiChange","childUIPointerDown","preventDefault","focus","onresize","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","remove","destroy","removeChild","removeAttribute","removeEventListener","allOff","removeData","bridget","setJQuery","jq","events","_events","listeners","once","onceEvents","_onceEvents","off","onceListeners","Unipointer","Object","create","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","getStyleSize","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","width","padding","borderStyle","borderWidth","boxSizing","documentElement","round","setup","nodeType","display","innerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","matchesMethod","ElemProto","Element","matches","prefixes","parent","position","setAttribute","side","renderPosition","setDefaultTarget","marginProperty","getPositionValue","wrapShift","isOriginLeft","lastCell","lastMargin","isAnimating","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","translateX","transform","firstSlide","positionX","progress","isFreeScrolling","beforeGap","_shiftCells","afterGap","gap","cellShift","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","Unidragger","draggable","dragThreshold","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","bindHandles","unbindHandles","bindDrag","unbindDrag","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","focusNodes","INPUT","TEXTAREA","SELECT","nodeName","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","isTouchScrolling","_dragPointerUp","dragStart","dragStartPosition","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","d","md","isWrapAround","wrap","floor","staticClick","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","_bindHandles","touchAction","handle","cursorNodes","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","isClickType","isOkay","focused","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","bind","onclick","isIgnoringMouseUp","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","handleClick","onClick","setDots","addDots","removeDots","count","fragment","createDocumentFragment","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","src","srcset","onload","complete","onerror"],"mappings":"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","file":"js/vendors~mediaSlideshow~selectedProjects.3a1e0201e9cbee15f659.js","sourcesContent":["/**\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","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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'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 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\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 or NodeList or HTMLElement} elems\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\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 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 = 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 or Number} elem\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\n * @returns {Flickity.Cell} item\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\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\n * @returns {Flickit.Cell} 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, Selector String, or Number} selector\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 if ( !this.isActive ) {\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#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} elem\n * @returns {Flickity}\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","/**\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","/*!\n * Unipointer v2.3.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 ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\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 * Flickity v2.2.1\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-2019 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 /*jshint strict: false*/\n return Flickity;\n});\n","/*!\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","/**\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 /* jshint strict: false */\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};\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};\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 side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\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} factor - 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","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 = 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 tranforms 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 if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\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","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\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 // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\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 = 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( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\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\n * @param {Integer} index - slide index\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 * Unidragger v2.3.1\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","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 /* jshint strict: false */\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\n * @param {Integer} index\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\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 */\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","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 */\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"],"sourceRoot":""}