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