{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./assets/scripts/modules/Navigation.js","webpack:///./assets/scripts/modules/MobileNavigation.js","webpack:///./assets/scripts/util/camelCase.js","webpack:///./assets/scripts/util/Router.js","webpack:///./assets/scripts/theme/cookies.js","webpack:///./assets/scripts/theme/alert-bar.js","webpack:///./assets/scripts/theme/max-width-iframe.js","webpack:///./assets/scripts/theme/colab-mobile-menu.js","webpack:///./assets/scripts/theme/scroll-transition.js","webpack:///./assets/scripts/theme.js","webpack:///./assets/scripts/routes/common.js","webpack:///./assets/scripts/theme/gallery-slides.js","webpack:///./assets/scripts/theme/select-change-location.js","webpack:///./assets/scripts/theme/testimonials-slides.js","webpack:///./assets/scripts/theme/home.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///external \"jQuery\"","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","factory","EvEmitter","Unipointer","proto","bindStartEvent","elem","this","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","undefined","startEvent","PointerEvent","handleEvent","event","method","type","getTouch","touches","length","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","emitEvent","postStartEvents","mousedown","touchstart","pointerdown","events","forEach","eventName","addEventListener","_boundPointerEvents","_unbindPostStartEvents","removeEventListener","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","x","pageX","y","pageY","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","style","okayPointerDown","pointerDownPointer","preventDefault","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","target","nodeName","isClickType","isOkay","focused","document","activeElement","blur","body","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","Math","abs","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","setTimeout","dragEnd","onclick","isIgnoringMouseUp","staticClick","utils","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","_this","requestAnimationFrame","options","wrapAround","cells","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","slider","transform","firstSlide","slides","positionX","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cell","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Flickity","PageDots","parent","_create","holder","createElement","className","dots","handleClick","onClick","on","childUIPointerDown","activate","setDots","element","appendChild","deactivate","removeChild","delta","addDots","removeDots","count","fragment","createDocumentFragment","newDots","max","dot","setAttribute","push","concat","splice","updateSelected","selectedDot","removeAttribute","onTap","uiChange","index","indexOf","select","destroy","allOff","extend","defaults","pageDots","createMethods","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","listener","_events","listeners","once","onceEvents","_onceEvents","off","args","slice","onceListeners","apply","getSize","Cell","Slide","animatePrototype","jQuery","getComputedStyle","console","moveElements","elems","toElem","makeArray","GUID","instances","queryElement","getQueryElement","flickityGUID","instance","option","$element","constructor","error","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","id","guid","originSide","viewport","_createSlider","watchCSS","opts","isActive","classList","add","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","len","setPosition","outerHeight","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","updateTarget","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","match","percent","_init","reposition","positionSliderAtSelected","setCellAlign","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","_unshiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getParent","getAdjacentCellElements","adjCount","cellElems","slideIndex","selector","querySelector","focus","onresize","debounceMethod","content","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","remove","removeData","data","htmlInit","bridget","setJQuery","jq","topLevels","getElementsByClassName","init","_loop","openMenu","closeMenu","bindEvents","$","pushMenuSwitch","touchLengthMinX","touchLengthMaxY","pushMenuSelector","pushContentSelector","menuToggleSelector","menuCloseSelector","pushLevelForwardSelector","pushLevelBackSelector","touchStartX","touchStartY","touchEndX","touchEndY","hasClass","addClass","removeClass","originalEvent","touchRight","touchLengthX","touchLengthY","find","toggleClass","$thisLevel","closest","scrollTop","str","charAt","toLowerCase","replace","split","part","toUpperCase","join","Router","routes","_classCallCheck","route","arguments","arg","CustomEvent","bubbles","detail","fn","fire","camelCase","encode","encodeURIComponent","decodeURIComponent","cookie","set","maxage","date","Date","expires","setTime","getTime","path","domain","toUTCString","secure","_step","cookies","_iterator","_createForOfIteratorHelper","done","_cookie$split2","_slicedToArray","err","e","f","alertBar","cookieName","append","scope","selectors","setPadding","setMaxWidth","each","width","attr","padding","maxWidth","containerStyle","innerStyle","containerStyleAttribute","innerStyleAttribute","unwrap","wrap","buttonOpen","buttonClose","drawer","dropDown","querySelectorAll","ignoreTheseElements","prevWidth","closeNav","wasMouseClick","subnav","scroll","removeInert","setInert","openSubMenu","menuItem","closeSubMenu","contains","code","subMenu","parentNode","scrollDuration","scrollOffsetDisable","scrollOffset","scrollOffsetExclude","location","hash","history","pushState","title","pathname","search","scrollHash","$target","scrollPosition","windowOffsetTop","targetOffsetTop","floor","offset","top","includes","Navigation","MobileNavigation","common","finalize","ready","loadEvents","require","$gallerySlides","_createResizeClass","pauseAutoPlayOnHover","gallerySlides","maxWidthIFrame","mobileMenu","scrollTransition","href","String","performance","getEntriesByType","elementSelectedIndex","$testimonialSlides","autoPlay","testimonialsSlides","homeSlides","contentHeight","css","getStyleSize","num","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","div","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","draggable","dragThreshold","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","focusNodes","isTouchStart","isTouchPointer","pointerType","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","clickedCell","onscroll","scrollMoveX","scrollMoveY","matchesSelector","a","b","prop","arraySlice","Array","obj","isArray","removeFrom","ary","ffElems","HTMLElement","childElems","_class","methodName","threshold","timeoutName","timeout","clearTimeout","docReady","callback","readyState","toDashed","$1","$2","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","getAttribute","JSON","parse","isOriginLeft","lastCell","lastMargin","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","src","srcset","onload","complete","onerror","cellSizeChange","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","clear","stop","pause","unpause","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","prepend","minCellIndex","changedCellIndex","isPositioningSlider","prevSelectedElem","matchesMethod","ElemProto","Element","matches","prefixes","side","renderPosition","setDefaultTarget","marginProperty","sideOffset","adjustedX","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","shape","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons"],"mappings":"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","file":"/scripts/theme.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","const s = {\n topLevels: document.getElementsByClassName('menu-item-has-children'),\n}\n\nfunction init() {\n if (s.topLevels.length > 0) {\n bindEvents();\n }\n}\n\nfunction bindEvents() {\n for (let index = 0; index < s.topLevels.length; index++) {\n const element = s.topLevels[index];\n element.addEventListener('focusin', function() {openMenu(element)});\n element.addEventListener('focusout', function() {closeMenu(element)});\n }\n}\n\nfunction openMenu(element) {\n element.setAttribute('aria-expanded', 'true');\n}\n\nfunction closeMenu(element) {\n element.setAttribute('aria-expanded', 'false');\n}\n\nexport { init as default }\n","const $ = window.jQuery;\n\nlet s = {\n\tbody : $('body'),\n\tpush : $('.js-push'),\n\n\tpushMenuSwitch : 1140,\n\n\ttouchLengthMinX : 26,\n\ttouchLengthMaxY : 26,\n\n\t// pushMenu : $('.js-push__menu'),\n\tpushMenuSelector : '.js-push__menu',\n\n\t// pushContent : $('.js-push__content'),\n\tpushContentSelector : '.js-push__content',\n\n\t// menuToggle : $('.js-menu__toggle'),\n\tmenuToggleSelector : '.js-menu__toggle',\n\n\t// menuClose : $('.js-menu__close'),\n\tmenuCloseSelector : '.js-menu__close',\n\n\t// pushLevelForward : $('.js-menu__item--has-children > a'),\n\t// pushLevelForwardSelector : '.js-menu__item--has-children > a',\n\t// pushLevelForward : $('.js-push__menu .menu-item-has-children > a'),\n\tpushLevelForwardSelector : '.js-push__menu .menu-item-has-children > span',\n\n\t// pushLevelBack : $('.js-menu__back'),\n\tpushLevelBackSelector : '.js-menu__back',\n};\n\nfunction init() {\n\tevents();\n}\n\nfunction events() {\n\tvar touchStartX, touchStartY, touchEndX, touchEndY;\n\n\t$(window).on('load resize', function() {\n\n\t\tif (window.innerWidth < s.pushMenuSwitch && s.push.hasClass('push--active')) {\n\t\t\ts.body.addClass('no-scroll');\n\t\t} else {\n\t\t\ts.body.removeClass('no-scroll');\n\t\t}\n\t});\n\n\ts.body.on('touchmove', function(event) {\n\n\t\t/** iOS requires this to disable touch scroll */\n\t\t// if (s.body.hasClass('no-scroll')) {\n\t\t// \tevent.preventDefault();\n\t\t// \t// $('html, body').css({\n\t\t// \t// \t'height' : '100%',\n\t\t// \t// \t'overflow' : 'hidden',\n\t\t// \t// });\n\t\t// }\n\t});\n\n\ts.body.on('mousedown touchstart', s.pushMenuSelector, function(event) {\n\n\t\ttouchStartX = event.originalEvent.pageX;\n\t\ttouchStartY = event.originalEvent.pageY;\n\n\t})\n\t.on('mouseup touchend', s.pushMenuSelector, function(event) {\n\n\t\ttouchEndX = event.originalEvent.pageX;\n\t\ttouchEndY = event.originalEvent.pageY;\n\n\t\tconst touchUp = touchStartY < touchEndY;\n\t\tconst touchRight = touchStartX < touchEndX;\n\t\tconst touchDown = touchStartY > touchEndY;\n\t\tconst touchLeft = touchStartX > touchEndX;\n\n\t\tconst touchLengthX = Math.abs(touchStartX - touchEndX);\n\t\tconst touchLengthY = Math.abs(touchStartY - touchEndY);\n\n\t\t/** swipe back */\n\t\tif (touchRight && (touchLengthX > s.touchLengthMinX) && (touchLengthY < s.touchLengthMaxY)) { // swipe direction && threshold\n\t\t\ts.push.find('.push__level--current:not(.push__level--top)').find(s.pushLevelBackSelector).trigger('click');\n\t\t}\n\t\t// else if (touchLeft && (touchLengthX > s.touchLengthMinX) && (touchLengthY < s.touchLengthMaxY)) { // swipe direction && threshold\n\t\t// \t// do something\n\t\t// }\n\t});\n\n\ts.body.on('click', s.menuToggleSelector, function(event) {\n event.preventDefault();\n\n\t\ts.body.toggleClass('no-scroll');\n\t\ts.push.toggleClass('push--active');\n\t\ts.push.find('.push__level--top')\n\t\t\t.addClass('push__level--active')\n\t\t\t.addClass('push__level--current');\n\n\t}).on('click', s.pushLevelForwardSelector, function(event) {\n event.preventDefault();\n\n\t\ts.push.find('.push__level--current')\n\t\t\t.removeClass('push__level--current');\n\n\t\t$(this).next('.push__level')\n\t\t\t.addClass('push__level--active')\n\t\t\t.addClass('push__level--current');\n\n\t}).on('click', s.pushLevelBackSelector, function(event) {\n event.preventDefault();\n\n\t\tconst $thisLevel = $(this).closest('.push__level'); // this parent\n\n\t\t$thisLevel\n\t\t\t.removeClass('push__level--active')\n\t\t\t.removeClass('push__level--current')\n\t\t\t.closest('.push__level--active') // level parent\n\t\t\t.addClass('push__level--current');\n\n\t\t/** reset scroll */\n\t\tsetTimeout(function() {\n\t\t\t// $thisLevel.scrollTop(0);\n\t\t\t$thisLevel.find('.push__level-inner')\n\t\t\t\t.scrollTop(0);\n\t\t}, 400); // transition\n\n\t}).on('click', s.menuCloseSelector, function(event) {\n event.preventDefault();\n\n\t\ts.push.find('.push__level--top')\n\t\t\t.addClass('push__level--active')\n\t\t\t.addClass('push__level--current');\n\n\t\tsetTimeout(function() {\n\n\t\t\t/** reset scroll */\n\t\t\ts.push\n\t\t\t\t// .find('.push__level')\n\t\t\t\t// .scrollTop(0);\n\t\t\t\t.find('.push__level-inner')\n\t\t\t\t.scrollTop(0);\n\n\t\t\t/** reset active */\n\t\t\ts.push\n\t\t\t\t.find('.push__level--active')\n\t\t\t\t.removeClass('push__level--active');\n\t\t}, 400); // transition\n\t});\n}\n\nexport {init as default};\n","/**\n * the most terrible camelizer on the internet, guaranteed!\n * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD\n * @return {string} String converted to camel-case, e.g., camelCaseIsHard\n */\nexport default str => `${str.charAt(0).toLowerCase()}${str.replace(/[\\W_]/g, '|').split('|')\n .map(part => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join('')\n .slice(1)}`;\n","import camelCase from './camelCase';\n\n/**\n * DOM-based Routing\n *\n * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish\n *\n * The routing fires all common scripts, followed by the page specific scripts.\n * Add additional events for more control over timing e.g. a finalize event\n */\nclass Router {\n\n /**\n * Create a new Router\n * @param {Object} routes\n */\n constructor(routes) {\n this.routes = routes;\n }\n\n /**\n * Fire Router events\n * @param {string} route DOM-based route derived from body classes (``)\n * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.\n * @param {string} [arg] Any custom argument to be passed to the event.\n */\n fire(route, event = 'init', arg) {\n document.dispatchEvent(new CustomEvent('routed', {\n bubbles: true,\n detail: {\n route,\n fn: event,\n },\n }));\n \n const fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';\n if (fire) {\n this.routes[route][event](arg);\n }\n }\n\n /**\n * Automatically load and fire Router events\n *\n * Events are fired in the following order:\n * * common init\n * * page-specific init\n * * page-specific finalize\n * * common finalize\n */\n loadEvents() {\n // Fire common init JS\n this.fire('common');\n\n // Fire page-specific init JS, and then finalize JS\n document.body.className\n .toLowerCase()\n .replace(/-/g, '_')\n .split(/\\s+/)\n .map(camelCase)\n .forEach((className) => {\n this.fire(className);\n this.fire(className, 'finalize');\n });\n\n // Fire common finalize JS\n this.fire('common', 'finalize');\n }\n}\n\nexport default Router;\n","/**\n * Cookies\n *\n * @link https://github.com/A-gambit/cookie-es6\n * @link https://gist.github.com/paulobrumatti/f80342b9ff13df99b4ae\n */\nvar encode = encodeURIComponent;\nvar decode = decodeURIComponent;\n\nfunction cookie(name, value, options) {\n if (arguments.length < 2) return get(name);\n set(name, value, options);\n}\n\nfunction set(name, value, options = {}) {\n var str = `${encode(name)}=${encode(value)}`;\n if (value === null) options.maxage = -1;\n if (options.maxage) {\n // options.expires = new Date(+new Date() + options.maxage); // doesn't seem to work\n const date = new Date();\n options.expires = new Date(date.setTime(date.getTime()+(options.maxage * 24 * 60 * 60 * 1000)));\n }\n if (options.path) {\n str += '; path=' + options.path;\n }\n else {\n str += '; path=/';\n }\n // if (options.path) str += '; path=' + options.path; // see above\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.secure) str += '; secure';\n document.cookie = str;\n}\n\nfunction get(name) {\n // @TODO, is there room here for improvement?\n // var cookies = parse(document.cookie); // Idk what this was supposed to do but it didnt seem to work.\n // @link https://gist.github.com/paulobrumatti/f80342b9ff13df99b4ae // this code does it differently\n var cookies = {};\n for (let cookie of document.cookie.split('; ')) {\n let [name, value] = cookie.split('=');\n cookies[name] = decodeURIComponent(value);\n }\n // return !!name ? cookies : cookies[name]; // this seemed backwards\n return !!name ? cookies[name] : cookies;\n}\n\n// function parse(str) {\n// var obj = {},\n// pairs = str.split(/ *; */);\n// if (!pairs[0]) return obj;\n// for (let pair of pairs) {\n// pair = pair.split('=');\n// obj[decode(pair[0])] = decode(pair[1]);\n// }\n// }\n\nexport {cookie as default};\n","import cookie from './cookies';\n\nconst $ = window.jQuery;\n\nconst s = {\n alertBar : $('.alert-bar'),\n cookieName : 'STYXKEY_alert-bar'\n}\n\nfunction init() {\n\n /** Show Alert Bar */\n if (cookie(s.cookieName) === undefined || cookie(s.cookieName) !== 'inactive') {\n cookie(s.cookieName, 'active');\n s.alertBar.addClass('active').removeClass('inactive');\n }\n else if (cookie(s.cookieName) === 'inactive') {\n s.alertBar.addClass('inactive').removeClass('active');\n }\n\n /** Add Dismissible Class */\n s.alertBar.addClass('alert-bar--dismissible');\n\n /** Add Dismiss Button */\n s.alertBar.append('');\n\n events();\n}\n\nfunction events() {\n\n /** Hide Alert Bar */\n $('.alert-bar__dismiss').on('click', function(event) {\n event.preventDefault();\n cookie(s.cookieName, 'inactive', { 'maxage' : 1 }); // Expires in 1 Day\n s.alertBar.addClass('inactive ').removeClass('active');\n });\n}\n\nexport {init as default}\n","/* jslint esversion: 6 */\n/**\n * Max-Width iFrame\n *\n * Enable iFrames to scale responsively within parent.\n *\n * @requires _max-width-iframe.scss\n *\n * @author Dylan James Wagner\n */\nconst $ = window.jQuery;\nconst s = {\n\tscope : $('.wysiwyg'), // $('main'),\n\t// selector : 'iframe',\n\tselectors : [\n\t\t'iframe[src*=\"youtube.com\"]',\n\t\t'iframe[src*=\"youtu.be\"]',\n\t\t'iframe[src*=\"vimeo.com\"]',\n\t],\n\tsetPadding : true, // true, false (use styles)\n\tsetMaxWidth : true, // true, false, '300px'\n};\n\nfunction init() {\n\n\twrapIFrames();\n}\n\nfunction wrapIFrames() {\n\tvar selector = s.selectors.join(', '); // s.selector;\n\n\ts.scope.find(selector).each(function(index, element) {\n\t\tvar $element = $(element);\n\n\t\tvar width = $element.attr('width');\n\t\tvar height = $element.attr('height');\n\t\tvar padding = (height / width * 100);\n\t\tvar maxWidth = (typeof s.setMaxWidth !== 'boolean' ? s.setMaxWidth : width + 'px');\n\n\t\tvar containerStyle = [];\n\t\tvar innerStyle = [];\n\n\t\tif (s.setMaxWidth && maxWidth) {\n\t\t\tcontainerStyle.push('max-width: ' + maxWidth + ';');\n\t\t}\n\n\t\tif (s.setPadding && padding) {\n\t\t\tinnerStyle.push('padding-top: ' + padding + '%;');\n\t\t}\n\n\t\tvar containerStyleAttribute = (containerStyle.length ? ' style=\"' + containerStyle.join(' ') + '\"' : '');\n\t\tvar innerStyleAttribute = (innerStyle.length ? ' style=\"' + innerStyle.join(' ') + '\"' : '');\n\n\t\tif ($element.parent('p').length) {\n\t\t\t$element.unwrap();\n\t\t}\n\n\t\t$element\n\t\t\t.attr('allowtransparency', true)\n\t\t\t.wrap('
');\n\t});\n}\n\nexport {init as default};\n","function init() {\n const body = document.querySelector(\"body\");\n const buttonOpen = document.querySelector(\".js-menu-open\");\n const buttonClose = document.querySelector(\".js-menu-close\");\n const drawer = document.querySelector(\".o-drawer\");\n const dropDown = document.querySelectorAll(\"ul.mobile-primary-menu__list > .menu-item-has-children\");\n const ignoreTheseElements = document.querySelectorAll(\".site > .header, .site > .content, .site > footer\");\n let prevWidth = window.innerWidth;\n\n // === Drawer and Menu === // \n\n // open main nav drawer\n const openNav = () => {\n drawer.scroll(0, 0);\n body.classList.add(\"show-menu\", \"visible\");\n drawer.setAttribute('aria-hidden', 'false');\n buttonClose.focus();\n \n setInert();\n };\n\n // close main nav drawer\n const closeNav = (wasMouseClick) => {\n body.classList.remove(\"show-menu\");\n drawer.setAttribute('aria-hidden', 'true');\n \n setTimeout(() => {\n body.classList.remove(\"visible\");\n dropDown.forEach((subnav) => {\n subnav.classList.remove(\"expanded\", \"visible\");\n subnav.setAttribute('aria-expanded', 'false');\n drawer.scroll(0, 0);\n });\n }, 250);\n removeInert();\n \n if(!wasMouseClick){\n buttonOpen.focus();\n }\n };\n\n // === Focus setting === // \n\n // disable focus for non-mobile menu items\n const setInert = () => {\n ignoreTheseElements.forEach(element => {\n element.setAttribute(\"inert\", \"true\");\n })\n }\n\n // re-enable focus for non-mobile menu items\n const removeInert = () => {\n ignoreTheseElements.forEach(element => {\n element.removeAttribute(\"inert\");\n })\n }\n\n // === Submenus === // \n\n // open dropdown subnav in drawer\n const openSubMenu = (menuItem) => {\n menuItem.classList.add(\"expanded\", \"visible\");\n menuItem.setAttribute('aria-expanded', 'true');\n };\n\n // close dropdown subnav in drawer\n const closeSubMenu = (menuItem) => {\n menuItem.classList.remove(\"expanded\");\n menuItem.setAttribute('aria-expanded', 'false');\n\n setTimeout(() => {\n menuItem.classList.remove(\"visible\");\n\n }, 250);\n };\n \n // === Listeners === // \n\n buttonOpen.addEventListener('click', () => {\n openNav();\n });\n\n buttonClose.addEventListener('click', () => {\n closeNav(true);\n });\n\n window.addEventListener(\"resize\", () => {\n if (window.innerWidth !== prevWidth ) {\n prevWidth = window.innerWidth;\n closeNav();\n }\n });\n\n window.addEventListener('keydown', (event) => {\n if(!body.classList.contains(\"show-menu\")){\n return\n }\n let keyName = event.code;\n if (keyName === 'Escape') {\n closeNav();\n }\n })\n\n // handles submenus\n dropDown.forEach((subMenu) => {\n \n subMenu.addEventListener(\"click\", (event) => {\n if (event.target.classList.contains(\"expanded\")) {\n closeSubMenu(event.target);\n } else {\n openSubMenu(event.target);\n }\n });\n\n // Enter key listener\n subMenu.addEventListener('keydown', (event) => {\n let keyName = event.code;\n if (keyName === 'Enter') {\n if (event.target.parentNode.classList.contains(\"expanded\")) {\n closeSubMenu(event.target.parentNode);\n } else {\n openSubMenu(event.target.parentNode);\n }\n }\n });\n });\n}\n\nexport { init as default };\n","/* jslint esversion: 6 */\n/**\n * Scroll Transition\n *\n * Animate local scrolling.\n *\n * @author Dylan James Wagner\n * @package Sage\n * @subpackage Scripts\n * @since 9.0.9\n *\n * @todo consider settings.offset element(s) as offset default. parseInt($('#header').css('height'))\n */\nconst $ = window.jQuery;\nconst s = {\n scrollDuration : 500,\n scrollOffsetDisable : false, // Default false [false, up, down] // Disable when using an autohide fixed header\n scrollOffset : 0, // parseInt($('.header').css('height')), // Default 0\n scrollOffsetExclude : [],\n};\n\nfunction init() {\n\n $(window).on('load',function() {\n\n /** scroll to target on load with hash */\n if (window.location.hash) {\n // scroll(window.location.hash);\n scroll(window.location.hash, 0); // no scrollDuration\n removeHash();\n }\n });\n\n events();\n}\n\nfunction events() {\n\n /** hash */\n // $('a[href^=\"#\"]') // hash only\n // $('a[href^=\"#\"], a[href$=\"' + window.location.hash + '\"]') // hash only, hash ending\n // $('a[href^=\"#\"], a[href$=\"' + window.location.search + window.location.hash + '\"]') // hash only, search (query) + hash ending\n $('a[href^=\"#\"], a[href$=\"' + window.location.hash + '\"]:not(#comment-reply-link):not(#cancel-comment-reply-link)') // hash only, hash ending :not comment hash\n .on('click', function(event) {\n event.preventDefault();\n scroll(this.hash);\n });\n}\n\nfunction scroll(scrollHash, scrollDuration = s.scrollDuration) {\n // console.log('scroll', scrollHash);\n\n if (scrollHash.length !== 0) {\n const $target = $(scrollHash);\n let scrollOffset = s.scrollOffset;\n let scrollPosition = 0;\n\n if ($target.length) {\n let windowOffsetTop = $(window).scrollTop();\n let targetOffsetTop = Math.floor($target.offset().top);\n\n s.scrollOffsetExclude.forEach(function(element) {\n\n if (scrollHash.includes(element)) {\n scrollOffset = 0;\n }\n });\n\n /** adjust scrollOffset for #wpadminbar */\n // if (s.$wpadminbar.length) {\n // scrollOffset = scrollOffset + parseInt(s.$wpadminbar.css('height'))\n // }\n if ($('body.admin-bar').length || $('body.wp-admin-bar').length) { // Supports namespaced body_class \"wp-\"\"\n if (window.innerWidth < 783) { // WordPress Desktop breakpoint\n scrollOffset = scrollOffset + 46;\n }\n else {\n scrollOffset = scrollOffset + 32;\n }\n }\n\n /** adjust scrollOffset based on scroll direction */\n if (s.scrollOffsetDisable === 'up' && targetOffsetTop <= windowOffsetTop) {\n scrollPosition = targetOffsetTop;\n }\n else if (s.scrollOffsetDisable === 'down' && targetOffsetTop >= windowOffsetTop) {\n scrollPosition = targetOffsetTop;\n }\n else {\n // console.log('offset', scrollOffset);\n scrollPosition = targetOffsetTop - (scrollOffset - 1); // minus 1 to adjust for 0 based scrollTop\n }\n\n $('html, body').animate({\n scrollTop : scrollPosition,\n }, scrollDuration);\n }\n }\n}\n\n/**\n * Remove Hash\n *\n * @link https://stackoverflow.com/questions/1397329/how-to-remove-the-hash-from-window-location-url-with-javascript-without-page-r/5298684#5298684\n */\nfunction removeHash() {\n history.pushState('', document.title, window.location.pathname + window.location.search);\n}\n\nexport {init as default, scroll};\n","import Navigation from './modules/Navigation.js';\nimport MobileNavigation from './modules/MobileNavigation.js';\n\ndocument.addEventListener('DOMContentLoaded', function() {\n Navigation();\n MobileNavigation();\n});\n\n/** import external dependencies */\nimport 'jquery';\n\n/** Import everything from autoload */\n// import './autoload/**/*'\n\n/** import local dependencies */\nimport Router from './util/Router';\nimport common from './routes/common';\n// import aboutUs from './routes/about';\n\n/** Shared Constructs */\n// import faviconBadge from './shared/favicon-badge.js';\n\n/** Theme Constructs */\nimport alertBar from './theme/alert-bar';\nimport gallerySlides from './theme/gallery-slides';\nimport maxWidthIFrame from './theme/max-width-iframe';\n// import modal from './theme/modal';\nimport mobileMenu from './theme/colab-mobile-menu';\nimport scrollTransition from './theme/scroll-transition';\nimport selectChangeLocation from './theme/select-change-location';\nimport testimonialsSlides from './theme/testimonials-slides';\nimport homeSlides from './theme/home.js'\n\n/** Populate Router instance with DOM routes */\nconst routes = new Router({\n // All pages\n common,\n});\n\n// Load Events\njQuery(document).ready(() => routes.loadEvents());\n\ndocument.addEventListener('DOMContentLoaded', function() {\n\n /** Shared Constructs */\n // faviconBadge();\n\n /** Theme Constructs */\n alertBar();\n gallerySlides();\n maxWidthIFrame();\n mobileMenu();\n scrollTransition();\n selectChangeLocation();\n testimonialsSlides();\n homeSlides();\n // modal();\n\n /**\n * Calendly iframe height\n *\n * @todo This does not appear to fire on initial load.\n */\n (function () {\n function isCalendlyEvent(e) {\n return e.data.event &&\n e.data.event.indexOf('calendly') === 0;\n };\n\n window.addEventListener('message', function(e) {\n // if (isCalendlyEvent(e)) {\n // console.log(e.data);\n // console.log(e.target);\n // console.log(e.target.outerHeight);\n // }\n\n let contentHeight = e.target.outerHeight;\n // console.log(contentHeight);\n\n // console.log(e);\n // console.log(e.target);\n // console.log(e.target.getElementsByClassName('booking')[0].outerHeight);\n\n jQuery('iframe[src*=\"calendly.com\"]').css({\n height: contentHeight,\n });\n }, false);\n })();\n\n});\n","export default {\n init() {\n // JavaScript to be fired on all pages\n },\n finalize() {\n // JavaScript to be fired on all pages, after page specific JS is fired\n },\n};\n","/**\n * Testimonial Slides\n */\nfunction init() {\n const $ = window.jQuery;\n const Flickity = require('flickity');\n const $gallerySlides = $('.is-style-gallery-slides');\n\n if ($gallerySlides.length) {\n Flickity.prototype._createResizeClass = function () {\n this.element.classList.add('flickity-resize');\n };\n\n Flickity.createMethods.push('_createResizeClass');\n\n var resize = Flickity.prototype.resize;\n Flickity.prototype.resize = function () {\n this.element.classList.remove('flickity-resize');\n resize.call(this);\n this.element.classList.add('flickity-resize');\n };\n }\n\n for (let i = 0; i < $gallerySlides.length; i++) {\n new Flickity($gallerySlides[i], {\n // cellAlign: 'left', // default center\n groupCells: 1,\n wrapAround: true,\n // prevNextButtons: false, // default true\n pageDots: false, // default true\n // autoPlay: true, // default false, true = 3s\n pauseAutoPlayOnHover: true, // default true\n // selectedAttraction: 0.01,\n // friction: 0.15,\n });\n\n // $carousel.on('hover', function () {\n // $carousel.pausePlayer();\n // }, function () {\n // $carousel.unpausePlayer();\n // });\n }\n}\n\nexport {init as default}\n","/* jshint esversion: 6 */\n\nfunction init() {\n const selectChangeLocation = document.querySelectorAll('.js-select-change-location');\n\n selectChangeLocation.forEach(function(element) {\n\n /** Redirect to Select Option Value on change */\n element.addEventListener('change', function (event) {\n window.location.href = this.value;\n // window.location.href = this.options[this.selectedIndex].dataset.permalink;\n });\n\n /** Redirect to Select Option Value on keyup */\n element.addEventListener('keyup', function (event) {\n window.location.href = this.value;\n // window.location.href = this.options[this.selectedIndex].dataset.permalink;\n });\n\n /** Reset Selected State on back_forward */\n if (String(window.performance.getEntriesByType('navigation')[0].type) === 'back_forward') {\n var elementSelectedIndex = element.selectedIndex;\n\n window.addEventListener('pageshow', function(event) {\n element.selectedIndex = elementSelectedIndex;\n });\n };\n });\n}\n\nexport { init as default };\n","/**\n * Testimonial Slides\n */\nfunction init() {\n const $ = window.jQuery;\n const Flickity = require('flickity');\n const $testimonialSlides = $('.is-style-testimonials-slides .testimonials-block__cards');\n if ($testimonialSlides.length) {\n Flickity.prototype._createResizeClass = function () {\n this.element.classList.add('flickity-resize');\n };\n\n Flickity.createMethods.push('_createResizeClass');\n\n var resize = Flickity.prototype.resize;\n Flickity.prototype.resize = function () {\n this.element.classList.remove('flickity-resize');\n resize.call(this);\n this.element.classList.add('flickity-resize');\n };\n }\n\n for (let i = 0; i < $testimonialSlides.length; i++) {\n new Flickity($testimonialSlides[i], {\n // cellAlign: 'left', // default center\n wrapAround: true,\n // prevNextButtons: false, // default true\n pageDots: false, // default true\n autoPlay: true, // default false, true = 3s\n pauseAutoPlayOnHover: true, // default true\n // selectedAttraction: 0.01,\n // friction: 0.15,\n });\n\n // $carousel.on('hover', function () {\n // $carousel.pausePlayer();\n // }, function () {\n // $carousel.unpausePlayer();\n // });\n }\n}\n\nexport {init as default}\n","function init() {\n const $ = window.jQuery;\n const Flickity = require('flickity');\n const $testimonialSlides = $('.js-flickity-slides');\n\n if ($testimonialSlides.length) {\n Flickity.prototype._createResizeClass = function () {\n this.element.classList.add('flickity-resize');\n };\n\n Flickity.createMethods.push('_createResizeClass');\n\n var resize = Flickity.prototype.resize;\n Flickity.prototype.resize = function () {\n this.element.classList.remove('flickity-resize');\n resize.call(this);\n this.element.classList.add('flickity-resize');\n };\n }\n\n for (let i = 0; i < $testimonialSlides.length; i++) {\n new Flickity($testimonialSlides[i], {\n // cellAlign: 'left', // default center\n wrapAround: true,\n // prevNextButtons: false, // default true\n pageDots: false, // default true\n autoPlay: true, // default false, true = 3s\n pauseAutoPlayOnHover: true, // default true\n // selectedAttraction: 0.01,\n // friction: 0.15,\n });\n\n // $carousel.on('hover', function () {\n // $carousel.pausePlayer();\n // }, function () {\n // $carousel.unpausePlayer();\n // });\n }\n};\n\n\nexport {init as default}\n","/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","module.exports = jQuery;","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n"],"sourceRoot":""}