{"version":3,"sources":["../../node_modules/browser-pack/_prelude.js","../../modules/accordion/accordion.js","../../modules/back-to-top/back-to-top.js","../../modules/blog-landing/blog-landing.js","../../modules/card-grid/card-grid.js","../../modules/carousel/carousel.js","../../modules/debug-layout/debug-layout.js","../../modules/dom/dom.js","../../modules/featured-post/featured-post.js","../../modules/filter/filter.js","../../modules/header/header.js","../../modules/image/image.js","../../modules/job-form/job-form.js","../../modules/local-nav/local-nav.js","../../modules/newsletter/newsletter.js","../../modules/page-scroll/page-scroll.js","../../modules/quote-carousel/quote-carousel.js","../../modules/select-field/select-field.js","../../modules/select/select.js","../../modules/simple-accordion/simple-accordion.js","../../modules/social-share/social-share.js","../../modules/tab/tab.js","../../modules/twitter-feed/twitter-feed.js","../../modules/utils/utils.js","../../modules/video-modal-toggle/video-modal-toggle.js","../../modules/video-modal/video-modal.js","../../node_modules/clipboard/lib/clipboard-action.js","../../node_modules/clipboard/lib/clipboard.js","../../node_modules/delegate/src/closest.js","../../node_modules/delegate/src/delegate.js","../../node_modules/desandro-matches-selector/matches-selector.js","../../node_modules/dom-event/index.js","../../node_modules/es6-promise/dist/es6-promise.js","../../node_modules/ev-emitter/ev-emitter.js","../../node_modules/fizzy-ui-utils/utils.js","../../node_modules/flickity/js/add-remove-cell.js","../../node_modules/flickity/js/animate.js","../../node_modules/flickity/js/cell.js","../../node_modules/flickity/js/drag.js","../../node_modules/flickity/js/flickity.js","../../node_modules/flickity/js/index.js","../../node_modules/flickity/js/lazyload.js","../../node_modules/flickity/js/page-dots.js","../../node_modules/flickity/js/player.js","../../node_modules/flickity/js/prev-next-button.js","../../node_modules/flickity/js/slide.js","../../node_modules/get-size/get-size.js","../../node_modules/good-listener/src/is.js","../../node_modules/good-listener/src/listen.js","../../node_modules/layzr.js/dist/layzr.js","../../node_modules/lodash.throttle/index.js","../../node_modules/nanoajax/index.js","../../node_modules/process/browser.js","../../node_modules/select/src/select.js","../../node_modules/stickyfill/index.js","../../node_modules/tablesort/src/tablesort.js","../../node_modules/tiny-emitter/index.js","../../node_modules/tweezer.js/dist/tweezer.js","../../node_modules/twitter-fetcher/js/twitterFetcher_min.js","../../node_modules/unidragger/unidragger.js","../../node_modules/unipointer/unipointer.js","../../src/js/global.js","../../src/js/lib/init-modules.js","../../src/js/main.js"],"names":["el","image","_dom","select","item","toggleButton","items","selectAll","setHeight","height","clientHeight","style","minHeight","activateItem","textContent","getData","addClass","ACTIVATE_CLASS","deactiveItem","e","removeClass","deactiveItems","_utils","map","toggle","classList","contains","on","window","require","toggleBackToTop","getScrollTop","innerHeight","ACTIVE_CLASS","_lodash2","default","scrollTop","offset","undefined","_lodash","featuredPostEl","gridEl","filterEl","selectTrigger","base","getBaseUrl","getEndPoint","category","currentPage","maybeHide","response","getProp","updateListBySelector","pipe","partial","updateList","preventDefault","linkEl","value","slug","getHref","getCategorySlug","fetchGrid","then","delegate","paged","getAttribute","target","split","replace","_es6Promise","_nanoajax","_image","fadeOut","fadeIn","triggerReflow","categoryLink","indexOf","endpoint","Promise","resolve","reject","params","url","method","responseType","nanoajax","ajax","code","list","JSON","parse","innerHTML","createNodes","append","updateLazyLoad","options","pageDots","wrapAround","watchCSS","prevNextButtons","childElementCount","slider","Flickity","adjustHeight","resize","_flickity","cellAlign","contain","autoPlay","arrowShape","x0","x1","y1","x2","y2","x3","DEBUG_CLASS","activate","toggleClass","document","body","_tweezer","curry","className","els","add","parent","appendChild","appendHtml","html","insertAdjacentHTML","wrapper","createElement","getChildren","setStyle","k","v","hide","getStyle","getComputedStyle","getHeight","arguments","length","documentElement","pageYOffset","hasClass","_getAttribute","name","setAttribute","removeAttribute","_getData","_on","event","handler","capture","addEventListener","matches","selector","Element","prototype","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","apply","_domLoaded","attachEvent","readyState","ready","f","closest","whileDo","parentNode","_delegate","matchedElement","remove","querySelector","makeArray","querySelectorAll","getTopPosition","callback","Tweezer","start","end","scrollTo","setProp","begin","trigger","eventName","data","_typeof","CustomEvent","detail","some","createEvent","initCustomEvent","dispatchEvent","doesSupportObjectFit","Object","keys","reduce","support","prop","test","socialShareWrapper","socialShareToggle","socialShareEl","isSocialShareActive","SOCIAL_SHARE_ACTIVE","toggleSocialShare","activateSocialShare","deactivateSocialShare","_tablesort","deactivate","fetchData","parentFilterEl","childFilterEl","defaultChildFilter","categoryId","state","department","table","_tablesort2","filterJobs","types","resetChildFilterEl","updateOptions","maybeUpdateChildFilterEl","updateFilters","headerSubNavToggles","buttonSearch","formSearch","buttonFormSearch","fixedHeader","activateFixedHeader","deactivateFixedHeader","toggleSlideout","navToggle","overlay","currentActive","getActivatedSubMenu","this","deactivateSubMenu","isSubMenuActivated","activateSubMenu","formSearchActivate","HEADER_SEARCH_ACTIVE","FIXED_HEADER_CLASS","ACTIVE_SLIDEOUT_CLASS","SLIDEOUT_SUBNAV_CLASS","SUB_MENU_ACTIVE","slideout","slideoutSubNavToggle","slideoutActivateSubNav","console","log","_domEvent","_layzr","instance","layzr","_layzr2","threshold","objectFit","_domEvent2","src","backgroundImage","update","check","handlers","anchor","anchorId","conceptEl","heightHeader","header","scroll","getBoundingClientRect","top","triggers","selectEl","currentTextEl","reset","option","selectedOnClick","link","initEmbed","FORM_LOADED","TIMEOUT","interval","tick","tag","_ctct_m","id","defer","async","setInterval","stylesheet","inlineStyle","removeChild","clearInterval","href","SelectField","t","fieldMobile","fieldDesktop","fieldCurrent","dropdownItems","Array","slice","call","selectFirstItem","activeState","clickOutside","selectDesktop","selectMobile","selectedItem","removeSelectActive","currentItem","forEach","otherItem","hasAttribute","onChange","module","exports","formSelect","selectCurrent","selectedText","text","selectedIndex","ACCORDION_TITLE_SELECTOR","ACCORDION_CONTENT_SELECTOR","ACCORDION_CONTENT_INNER_SELECTOR","accordionTitles","deactivateItem","toggleItem","currentTarget","itemContent","itemContentInner","contentHeight","offsetHeight","pageLink","Clipboard","_clipboard","_stickyfill","TAB_LINK_SELECTOR","TAB_CONTENT_SELECTOR","TAB_SELECT_FIELD_SELECTOR","TAB_NAV_SELECTOR","TAB_NAV_CURRENT","FIXED_CLASS","initStickyFill","_stickyfill2","opacity","fade","display","requestAnimationFrame","val","parseFloat","tabLinks","tabContents","tabNav","tabNavCurrent","tabSelectField","tabIndex","closeAllTabs","tab","index","activateTab","tabLinksArr","tabContentsArr","clickedEl","parseInt","values","offsetTop","optionIndex","optionText","screenName","template","tweets","element","TWITTER_FEED_SELECTOR","i","tweetObject","tweetImage","author_data","profile_image","time","tweet","tid","twitterConfig","profile","showImages","maxTweets","dataOnly","customCallback","twitterFetcher","fetch","_twitterFetcher","returnTrue","returnFalse","identity","not","_len","args","_key","bind","concat","allPass","fs","_len2","_key2","anyPass","_len3","_key3","cond","pairs","_len4","_key4","ifElse","p","fT","fF","when","arr","isArray","filter","_len5","_key5","_len6","funcs","_key6","_this","acc","always","obj","lt","b","a","tryCatch","tryer","catcher","_len7","_key7","pred","fn","initial","divide","multiply","inArray","array","nth","first","last","_add1ToLast","range","from","to","_toConsumableArray","flipArgs","arg1","arg2","count","arrayLike","logWrap","_len8","_key8","logArgs","_len9","_key9","debounce","wait","context","timeout","callbackArgs","later","clearTimeout","setTimeout","promise","modal","video","activateVideoModal","VIDEO_ACTIVE_CLASS","play","closeButton","modalContainer","modalOverlay","iframe","stopVideo","pause","deactivateVideoModal","global","factory","define","amd","mod","clipboardAction","_select","_classCallCheck","Constructor","TypeError","_select2","__esModule","Symbol","iterator","constructor","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","ClipboardAction","resolveOptions","initSelection","action","container","emitter","selectFake","selectTarget","isRTL","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","fontSize","border","padding","margin","position","yPosition","copyText","removeEventListener","succeeded","execCommand","err","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","set","_action","Error","get","nodeType","_target","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_interopRequireDefault","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","getAttributeValue","suffix","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","_Emitter","getPrototypeOf","listenClick","defaultAction","defaultTarget","defaultText","_this2","listener","onClick","delegateTarget","destroy","actions","queryCommandSupported","DOCUMENT_NODE_TYPE","proto","type","useCapture","listenerFn","elements","matchesMethod","ElemProto","prefixes","prefix","elem","off","detachEvent","ES6Promise","objectOrFunction","x","isFunction","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useVertxTimer","vertxNext","flush","useSetTimeout","globalSetTimeout","len","queue","onFulfillment","onRejection","child","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","object","selfFulfillment","cannotReturnOwn","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","error","fulfill","reason","_label","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","hasCallback","initializePromise","resolver","nextId","validationError","all","entries","Enumerator","race","_","reject$1","needsResolver","needsNew","polyfill","local","Function","P","promiseToString","toString","cast","Promise$1","_isArray","arg","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","nextTick","iterations","observer","node","createTextNode","observe","characterData","channel","port1","onmessage","port2","postMessage","vertx","runOnLoop","runOnContext","Math","random","substring","input","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","c","resolve$$1","_then","didError","_settledAt","_willSettleAt","enumerator","catch","finally","_setScheduler","_setAsap","_asap","EvEmitter","events","_events","listeners","push","once","onceEvents","_onceEvents","splice","emitEvent","onceListeners","allOff","fizzyUIUtils","utils","extend","modulo","num","div","arraySlice","removeFrom","ary","getParent","getQueryElement","handleEvent","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","methodName","timeoutName","docReady","toDashed","str","match","$1","$2","toLowerCase","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","jQuery","attr","getCellsFragment","cells","fragment","createDocumentFragment","cell","insert","_makeCells","isAppend","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","prepend","getCells","minCellIndex","min","cellSizeChange","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","getCellSlideIndex","slides","positionSliderAtSelected","animatePrototype","startAnimation","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","transform","firstSlide","positionX","progress","slidesWidth","selectedSlide","velocity","percentPosition","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","outerWidth","_unshiftCells","getFrictionFactor","applyForce","force","getRestingPosition","isDraggable","dragVelocity","dragX","dragForce","distance","selectedAttraction","Cell","originSide","unselect","side","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","width","sideOffset","adjustedX","Unidragger","getScrollPosition","pageXOffset","y","defaults","draggable","dragThreshold","createMethods","_touchActionValue","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","pointer","_pointerDownDefault","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","nodeName","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","dragStart","dragStartPosition","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","max","endBound","getLastSlide","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","dragEndBoostSelect","isDragSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","dist","minDist","isWrapAround","slideIndex","slide","wrap","floor","delta","staticClick","clickedCell","getParentCell","cellElem","cellIndex","onscroll","scrollMoveX","scrollMoveY","_pointerDone","Slide","_Flickity","moveElements","toElem","queryElement","flickityGUID","instances","$element","_create","GUID","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","guid","_createSlider","opts","isActive","_filterFindCellElements","children","reloadCells","selectInitialIndex","isInitActivated","cellSelector","positionCells","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","isOriginLeft","nextMargin","canCellFit","_getCanCellFit","addCell","slideWidth","firstMargin","updateSelectedSlide","groupCells","number","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","left","right","shorthand","adaptiveHeight","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","isWrap","isInstant","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","getAdjacentCellElements","adjCount","cellElems","uiChange","childUIPointerDown","onresize","isDragging","content","onkeydown","isNotFocused","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","removeData","bridget","setJQuery","jq","getCellLazyImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","srcset","onload","complete","onerror","Unipointer","PageDots","holder","dots","handleClick","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","newDots","dot","updateSelected","selectedDot","onTap","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","hidden","clear","stop","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","PrevNextButton","getArrowMovements","shape","svgURI","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","createElementNS","path","pathMovements","onclick","enable","disabled","lastIndex","boundIndex","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","lastCell","lastMargin","getStyleSize","isNaN","getZeroSize","measurementsLength","measurements","logError","setup","isSetup","borderStyle","borderWidth","boxSizing","isBoxSizeOuter","offsetWidth","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","message","nodeList","string","String","listen","is","listenNode","listenNodeList","listenSelector","Layzr","_extends","assign","source","hasOwnProperty","knot","_once","cache","extended","getLoc","scrollY","requestScroll","prevLoc","requestFrame","ticking","getOffset","inViewport","viewTop","viewBot","windowHeight","nodeTop","nodeBot","settings","setSource","retina","dpr","normal","flag","nodes","devicePixelRatio","screen","deviceXDPI","logicalXDPI","func","invokeFunc","lastArgs","thisArg","lastThis","lastInvokeTime","result","leadingEdge","timerId","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","nativeMin","maxWait","shouldInvoke","now","trailingEdge","trailing","cancel","debounced","isInvoking","FUNC_ERROR_TEXT","toNumber","isObject","nativeMax","throttle","isObjectLike","isSymbol","objectToString","symbolTag","NAN","other","valueOf","reTrim","isBinary","reIsBinary","reIsOctal","freeParseInt","reIsBadHex","freeGlobal","freeSelf","root","objectProto","getRequest","cors","XDomainRequest","navigator","userAgent","XMLHttpRequest","setDefault","reqfields","cb","statusCode","responseText","called","req","status","headers","open","success","onreadystatechange","ontimeout","onabort","FormData","field","setRequestHeader","send","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","run","Item","title","browser","env","argv","version","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","isReadOnly","setSelectionRange","selection","createRange","selectNodeContents","addRange","doc","win","seppuku","init","rebuild","kill","mergeObjects","targetObj","sourceObject","parseNumeric","updateScrollPos","onScroll","recalcAllPos","onWheel","watchArray","recalcElementPos","inited","currentMode","limit","mode","switchElementMode","fastCheck","deltaTop","getDocOffsetTop","clone","docOffsetTop","deltaHeight","initElement","computed","isCell","deinitElement","deinitParent","killClone","css","initAll","deinitAll","nodeStyle","bottom","box","refElement","nextSibling","cloneStyle","borderSpacing","cssFloat","getElementParams","computedStyle","parentComputedStyle","cachedPosition","numeric","nodeOffset","getElementOffset","parentOffset","clientWidth","offsetParent","startFastCheckTimer","checkTimer","stopFastCheckTimer","handlePageVisibilityChange","initialized","hiddenPropertyName","visibilityChangeEventName","pop","webkitHidden","block","stickies","Tablesort","tagName","sortOptions","evt","getInnerText","sortAttribute","innerText","caseInsensitiveSort","trim","getCellByKey","find","stabilize","sort","antiStabilize","unstableResult","td","pattern","firstRow","defaultSort","that","thead","rows","tHead","current","sortTable","tabindex","columnKey","column","sortFunction","sortMethod","sortOrder","descending","tBodies","every","col","j","newRows","noSorts","totalRows","noSortsSoFar","tr","reverse","refresh","E","ctx","evtArr","evts","liveEvents","TinyEmitter","_classCallCheck$1","SingleTweener","decimal","_createClass$1","duration","ease","easing","_defaultEase","tweener","frame","isRunning","_tick","cancelAnimationFrame","timeStart","currentTime","lastTick","timeElapsed","_shouldTick","_emit","getIntermediateValue","getFinalValue","up","down","d","getElementsByTagName","n","RegExp","l","s","decodeURIComponent","r","o","m","u","g","h","w","T","enableLinks","showUser","showTime","dateFunction","showRetweet","showInteraction","useEmoji","linksInNewWindow","showPermalinks","domId","listSlug","lang","likes","collection","collectionId","C","getElementsByClassName","N","A","B","I","M","L","H","tweetText","author","profile_url","profile_image_2x","screen_name","timestamp","images","rt","permalinkURL","R","F","S","q","O","U","D","$","getElementById","__twttrf","Document","DocumentFragment","Node","firstChild","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","button","submit","file","isCursorNode","isClickType","isOkay","_pointerReset","focused","blur","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","startEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","detectExternalLinks","currentUrl","location","host","aTags","includes","requireModule","handleError","isEs6Module","runModule","Module","initializeModuleForEl","_initModules","_global","_global2","initializeModules"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\n const height = image.clientHeight\n item.style.minHeight = height + 'px'\n }\n const activateItem = () => {\n toggleButton.textContent = getData('read-less', toggleButton)\n addClass(ACTIVATE_CLASS, el)\n }\n const deactiveItem = (e) => {\n const toggleButton = select('.js-accordion', el)\n toggleButton.textContent = getData('read-more', toggleButton)\n removeClass(ACTIVATE_CLASS, e)\n }\n const deactiveItems = () => map(deactiveItem, items)\n const toggle = () => {\n if (el.classList.contains(ACTIVATE_CLASS)) {\n deactiveItem(el)\n } else {\n deactiveItems()\n activateItem()\n }\n }\n if (image) {\n on('resize', setHeight, window)\n on('load', setHeight, window)\n }\n if (toggleButton) {\n on('click', toggle, toggleButton)\n }\n}\n","import { on, scrollTop, getScrollTop, addClass, removeClass } from 'modules/dom'\nimport throttle from 'lodash.throttle'\n\nconst offset = 0\nconst ACTIVE_CLASS = 'back-to-top--activate'\n\nexport default function (el) {\n const toggleBackToTop = () => {\n if (getScrollTop() > window.innerHeight) {\n addClass(ACTIVE_CLASS, el)\n } else {\n removeClass(ACTIVE_CLASS, el)\n }\n }\n\n toggleBackToTop()\n on('scroll', throttle(toggleBackToTop, 300), window)\n\n on('click', () => {\n scrollTop(offset, undefined)\n }, el)\n}\n","import { on, delegate, select, getData, createNodes, append, addClass, removeClass, triggerReflow, getAttribute } from 'modules/dom'\nimport { getProp, partial, pipe, then } from 'modules/utils'\nimport { Promise } from 'es6-promise'\nimport nanoajax from 'nanoajax'\nimport { updateLazyLoad } from 'modules/image'\n\nconst getBaseUrl = getData('base-url')\nconst fadeOut = addClass('is-added')\nconst fadeIn = pipe(\n triggerReflow,\n removeClass('is-added')\n)\n\nconst getHref = (linkEl) => getAttribute('href', linkEl)\nconst getCategorySlug = (categoryLink) => {\n if (categoryLink.indexOf('?category=') !== -1) {\n return categoryLink.split('?category=')[1]\n }\n}\n\nconst fetchGrid = (endpoint) => new Promise((resolve, reject) => {\n const params = {\n url: endpoint,\n method: 'GET',\n responseType: 'json'\n }\n\n nanoajax.ajax(\n params,\n (code, response) => {\n if (code === 200 && response) {\n resolve(response)\n } else {\n reject(response)\n }\n }\n )\n})\n\nconst updateList = (list, response) => {\n if (typeof response === 'string') {\n response = JSON.parse(response)\n }\n list.innerHTML = ''\n pipe(\n getProp('html'),\n createNodes,\n fadeOut,\n append(list),\n fadeIn\n )(response)\n\n updateLazyLoad()\n\n return response\n}\n\nexport default function (el) {\n const featuredPostEl = select('.js-blog-featured-post', el)\n const gridEl = select('.js-loading-content', el)\n const filterEl = select('.js-blog-filters', el)\n const selectTrigger = select('select', filterEl)\n const base = getBaseUrl(el)\n const getEndPoint = (category, currentPage) => {\n return `${base}${category}/page/${currentPage}`\n }\n const maybeHide = (response) => {\n // Hide featuredPost\n if (getProp('hide_featured_post', response)) {\n addClass('is-hidden', featuredPostEl)\n } else {\n removeClass('is-hidden', featuredPostEl)\n }\n return response\n }\n const updateListBySelector = pipe(\n partial(updateList, gridEl),\n maybeHide\n )\n if (filterEl && selectTrigger) {\n on('change', (e) => {\n e.preventDefault()\n const linkEl = select('a[href=\"' + selectTrigger.value + '\"]', filterEl)\n const paged = 1\n if (linkEl) {\n const slug = pipe(\n getHref,\n getCategorySlug\n )(linkEl)\n pipe(\n partial(getEndPoint, slug),\n fetchGrid,\n then(updateListBySelector)\n )(paged)\n }\n }, selectTrigger)\n }\n if (gridEl) {\n delegate('click', (e) => {\n e.preventDefault()\n const paged = getAttribute('href', e.target).split('/page/')[1].replace('/', '')\n if (paged) {\n const linkEl = select('a[href=\"' + selectTrigger.value + '\"]', filterEl)\n if (linkEl) {\n const slug = pipe(\n getHref,\n getCategorySlug\n )(linkEl)\n pipe(\n partial(getEndPoint, slug),\n fetchGrid,\n then(updateListBySelector)\n )(paged)\n }\n }\n }, '.pagination__text', gridEl)\n }\n}\n","import { select, addClass, removeClass, on } from 'modules/dom'\nimport Flickity from 'flickity'\n\nexport default function (el) {\n const list = select('.js-slider', el)\n const options = {\n pageDots: true,\n wrapAround: true,\n watchCSS: true,\n prevNextButtons: false\n }\n if (list.childElementCount > 1) {\n const slider = new Flickity(list, options)\n const adjustHeight = () => {\n slider.resize()\n addClass('is-initialized', list)\n }\n on('load', () => {\n removeClass('is-initialized', list)\n adjustHeight()\n }, window)\n\n adjustHeight()\n }\n}\n","import { select } from 'modules/dom'\nimport Flickity from 'flickity'\n\nexport default function (el) {\n const list = select('.js-slider', el)\n const options = {\n cellAlign: 'center',\n contain: true,\n resize: true,\n wrapAround: true,\n autoPlay: 10000,\n arrowShape: {\n x0: 10,\n x1: 50,\n y1: 40,\n x2: 60,\n y2: 35,\n x3: 25\n }\n }\n if (list && list.childElementCount > 1) {\n return new Flickity(list, options)\n }\n}\n","import { partial } from 'modules/utils'\nimport { toggleClass, on } from 'modules/dom'\n\nconst DEBUG_CLASS = 'is-debugging-layout'\n\nexport default (el) => {\n const activate = partial(toggleClass, DEBUG_CLASS, document.body)\n on('click', activate, el)\n}\n","/* global Element, getComputedStyle, CustomEvent */\nimport { makeArray, curry, getProp, setProp, partial, pipe, map, whileDo } from 'modules/utils'\nimport Tweezer from 'tweezer.js'\n\n/**\n * Add class to a list of elements. This is a curried function.\n *\n * @param {string} className\n * @param {Array} els\n * @return {Array} Same elements for chaining\n */\nconst addClass = curry((className, els) =>\n map(\n (el) => {\n el.classList.add(className)\n return el\n },\n els\n ))\n\nconst append = (parent, els) => map((el) => parent.appendChild(el))\n\nconst appendHtml = (el, html) => {\n el.insertAdjacentHTML('beforeend', html)\n return el\n}\n\nconst createNodes = (html) => {\n const wrapper = document.createElement('div')\n appendHtml(wrapper, html)\n return getChildren(wrapper)\n}\n\nconst preventDefault = (e) => { e.preventDefault(); return e }\n\n/**\n * Set style for an element.\n *\n * This is a curried function.\n *\n * @param {string} k Style name\n * @param {string} v Style value\n * @param {HTMLElement} el Element\n * @return {HTMLElement}\n */\nconst setStyle = curry((k, v, el) => {\n el.style[ k ] = v\n return el\n})\n\nconst hide = setStyle('display', 'none')\n\n/**\n * Get a style for an element.\n *\n * This is a curried function.\n *\n * @param {string} k Style name\n * @param {HTMLElement} el\n * @return {string}\n */\nconst getStyle = curry((k, el) => getComputedStyle(el)[ k ])\n\n/**\n * Get actual height of an element, including padding\n *\n * @param {HTMLElement} el\n * @return {number}\n */\nconst getHeight = getProp('clientHeight')\n\n/**\n * Get scroll top position of an element.\n *\n * Default to getting scrolling position of the viewport\n *\n * @param {HTMLElement} el\n * @return {number}\n */\nconst getScrollTop = (el = document.documentElement) => el === document.documentElement ? (window.pageYOffset || el.scrollTop) : el.scrollTop\n\n/**\n * Check to see if an element has a specified class.\n *\n * @param {string} className\n * @param {HTMLElement} el\n */\nconst hasClass = curry((className, el) => el.classList.contains(className))\n\n/**\n * Get attribute value for an element.\n *\n * @param {string} name\n * @param {HTMLElement} el\n * @return {string}\n * @private\n */\nconst _getAttribute = (name, el) => el.getAttribute(name)\n\n/**\n * Get attribute value for an element.\n *\n * This is a curried function\n *\n * @param {string} name\n * @param {HTMLElement} el\n * @return {string}\n */\nconst getAttribute = curry(_getAttribute)\n\nconst setAttribute = curry((name, value, el) => {\n (el && el.setAttribute) && el.setAttribute(name, value)\n return el\n})\n\nconst removeAttribute = curry((name, el) => {\n (el && el.removeAttribute) && el.removeAttribute(name)\n return el\n})\n\n/**\n * Get data attribute.\n *\n * @param {string} name\n * @param {HTMLElement} el\n * @return {string} Parsed JSON value or object\n * @private\n */\nconst _getData = (name, el) => _getAttribute('data-' + name, el)\n\n/**\n * Get data attribute.\n *\n * This is a curried function\n *\n * @param {string} name\n * @param {HTMLElement} el\n * @return {string}\n */\nconst getData = curry(_getData)\n\n/**\n * Attach event handler for a single event\n *\n * @param {string} event\n * @param {Function} handler\n * @param {Object} capture\n * @param {HTMLElement} el\n * @returns {HTMLElement}\n * @private\n */\nconst _on = (event, handler, capture, el) => {\n el.addEventListener(event, handler, capture, el)\n return el\n}\n\nconst matches = (selector, el) => (\n Element.prototype.matches ||\n Element.prototype.matchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector\n).apply(el, [ selector ])\n\n/**\n * Attach event handler for a list of events.\n *\n * This is a curried function\n *\n * @param {Array|Object} els Array or array-like object\n * @param {string} event\n * @param {Function} handler\n * @return {Array}\n */\nconst on = curry((event, handler, els) =>\n map(\n partial(_on, event, handler, {}),\n els\n ))\n\n/**\n * Check to see if document has loaded\n *\n * @return {boolean}\n * @private\n */\nconst _domLoaded = () => document.attachEvent ? document.readyState === 'complete' : document.readyState !== 'loading'\n\n/**\n * Call function when document is ready\n *\n * @param {Function} f\n */\nconst ready = (f) => _domLoaded() ? f() : on('DOMContentLoaded', f, document)\n\nconst closest = curry((selector, el) =>\n whileDo(\n (target) => target && !matches(selector, target) && target.parentNode,\n (target) => target.parentNode,\n el.parentNode\n )\n)\n\nconst _delegate = (event, handler, selector, el) => _on(\n event,\n (e) => {\n const matchedElement = whileDo(\n (target) => target && target !== document && !matches(selector, target) && target.parentNode,\n (target) => target.parentNode,\n e.target\n )\n\n if (matchedElement !== document && matches(selector, matchedElement)) {\n handler.apply(el, [ e ])\n }\n },\n {},\n el\n)\n\nconst delegate = curry((event, handler, selector, els) => map(\n partial(_delegate, event, handler, selector),\n els\n))\n\n/**\n * Remove class from a list of elements. This is a curried function.\n *\n * @param {string} className\n * @param {Array} els\n * @return {Array} Same elements for chaining\n */\nconst removeClass = curry((className, els) =>\n map(\n (el) => { el.classList.remove(className); return el },\n els\n ))\n\nconst toggleClass = curry((className, els) =>\n map(\n (el) => { el.classList.toggle(className); return el },\n els\n ))\n\n/**\n * Select one element matching a selector, which is also decendant of a parent element (defaults to document)\n * @param {string} selector\n * @param {HTMLElement|HTMLDocument=} parent\n * @return {HTMLElement}\n */\nconst select = (selector, parent = document) => parent.querySelector(selector)\n\n/**\n * Select all elements matching a selector, which are also decendant of a parent element (defaults to document)\n * @param {string} selector\n * @param {HTMLElement|HTMLDocument=} parent\n * @return {Array}\n */\nconst selectAll = (selector, parent = document) => makeArray(parent.querySelectorAll(selector))\n\nconst getChildren = pipe(\n getProp('children'),\n makeArray\n)\n\nconst getTopPosition = getProp('offsetTop')\n\nconst scrollTop = (offset, callback, el) => {\n new Tweezer({\n start: getScrollTop(el),\n end: offset\n })\n .on('tick', (v) => {\n typeof el === 'undefined'\n ? window.scrollTo(0, v)\n : setProp('scrollTop', v, el)\n })\n .on('done', () => {\n if (typeof callback !== 'undefined') {\n callback()\n }\n })\n .begin()\n}\n\n/**\n * Trigger reflows so that transition happens after DOM insertion\n */\nconst triggerReflow = (els) => {\n map(getProp('offsetHeight'), els)\n return els\n}\n\nconst trigger = (eventName, el) => {\n let event\n let data = {}\n if (typeof eventName === 'object') {\n data = eventName.data\n eventName = eventName.event\n }\n if (typeof window.CustomEvent === 'function') {\n event = new CustomEvent(eventName, { detail: { some: 'data' } })\n } else {\n event = document.createEvent('CustomEvent')\n event.initCustomEvent(eventName, true, true, data)\n }\n el.dispatchEvent(event)\n return el\n}\n\nconst doesSupportObjectFit = () => Object.keys(document.documentElement.style).reduce((support, prop) => support || /object(?:-f|F)it$/.test(prop), false)\n\nexport {\n addClass,\n append,\n appendHtml,\n createNodes,\n closest,\n delegate,\n getAttribute,\n setAttribute,\n removeAttribute,\n getChildren,\n getHeight,\n getTopPosition,\n getData,\n getScrollTop,\n getStyle,\n hasClass,\n hide,\n on,\n matches,\n preventDefault,\n ready,\n removeClass,\n scrollTop,\n select,\n selectAll,\n setStyle,\n toggleClass,\n triggerReflow,\n trigger,\n doesSupportObjectFit\n}\n","import { on, select, addClass, removeClass, hasClass, toggleClass } from 'modules/dom'\n\nconst SOCIAL_SHARE_ACTIVE = 'social-share--activate'\nconst activateSocialShare = addClass(SOCIAL_SHARE_ACTIVE)\nconst deactivateSocialShare = removeClass(SOCIAL_SHARE_ACTIVE)\nconst toggleSocialShare = toggleClass(SOCIAL_SHARE_ACTIVE)\n\nexport default function (el) {\n const socialShareWrapper = select('.js-post-social', el)\n const socialShareToggle = select('.js-toggle-social-share', el)\n const socialShareEl = select('.js-social-share', el)\n const isSocialShareActive = () => hasClass(SOCIAL_SHARE_ACTIVE, socialShareEl)\n\n if (socialShareToggle && socialShareEl && socialShareWrapper) {\n on('click', function () {\n toggleSocialShare(socialShareEl)\n }, socialShareToggle)\n on('mouseover', function () {\n activateSocialShare(socialShareEl)\n }, socialShareToggle)\n on('mouseleave', function () {\n if (isSocialShareActive()) {\n deactivateSocialShare(socialShareEl)\n }\n }, socialShareWrapper)\n }\n}\n","import { addClass, on, select, selectAll, removeClass, setAttribute, trigger, removeAttribute, getData, createNodes, append } from 'modules/dom'\nimport { pipe, then, getProp } from 'modules/utils'\nimport Tablesort from 'tablesort'\nimport { Promise } from 'es6-promise'\nimport nanoajax from 'nanoajax'\n\nconst ACTIVE_CLASS = 'js-filter-active'\nconst activate = addClass(ACTIVE_CLASS)\nconst deactivate = removeClass(ACTIVE_CLASS)\n\nconst fetchData = (endpoint) => new Promise((resolve, reject) => {\n const params = {\n url: endpoint,\n method: 'GET',\n responseType: 'json'\n }\n\n nanoajax.ajax(\n params,\n (code, response) => {\n if (code === 200 && response) {\n resolve(response)\n } else {\n reject(response)\n }\n }\n )\n})\n\nexport default (el) => {\n /** Filters **/\n const parentFilterEl = select('.js-category-filter', el)\n const childFilterEl = select('.js-department-filter', el)\n const defaultChildFilter = '' // Get 'all' current state\n const getEndPoint = (categoryId) => getData('endpoint', el) + `/${categoryId}`\n const items = selectAll('[data-filter]', el)\n const state = {\n category: parentFilterEl.value,\n department: childFilterEl.value\n }\n /** Table sorting **/\n const table = select('.table', el)\n if (table) {\n Tablesort(table)\n }\n const filterJobs = () => {\n deactivate(selectAll('.js-filter-active', el))\n items.map((item) => {\n const types = getData('filter', item).split('|')\n const category = types[0]\n const department = types[1]\n if (\n (state.category === 'all' && state.department === 'all') ||\n (state.category === 'all' && state.department === department) ||\n (state.category === category && state.department === 'all') ||\n (state.category === category && state.department === department)\n ) {\n activate(item)\n }\n })\n }\n const resetChildFilterEl = () => {\n childFilterEl.innerHTML = defaultChildFilter\n }\n const updateOptions = (response) => {\n pipe(\n getProp('html'),\n createNodes,\n append(childFilterEl),\n removeAttribute('disabled', childFilterEl)\n )(response)\n return response\n }\n const maybeUpdateChildFilterEl = (response) => {\n if (getProp('html', response)) {\n pipe(\n updateOptions,\n trigger('change', childFilterEl)\n )(response)\n }\n return response\n }\n const updateFilters = (response) => {\n if (typeof response === 'string') {\n response = JSON.parse(response)\n }\n resetChildFilterEl()\n maybeUpdateChildFilterEl(response)\n return response\n }\n if (parentFilterEl && childFilterEl) {\n on('change', () => {\n state.category = parentFilterEl.value\n setAttribute('disabled', '', childFilterEl)\n childFilterEl.innerHTML = ''\n filterJobs() // Filter by category\n pipe(\n getEndPoint,\n fetchData,\n then(updateFilters)\n )(parentFilterEl.value)\n }, parentFilterEl)\n on('change', () => {\n state.department = childFilterEl.value\n filterJobs()\n }, childFilterEl)\n }\n}\n","import { on, select, selectAll, getHeight, addClass, removeClass, hasClass, toggleClass, getScrollTop } from 'modules/dom'\nimport { partial } from 'modules/utils'\nimport throttle from 'lodash.throttle'\n\nconst FIXED_HEADER_CLASS = 'fixed-header'\nconst ACTIVE_SLIDEOUT_CLASS = 'slideout-activate'\nconst SLIDEOUT_SUBNAV_CLASS = 'menu-item--activate'\nconst SUB_MENU_ACTIVE = 'menu-item--activate'\nconst HEADER_SEARCH_ACTIVE = 'header-search--activate'\n\nconst body = document.body\nconst navToggle = select('.js-slideout-toggle')\nconst slideout = select('.slideout')\nconst overlay = select('.overlay')\nconst slideoutSubNavToggle = selectAll('.menu-item-has-children > a', slideout)\nconst slideoutActivateSubNav = toggleClass(SLIDEOUT_SUBNAV_CLASS)\n\nif (slideoutSubNavToggle) {\n on(\n 'click', function (e) {\n slideoutActivateSubNav(this.parentNode)\n e.preventDefault()\n },\n slideoutSubNavToggle)\n}\n\nconst activateFixedHeader = () => {\n console.log('activateFixedHeader')\n // addClass(FIXED_HEADER_CLASS, body)\n}\nconst deactivateFixedHeader = () => {\n console.log('deactivateFixedHeader')\n // removeClass(FIXED_HEADER_CLASS, body)\n}\n\nconst toggleSlideout = () => toggleClass(ACTIVE_SLIDEOUT_CLASS, body)\n\nconst activateSubMenu = addClass(SUB_MENU_ACTIVE)\nconst deactivateSubMenu = removeClass(SUB_MENU_ACTIVE)\nconst isSubMenuActivated = hasClass(SUB_MENU_ACTIVE)\nconst getActivatedSubMenu = partial(select, `.${SUB_MENU_ACTIVE}`)\n\nexport default function (el) {\n const headerSubNavToggles = selectAll('.menu-item-has-children', el)\n const buttonSearch = select('.js-header__search-button', el)\n const formSearch = select('.js-header-search', el)\n const buttonFormSearch = select('.header-search__form-button', formSearch)\n\n const fixedHeader = () => {\n const offset = getHeight(el)\n if (getScrollTop() > offset) {\n activateFixedHeader()\n } else {\n deactivateFixedHeader()\n }\n }\n fixedHeader()\n on('scroll', throttle(fixedHeader, 200), window)\n on('click', toggleSlideout, navToggle)\n on('click', toggleSlideout, overlay)\n if (headerSubNavToggles) {\n on('touchstart', function (e) {\n const currentActive = getActivatedSubMenu(el)\n if (currentActive && currentActive !== this) {\n deactivateSubMenu(currentActive)\n }\n if (!isSubMenuActivated(this)) {\n activateSubMenu(this)\n e.preventDefault()\n }\n }, headerSubNavToggles)\n }\n\n const formSearchActivate = () => toggleClass(HEADER_SEARCH_ACTIVE, formSearch)\n if (buttonSearch && formSearch) {\n on('click', formSearchActivate, buttonSearch)\n on('click', formSearchActivate, buttonFormSearch)\n }\n}\n","import on from 'dom-event'\nimport { select } from 'modules/dom'\nimport Layzr from 'layzr.js'\nimport throttle from 'lodash.throttle'\n\nconst wrapper = select('.wrapper')\n\nconst instance = window.layzr = Layzr({\n threshold: 100\n})\n\nconst doesSupportObjectFit = () => {\n const i = document.createElement('img')\n return ('objectFit' in i.style)\n}\nconst objectFit = doesSupportObjectFit()\nif (!objectFit) document.body.classList.add('no-object-fit')\n\ninstance\n .on('src:before', image => {\n on(image, 'load', (event) => {\n let wrapper = image.parentNode\n wrapper.classList.add('image--loaded')\n })\n })\n\ninstance\n .on('src:after', el => {\n const wrapper = el.parentNode\n if (!wrapper.classList.contains('js-wrap')) return\n\n if (!objectFit) {\n const src = el.getAttribute('data-normal')\n wrapper.style.backgroundImage = 'url(\"' + src + '\")'\n wrapper.classList.add('image--loaded')\n }\n })\n\nconst updateLazyLoad = () => instance.update().check()\n\nupdateLazyLoad().handlers(true)\n\nif (wrapper) {\n on(wrapper, 'scroll', throttle(updateLazyLoad, 100))\n}\n\nexport default (el) => {\n}\n\nexport {\n updateLazyLoad\n}\n","import { select, getHeight, closest } from 'modules/dom'\n\nconst wrapper = select('.wrapper')\nconst header = select('.header', wrapper)\nconst anchorId = '#jobs-message'\n\nexport default function (el) {\n const anchor = select(anchorId, el)\n if (anchor) {\n const conceptEl = closest('.form__row', anchor)\n const heightHeader = getHeight(header)\n const scroll = conceptEl.getBoundingClientRect().top - heightHeader\n window.scrollTo(0, scroll)\n }\n}\n","import { on, select, selectAll, addClass, removeClass, hasClass, getAttribute, setAttribute, removeAttribute, trigger } from 'modules/dom'\nimport { map } from 'modules/utils'\n\nconst ACTIVE_CLASS = 'local-nav__menu-item--active'\n\nexport default function (el) {\n const triggers = selectAll('.js-menu-item', el)\n const selectEl = select('select', el)\n const currentTextEl = select('.js-current-text', el)\n const activate = (item) => addClass(ACTIVE_CLASS, item)\n // Remove active class on desktop\n // Remove selected in option on mobile\n const reset = () => {\n removeClass(ACTIVE_CLASS, triggers)\n map(\n (option) => {\n removeAttribute('selected', option)\n },\n selectAll('option', selectEl)\n )\n }\n const selectedOnClick = (value) => {\n selectEl.value = value\n setAttribute('selected', true, select('option[value=\"' + value + '\"]'), selectEl)\n trigger('change', selectEl)\n }\n if (triggers && selectEl) {\n // Desktop state\n on('click', (e) => {\n const link = e.target\n const item = e.target.parentNode\n const value = getAttribute('href', link)\n e.preventDefault()\n if (!hasClass(ACTIVE_CLASS, item)) {\n reset()\n activate(item)\n selectedOnClick(value)\n }\n }, triggers)\n // Mobile state\n on('change', () => {\n currentTextEl.innerHTML = select('option[value=\"' + selectEl.value + '\"]').innerHTML\n reset()\n activate(select('a[href=\"' + selectEl.value + '\"]').parentNode)\n }, selectEl)\n }\n}\n","import { addClass, on, select } from 'modules/dom'\n\nconst FORM_LOADED = 'newsletter--loaded'\nconst TIMEOUT = 60\n\nconst initEmbed = (el) => {\n let interval = null\n let tick = 0\n const tag = document.createElement('script')\n\n window._ctct_m = 'e35431543e33d8f1c0aec6f9c307fee5'\n tag.id = 'signupScript'\n tag.src = '//static.ctctcdn.com/js/signup-form-widget/current/signup-form-widget.min.js'\n tag.defer = true\n tag.async = true\n\n on('load', () => {\n interval = setInterval(() => {\n tick += 1\n const stylesheet = select('link[href*=\"signup-form-widget.css\"]')\n const inlineStyle = select('style[id*=\"ctct-form-styles\"]')\n\n if ((stylesheet && inlineStyle) || tick >= TIMEOUT) {\n [stylesheet, inlineStyle].map((style) => style.parentNode.removeChild(style))\n addClass(FORM_LOADED, el)\n clearInterval(interval)\n }\n }, 1000)\n }, tag)\n\n document.body.appendChild(tag)\n}\n\nexport default function (el) {\n initEmbed(el)\n}\n","import { select, selectAll, on, getAttribute, getHeight, getScrollTop, scrollTop } from 'modules/dom'\n\nexport default function (el) {\n const links = selectAll('a', el)\n links.map((link) => {\n const href = getAttribute('href', link)\n const hash = href[0] === '#'\n if (hash) {\n on(\n 'click',\n function () {\n const target = select(href)\n const offset = target.getBoundingClientRect().top + getScrollTop() - getHeight(select('.header'))\n if (offset) {\n scrollTop(offset, undefined)\n }\n },\n link\n )\n }\n })\n}\n","import { select, addClass, removeClass, on } from 'modules/dom'\nimport Flickity from 'flickity'\n\nexport default function (el) {\n const list = select('.js-slider', el)\n const options = {\n cellAlign: 'center',\n pageDots: true,\n wrapAround: true,\n arrowShape: {\n x0: 10,\n x1: 50,\n y1: 40,\n x2: 60,\n y2: 35,\n x3: 25\n }\n }\n if (list.childElementCount > 1) {\n const slider = new Flickity(list, options)\n const adjustHeight = () => {\n slider.resize()\n addClass('is-initialized', list)\n }\n on('load', () => {\n removeClass('is-initialized', list)\n adjustHeight()\n }, window)\n\n adjustHeight()\n }\n}\n","import { on, selectAll } from 'modules/dom'\n\nfunction SelectField (el) {\n var t = this\n t.el = el\n t.fieldMobile = t.el.querySelector('[data-field-mobile]')\n t.fieldDesktop = t.el.querySelector('[data-field-desktop]')\n t.fieldCurrent = t.el.querySelector('[data-field-current]')\n\n if (t.fieldMobile && t.fieldDesktop && t.fieldCurrent) {\n t.dropdownItems = Array.prototype.slice.call(t.fieldDesktop.querySelectorAll('li'))\n // If not placeholder then select first item\n if (t.fieldCurrent.innerHTML === '') {\n t.selectFirstItem()\n }\n\n // Add active state to field group\n t.activeState()\n\n // Close Drop down when click outside\n t.clickOutside()\n\n // If select on desktop\n t.selectDesktop()\n\n // If select on mobile\n t.selectMobile()\n }\n}\n\nSelectField.prototype.selectFirstItem = function () {\n var t = this\n var selectedItem = t.fieldDesktop.querySelector('li:first-child')\n\n if (t.fieldMobile.value) {\n selectedItem = t.fieldDesktop.querySelector('li[data-value=\"' + t.fieldMobile.value + '\"]')\n } else {\n t.fieldMobile.value = selectedItem.getAttribute('data-value')\n }\n\n t.fieldCurrent.innerHTML = selectedItem.innerHTML\n}\n\nSelectField.prototype.activeState = function () {\n var t = this\n t.fieldCurrent.addEventListener('click', function () {\n t.el.classList.toggle('select-field--active')\n })\n}\n\nSelectField.prototype.selectDesktop = function () {\n var t = this\n // TODO: Event Delegation\n const items = selectAll('.select-field__dropdown-item', t.el)\n on('click', function () {\n var data = this.getAttribute('data-value')\n t.removeSelectActive()\n this.classList.add('active')\n t.fieldCurrent.innerHTML = this.innerHTML\n t.fieldMobile.value = data\n if (t.callback) {\n t.callback(t.fieldMobile.value)\n }\n t.el.classList.remove('select-field--active')\n }, items)\n}\n\nSelectField.prototype.selectMobile = function () {\n var t = this\n t.fieldMobile.addEventListener('change', function () {\n var data = this.value\n var currentItem = t.fieldMobile.querySelector('[value=\"' + data + '\"]')\n t.fieldCurrent.innerHTML = currentItem.innerHTML\n t.removeSelectActive()\n t.fieldDesktop.querySelector('[data-value=\"' + data + '\"]').classList.add('active')\n if (t.callback) {\n t.callback(t.fieldMobile.value)\n }\n })\n}\n\nSelectField.prototype.removeSelectActive = function () {\n var t = this\n t.dropdownItems.forEach(function (otherItem) {\n otherItem.classList.remove('active')\n })\n}\n\nSelectField.prototype.clickOutside = function () {\n var t = this\n document.addEventListener('click', function (e) {\n if ((!e.target.hasAttribute('data-field-current') && e.target !== t.fieldMobile) || (e.target !== t.fieldCurrent && e.target !== t.fieldMobile)) {\n t.el.classList.remove('select-field--active')\n }\n })\n}\n\nSelectField.prototype.onChange = function (callback) {\n this.callback = callback\n}\n\nmodule.exports = SelectField\n","import { on, select } from 'modules/dom'\n\nexport default function (el) {\n const formSelect = select('select', el)\n const selectCurrent = select('.form__select-current', el)\n const selectedText = () => {\n const text = formSelect.options[formSelect.selectedIndex].text\n selectCurrent.innerHTML = text\n }\n on('change', selectedText, formSelect)\n on('load', selectedText, window)\n}\n","import { on, select, selectAll, addClass, removeClass, hasClass, setStyle } from \"modules/dom\"\n\nconst ACCORDION_TITLE_SELECTOR = '.js-trigger'\nconst ACCORDION_CONTENT_SELECTOR = '.js-content'\nconst ACCORDION_CONTENT_INNER_SELECTOR = '.js-content-inner'\nconst ACTIVE_CLASS = 'active'\n\nexport default el => {\n const accordionTitles = selectAll(ACCORDION_TITLE_SELECTOR, el)\n\n const activateItem = (item) => addClass(ACTIVE_CLASS, item)\n\n const deactivateItem = (item) => removeClass(ACTIVE_CLASS, item)\n\n const toggleItem = (event) => {\n const item = event.currentTarget.parentNode\n const itemContent = select(ACCORDION_CONTENT_SELECTOR, item)\n const itemContentInner = select(ACCORDION_CONTENT_INNER_SELECTOR, item)\n const contentHeight = itemContentInner.offsetHeight\n\n if (hasClass(ACTIVE_CLASS, item)) {\n deactivateItem(item)\n setStyle('max-height', 0, itemContent)\n } else {\n activateItem(item)\n setStyle('max-height', contentHeight + 'px', itemContent)\n }\n }\n\n if (accordionTitles.length) {\n on('click', (event) => {\n toggleItem(event)\n }, accordionTitles)\n }\n}\n","import { getAttribute } from 'modules/dom'\nimport Clipboard from 'clipboard'\nexport default function (el) {\n const pageLink = getAttribute('data-clip-board', el)\n return new Clipboard(el, {\n text: function () {\n return pageLink\n }\n })\n}\n","/* global requestAnimationFrame */\nimport { on, select, selectAll, addClass, removeClass, getData, toggleClass } from 'modules/dom'\nimport { map, makeArray } from 'modules/utils'\nimport stickyFill from 'stickyfill'\nimport throttle from 'lodash.throttle'\n\nconst TAB_LINK_SELECTOR = '.js-tab-link'\nconst TAB_CONTENT_SELECTOR = '.js-tab-content'\nconst TAB_SELECT_FIELD_SELECTOR = '.js-select'\nconst TAB_NAV_SELECTOR = '.js-nav'\nconst TAB_NAV_CURRENT = '.js-nav-current'\nconst ACTIVE_CLASS = 'active'\nconst FIXED_CLASS = 'fixed'\nconst initStickyFill = stickyFill()\n\n/**\n * Fadeout function\n * @param el\n */\nconst fadeOut = (el) => {\n el.style.opacity = 1;\n const fade = () => {\n if ((el.style.opacity -= 0.1) < 0) {\n el.style.display = 'none'\n } else {\n requestAnimationFrame(fade)\n }\n }\n fade()\n}\n\n/**\n * Fadein function\n * @param el\n */\nconst fadeIn = (el) => {\n el.style.opacity = 0;\n el.style.display = 'block';\n const fade = () => {\n let val = parseFloat(el.style.opacity)\n if (!((val += 0.1) > 1)) {\n el.style.opacity = val\n requestAnimationFrame(fade)\n }\n }\n fade()\n}\n\nexport default el => {\n const tabLinks = selectAll(TAB_LINK_SELECTOR, el)\n const tabContents = selectAll(TAB_CONTENT_SELECTOR, el)\n const tabNav = select(TAB_NAV_SELECTOR, el)\n const tabNavCurrent = select(TAB_NAV_CURRENT, el)\n const tabSelectField = select(TAB_SELECT_FIELD_SELECTOR, el)\n let tabIndex = 0\n\n /**\n * Close all tabs except current activated one\n */\n const closeAllTabs = () => {\n removeClass(ACTIVE_CLASS, tabLinks)\n map((tab, index) => {\n if (index !== tabIndex) fadeOut(tab)\n }, tabContents)\n removeClass(ACTIVE_CLASS, tabContents)\n }\n\n /**\n * Activate tab by tab index\n */\n const activateTab = () => {\n closeAllTabs()\n const tabLinksArr = makeArray(tabLinks)\n const tabContentsArr = makeArray(tabContents)\n addClass(ACTIVE_CLASS, tabLinksArr[tabIndex])\n fadeIn(tabContentsArr[tabIndex])\n addClass(ACTIVE_CLASS, tabContentsArr[tabIndex])\n }\n\n /**\n * Tab links click handler\n */\n if (tabLinks && tabContents) {\n on('click', (event) => {\n event.preventDefault()\n const clickedEl = event.currentTarget\n tabIndex = parseInt(getData('index', clickedEl))\n activateTab()\n tabSelectField.values = tabIndex\n tabNavCurrent.innerHTML = clickedEl.innerHTML\n }, tabLinks)\n }\n\n /**\n * Sticky on mobile handler\n */\n if (tabNav) {\n initStickyFill.add(tabNav)\n on('click', () => {\n toggleClass(ACTIVE_CLASS, tabNav)\n }, tabNav)\n on('scroll', throttle(() => {\n const tabNavOffsetTop = tabNav.offsetTop + 40\n if (tabNavOffsetTop > 40) {\n addClass(FIXED_CLASS, tabNavCurrent)\n } else {\n removeClass(FIXED_CLASS, tabNavCurrent)\n }\n }, 200), window)\n }\n\n /**\n * Mobile select handler\n */\n if (tabSelectField) {\n on('change', () => {\n const optionIndex = parseInt(tabSelectField.value)\n const selectedIndex = tabSelectField.selectedIndex\n const optionText = tabSelectField.options[selectedIndex].text\n\n tabNavCurrent.innerHTML = optionText\n tabIndex = optionIndex\n activateTab()\n }, tabSelectField)\n }\n}\n","import twitterFetcher from 'twitter-fetcher'\nimport { select, getData } from 'modules/dom'\n\nconst TWITTER_FEED_SELECTOR = '.js-twitter-feed'\nexport default function (el) {\n const screenName = getData('twitter-username', el)\n const template = (tweets) => {\n const element = select(TWITTER_FEED_SELECTOR, el)\n if (element) {\n let html = '
    '\n for (let i = 0; i < tweets.length; i++) {\n const tweetObject = tweets[i]\n const tweetImage = tweetObject.image ? `
    ` : ''\n html += `
  • \n
    \n
    \n
    \n \"${tweetObject.author_data.name}\"\n
    \n
    \n ${tweetObject.author_data.name}\n ${tweetObject.time}\n
    \n
    \n
    ${tweetObject.tweet}
    \n ${tweetImage}\n
    \n \n \n \n
    \n
    \n
  • `\n }\n html += '
'\n element.innerHTML = html\n }\n }\n if (screenName) {\n const twitterConfig = {\n 'profile': {\n 'screenName': screenName\n },\n 'showImages': true,\n 'maxTweets': 3,\n 'dataOnly': true,\n 'customCallback': template\n }\n twitterFetcher.fetch(twitterConfig)\n }\n}\n","/**\n * Function that always returns True\n */\nconst returnTrue = () => true\n\n/**\n * Function that always returns false\n */\nconst returnFalse = () => false\n\n/**\n * Identity function\n * @param {*} val\n * @return {*}\n */\nconst identity = (val) => val\n\nconst not = (val) => !val\n\n/**\n * Returns a curried function of the provided function, so that:\n *\n * f(a, b, c) = f(a, b)(c) = f(a)(b)(c) = f(a)(b, c)\n *\n * @param {Function} f\n * @param {..*} Initial parameters\n * @return {Function} The curried function\n */\nconst curry = (f, ...args) => args.length >= f.length ? f(...args) : curry.bind(this, f, ...args)\n\nconst allPass = (fs) => (...args) => {\n for (let i = 0; i < fs.length; i++) {\n if (!fs[ i ].apply(this, args)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Takes in a list of predicates and return a function that will\n * pass its arguments through each of the predicates, returning\n * true if any predicate is satisfied.\n *\n * @param {Array}\n * @return {Function}\n */\nconst anyPass = (fs) => (...args) => {\n for (let i = 0; i < fs.length; i++) {\n if (fs[ i ].apply(this, args)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Encapsulates switch/case or if/else logic.\n *\n * Takes a list of [predicate, transformer] pairs.\n *\n * The returned function passes its arguments to predicates, evaluates them, and execute the matched transformer (passing the\n * same arguments). If there's no matched predicate, return undefined.\n *\n * @param pairs Pairs of [predicate, transformer]\n * @return {Function} Encapsulated function\n */\nconst cond = (pairs) => (...args) => {\n for (let i = 0; i < pairs.length; i++) {\n if (pairs[ i ][ 0 ].apply(this, args)) {\n return pairs[ i ][ 1 ].apply(this, args)\n }\n }\n\n return undefined\n}\n\n/**\n * Encapsulate if/else logic. Basically a wrapper of `cond`.\n *\n * @param p Predicate\n * @param {Function} fT Function to call when predicate is true\n * @param {Function} fF Function to call when predicate is false\n * @return {Function} Encapsulated function\n */\nconst ifElse = (p, fT, fF) => cond([ [ p, fT ], [ returnTrue, fF ] ])\n\nconst when = (p, f) => cond([ [ p, f ], [ returnTrue, identity ] ])\n\n/**\n * Functional wrapper for array map function.\n *\n * @param {Function} f\n * @param {*} arr\n */\nconst map = curry((f, arr) => Array.isArray(arr) ? arr.map(f) : f(arr))\n\nconst filter = curry((f, arr) => Array.isArray(arr) ? arr.filter(f) : (f(arr) ? arr : undefined))\n\n/**\n * Partial application\n * @param {Function} f\n * @param {..*} args Initial parameters\n */\nconst partial = (f, ...args) => f.bind(this, ...args)\n\n/**\n * Transform a value by chaining a list of function from left to right\n *\n * @param val\n * @param {..Function} funcs\n * @return {*}\n */\nconst pipe = (...funcs) => function (val) { return funcs.reduce((acc, f) => f.apply(this, [ acc ]), val) }\n\nconst always = (val) => partial(val)\n\n/**\n * Get property of an object.\n *\n * This is a curried function.\n *\n * @param {string} prop\n * @param {Object} obj\n * @return {*}\n */\nconst getProp = curry((prop, obj) => {\n return obj[prop]\n})\n\nconst lt = curry((b, a) => a < b)\n\nconst setProp = curry((prop, value, obj) => {\n obj[ prop ] = value\n})\n\n/**\n * Encapsulate try/catch logic.\n *\n * Takes a pair of tryer and catcher functions. User must ensure tryer and catcher return the same\n * type so that chaining / composing works.\n *\n * Returns a function that can take arguments, which will be passed to both tryer and catcher.\n *\n * @param {Function} tryer\n * @param {Function} catcher\n * @return {Function} Encapsulated function\n */\nconst tryCatch = (tryer, catcher) => (...args) => {\n try {\n return tryer(...args)\n } catch (e) {\n return catcher(e, ...args)\n }\n}\n\nconst whileDo = (pred, fn, initial) => pred(initial) ? whileDo(pred, fn, fn(initial)) : initial\n\nconst divide = curry((b, a) => a / b)\nconst multiply = curry((b, a) => a * b)\n\n/**\n * Check if an array contains an item.\n *\n * This is a curried wrapper for Array.prototype.indexOf\n *\n * @param {Array}\n * @param {*}\n * @return {boolean}\n */\nconst inArray = curry((array, item) => array.indexOf(item) !== -1)\n\n/**\n * Get the nth element of an array\n *\n * @param {number}\n * @param {Array}\n * @return {*}\n */\nconst nth = curry((index, array) => index < 0 ? array[ array.length + index ] : array[ index ])\n\n/**\n * Get the nth element of an array\n *\n * @param {Array}\n * @return {*}\n */\nconst first = nth(1)\n\nconst last = nth(-1)\nconst add = curry((b, a) => a + b)\nconst _add1ToLast = pipe(last, add(1))\n\nconst range = (from, to) => whileDo(\n pipe(_add1ToLast, lt(to)),\n (array) => [ ...array, _add1ToLast(array) ],\n [ from ]\n)\n\nconst flipArgs = (f) => curry((arg1, arg2) => f.apply(this, [ arg2, arg1 ]))\n\nconst count = (arr) => arr.length\n\n/**\n * Create an array out of an array-like object\n *\n * @param {Object} Array-like object\n * @return {Array} Array\n */\nconst makeArray = (arrayLike) => Array.prototype.slice.call(arrayLike)\n\n/**\n * Log a value to console\n *\n * @param {*} val\n * @returns {*}\n */\nconst log = (val) => {\n console.log(val)\n return val\n}\n\nconst logWrap = (fn) => (...args) => log(fn.apply(this, args))\n\nconst logArgs = (fn) => (...args) => {\n log(args)\n return fn.apply(this, args)\n}\n\nconst debounce = (callback, wait, context = this) => {\n let timeout = null\n let callbackArgs = null\n\n const later = () => callback.apply(context, callbackArgs)\n\n return function () {\n callbackArgs = arguments\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n }\n}\n\nconst then = curry((f, promise) => promise.then(f))\n\nexport {\n add,\n allPass,\n always,\n anyPass,\n cond,\n count,\n debounce,\n log,\n logArgs,\n logWrap,\n makeArray,\n curry,\n divide,\n filter,\n first,\n flipArgs,\n getProp,\n identity,\n ifElse,\n inArray,\n last,\n lt,\n map,\n multiply,\n not,\n nth,\n partial,\n pipe,\n range,\n returnTrue,\n returnFalse,\n setProp,\n then,\n tryCatch,\n when,\n whileDo\n}\n","import { on, addClass, getAttribute, select, hasClass } from 'modules/dom'\n\nconst VIDEO_ACTIVE_CLASS = 'modal--active'\nconst body = document.body\n\nexport default function (el) {\n const data = getAttribute('data-video-modal', el)\n const modal = select('#' + data)\n const video = select('video', modal)\n\n const activateVideoModal = () => {\n addClass(VIDEO_ACTIVE_CLASS, body)\n addClass(VIDEO_ACTIVE_CLASS, modal)\n video.play()\n }\n if (hasClass('video-control-panel', el.parentNode)) {\n on('click', activateVideoModal, el.parentNode)\n } else {\n on('click', activateVideoModal, el)\n }\n}\n","import { select, on, removeClass, getAttribute } from 'modules/dom'\n\nconst VIDEO_ACTIVE_CLASS = 'modal--active'\nconst body = document.body\n\nexport default function (el) {\n const closeButton = select('.js-modal-close', el)\n const modalContainer = select('.video-modal__container', el)\n const modalOverlay = select('.video-modal__overlay', el)\n const iframe = select('iframe', el)\n const video = select('video', el)\n const stopVideo = () => {\n if (iframe) {\n iframe.setAttribute('src', getAttribute('src', iframe))\n } else {\n video.pause()\n }\n }\n const deactivateVideoModal = () => {\n removeClass(VIDEO_ACTIVE_CLASS, body)\n removeClass(VIDEO_ACTIVE_CLASS, el)\n stopVideo()\n }\n on('click', deactivateVideoModal, closeButton)\n on('click', deactivateVideoModal, modalOverlay)\n on('click', deactivateVideoModal, modalContainer)\n}\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\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 = on;\nmodule.exports.on = on;\nmodule.exports.off = off;\n\nfunction on (element, event, callback, capture) {\n !element.addEventListener && (event = 'on' + event);\n (element.addEventListener || element.attachEvent).call(element, event, callback, capture);\n return callback;\n}\n\nfunction off (element, event, callback, capture) {\n !element.removeEventListener && (event = 'on' + event);\n (element.removeEventListener || element.detachEvent).call(element, event, callback, capture);\n return callback;\n}\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","// 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","// 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","// 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","// 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","// 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","/*!\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","// 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","// 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","// 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","// 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","// 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","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n","var is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.Layzr = factory());\n}(this, (function () { 'use strict';\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar knot = function knot() {\n var extended = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var events = Object.create(null);\n\n function on(name, handler) {\n events[name] = events[name] || [];\n events[name].push(handler);\n return this;\n }\n\n function once(name, handler) {\n handler._once = true;\n on(name, handler);\n return this;\n }\n\n function off(name) {\n var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n handler ? events[name].splice(events[name].indexOf(handler), 1) : delete events[name];\n\n return this;\n }\n\n function emit(name) {\n var _this = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n // cache the events, to avoid consequences of mutation\n var cache = events[name] && events[name].slice();\n\n // only fire handlers if they exist\n cache && cache.forEach(function (handler) {\n // remove handlers added with 'once'\n handler._once && off(name, handler);\n\n // set 'this' context, pass args to handlers\n handler.apply(_this, args);\n });\n\n return this;\n }\n\n return _extends({}, extended, {\n\n on: on,\n once: once,\n off: off,\n emit: emit\n });\n};\n\nvar layzr = (function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // private\n\n var prevLoc = getLoc();\n var ticking = void 0;\n\n var nodes = void 0;\n var windowHeight = void 0;\n\n // options\n\n var settings = {\n normal: options.normal || 'data-normal',\n retina: options.retina || 'data-retina',\n srcset: options.srcset || 'data-srcset',\n threshold: options.threshold || 0\n };\n\n // feature detection\n // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/img/srcset.js\n\n var srcset = document.body.classList.contains('srcset') || 'srcset' in document.createElement('img');\n\n // device pixel ratio\n // not supported in IE10 - https://msdn.microsoft.com/en-us/library/dn265030(v=vs.85).aspx\n\n var dpr = window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI;\n\n // instance\n\n var instance = knot({\n handlers: handlers,\n check: check,\n update: update\n });\n\n return instance;\n\n // location helper\n\n function getLoc() {\n return window.scrollY || window.pageYOffset;\n }\n\n // debounce helpers\n\n function requestScroll() {\n prevLoc = getLoc();\n requestFrame();\n }\n\n function requestFrame() {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n return check();\n });\n ticking = true;\n }\n }\n\n // offset helper\n\n function getOffset(node) {\n return node.getBoundingClientRect().top + prevLoc;\n }\n\n // in viewport helper\n\n function inViewport(node) {\n var viewTop = prevLoc;\n var viewBot = viewTop + windowHeight;\n\n var nodeTop = getOffset(node);\n var nodeBot = nodeTop + node.offsetHeight;\n\n var offset = settings.threshold / 100 * windowHeight;\n\n return nodeBot >= viewTop - offset && nodeTop <= viewBot + offset;\n }\n\n // source helper\n\n function setSource(node) {\n instance.emit('src:before', node);\n\n // prefer srcset, fallback to pixel density\n if (srcset && node.hasAttribute(settings.srcset)) {\n node.setAttribute('srcset', node.getAttribute(settings.srcset));\n } else {\n var retina = dpr > 1 && node.getAttribute(settings.retina);\n node.setAttribute('src', retina || node.getAttribute(settings.normal));\n }\n\n instance.emit('src:after', node);[settings.normal, settings.retina, settings.srcset].forEach(function (attr) {\n return node.removeAttribute(attr);\n });\n\n update();\n }\n\n // API\n\n function handlers(flag) {\n var action = flag ? 'addEventListener' : 'removeEventListener';['scroll', 'resize'].forEach(function (event) {\n return window[action](event, requestScroll);\n });\n return this;\n }\n\n function check() {\n windowHeight = window.innerHeight;\n\n nodes.forEach(function (node) {\n return inViewport(node) && setSource(node);\n });\n\n ticking = false;\n return this;\n }\n\n function update() {\n nodes = Array.prototype.slice.call(document.querySelectorAll('[' + settings.normal + ']'));\n return this;\n }\n});\n\nreturn layzr;\n\n})));\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","// Best place to find information on XHR features is:\n// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n\nvar reqfields = [\n 'responseType', 'withCredentials', 'timeout', 'onprogress'\n]\n\n// Simple and small ajax function\n// Takes a parameters object and a callback function\n// Parameters:\n// - url: string, required\n// - headers: object of `{header_name: header_value, ...}`\n// - body:\n// + string (sets content type to 'application/x-www-form-urlencoded' if not set in headers)\n// + FormData (doesn't set content type so that browser will set as appropriate)\n// - method: 'GET', 'POST', etc. Defaults to 'GET' or 'POST' based on body\n// - cors: If your using cross-origin, you will need this true for IE8-9\n//\n// The following parameters are passed onto the xhr object.\n// IMPORTANT NOTE: The caller is responsible for compatibility checking.\n// - responseType: string, various compatability, see xhr docs for enum options\n// - withCredentials: boolean, IE10+, CORS only\n// - timeout: long, ms timeout, IE8+\n// - onprogress: callback, IE10+\n//\n// Callback function prototype:\n// - statusCode from request\n// - response\n// + if responseType set and supported by browser, this is an object of some type (see docs)\n// + otherwise if request completed, this is the string text of the response\n// + if request is aborted, this is \"Abort\"\n// + if request times out, this is \"Timeout\"\n// + if request errors before completing (probably a CORS issue), this is \"Error\"\n// - request object\n//\n// Returns the request object. So you can call .abort() or other methods\n//\n// DEPRECATIONS:\n// - Passing a string instead of the params object has been removed!\n//\nexports.ajax = function (params, callback) {\n // Any variable used more than once is var'd here because\n // minification will munge the variables whereas it can't munge\n // the object access.\n var headers = params.headers || {}\n , body = params.body\n , method = params.method || (body ? 'POST' : 'GET')\n , called = false\n\n var req = getRequest(params.cors)\n\n function cb(statusCode, responseText) {\n return function () {\n if (!called) {\n callback(req.status === undefined ? statusCode : req.status,\n req.status === 0 ? \"Error\" : (req.response || req.responseText || responseText),\n req)\n called = true\n }\n }\n }\n\n req.open(method, params.url, true)\n\n var success = req.onload = cb(200)\n req.onreadystatechange = function () {\n if (req.readyState === 4) success()\n }\n req.onerror = cb(null, 'Error')\n req.ontimeout = cb(null, 'Timeout')\n req.onabort = cb(null, 'Abort')\n\n if (body) {\n setDefault(headers, 'X-Requested-With', 'XMLHttpRequest')\n\n if (!global.FormData || !(body instanceof global.FormData)) {\n setDefault(headers, 'Content-Type', 'application/x-www-form-urlencoded')\n }\n }\n\n for (var i = 0, len = reqfields.length, field; i < len; i++) {\n field = reqfields[i]\n if (params[field] !== undefined)\n req[field] = params[field]\n }\n\n for (var field in headers)\n req.setRequestHeader(field, headers[field])\n\n req.send(body)\n\n return req\n}\n\nfunction getRequest(cors) {\n // XDomainRequest is only way to do CORS in IE 8 and 9\n // But XDomainRequest isn't standards-compatible\n // Notably, it doesn't allow cookies to be sent or set by servers\n // IE 10+ is standards-compatible in its XMLHttpRequest\n // but IE 10 can still have an XDomainRequest object, so we don't want to use it\n if (cors && global.XDomainRequest && !/MSIE 1/.test(navigator.userAgent))\n return new XDomainRequest\n if (global.XMLHttpRequest)\n return new XMLHttpRequest\n}\n\nfunction setDefault(obj, key, value) {\n obj[key] = obj[key] || value\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n","/*!\n * Stickyfill -- `position: sticky` polyfill\n * v. 1.1.1 | https://github.com/wilddeer/stickyfill\n * Copyright Oleg Korsunsky | http://wd.dizaina.net/\n *\n * MIT License\n */\n\nmodule.exports = (function(doc, win) {\n if (!doc) {\n doc = document;\n }\n\n if (!win) {\n win = window;\n }\n\n var watchArray = [],\n scroll,\n initialized = false,\n html = doc.documentElement,\n noop = function() {},\n checkTimer,\n\n //visibility API strings\n hiddenPropertyName = 'hidden',\n visibilityChangeEventName = 'visibilitychange';\n\n //fallback to prefixed names in old webkit browsers\n if (doc.webkitHidden !== undefined) {\n hiddenPropertyName = 'webkitHidden';\n visibilityChangeEventName = 'webkitvisibilitychange';\n }\n\n //test getComputedStyle\n if (!win.getComputedStyle) {\n seppuku();\n }\n\n //test for native support\n var prefixes = ['', '-webkit-', '-moz-', '-ms-'],\n block = document.createElement('div');\n\n for (var i = prefixes.length - 1; i >= 0; i--) {\n try {\n block.style.position = prefixes[i] + 'sticky';\n }\n catch(e) {}\n if (block.style.position != '') {\n seppuku();\n }\n }\n\n updateScrollPos();\n\n //commit seppuku!\n function seppuku() {\n init = add = rebuild = pause = stop = kill = noop;\n }\n\n function mergeObjects(targetObj, sourceObject) {\n for (var key in sourceObject) {\n if (sourceObject.hasOwnProperty(key)) {\n targetObj[key] = sourceObject[key];\n }\n }\n }\n\n function parseNumeric(val) {\n return parseFloat(val) || 0;\n }\n\n function updateScrollPos() {\n scroll = {\n top: win.pageYOffset,\n left: win.pageXOffset\n };\n }\n\n function onScroll() {\n if (win.pageXOffset != scroll.left) {\n updateScrollPos();\n rebuild();\n return;\n }\n\n if (win.pageYOffset != scroll.top) {\n updateScrollPos();\n recalcAllPos();\n }\n }\n\n //fixes flickering\n function onWheel(event) {\n setTimeout(function() {\n if (win.pageYOffset != scroll.top) {\n scroll.top = win.pageYOffset;\n recalcAllPos();\n }\n }, 0);\n }\n\n function recalcAllPos() {\n for (var i = watchArray.length - 1; i >= 0; i--) {\n recalcElementPos(watchArray[i]);\n }\n }\n\n function recalcElementPos(el) {\n if (!el.inited) return;\n\n var currentMode = (scroll.top <= el.limit.start? 0: scroll.top >= el.limit.end? 2: 1);\n\n if (el.mode != currentMode) {\n switchElementMode(el, currentMode);\n }\n }\n\n //checks whether stickies start or stop positions have changed\n function fastCheck() {\n for (var i = watchArray.length - 1; i >= 0; i--) {\n if (!watchArray[i].inited) continue;\n\n var deltaTop = Math.abs(getDocOffsetTop(watchArray[i].clone) - watchArray[i].docOffsetTop),\n deltaHeight = Math.abs(watchArray[i].parent.node.offsetHeight - watchArray[i].parent.height);\n\n if (deltaTop >= 2 || deltaHeight >= 2) return false;\n }\n return true;\n }\n\n function initElement(el) {\n if (isNaN(parseFloat(el.computed.top)) || el.isCell) return;\n\n el.inited = true;\n\n if (!el.clone) clone(el);\n if (el.parent.computed.position != 'absolute' &&\n el.parent.computed.position != 'relative') el.parent.node.style.position = 'relative';\n\n recalcElementPos(el);\n\n el.parent.height = el.parent.node.offsetHeight;\n el.docOffsetTop = getDocOffsetTop(el.clone);\n }\n\n function deinitElement(el) {\n var deinitParent = true;\n\n el.clone && killClone(el);\n mergeObjects(el.node.style, el.css);\n\n //check whether element's parent is used by other stickies\n for (var i = watchArray.length - 1; i >= 0; i--) {\n if (watchArray[i].node !== el.node && watchArray[i].parent.node === el.parent.node) {\n deinitParent = false;\n break;\n }\n };\n\n if (deinitParent) el.parent.node.style.position = el.parent.css.position;\n el.mode = -1;\n }\n\n function initAll() {\n for (var i = watchArray.length - 1; i >= 0; i--) {\n initElement(watchArray[i]);\n }\n }\n\n function deinitAll() {\n for (var i = watchArray.length - 1; i >= 0; i--) {\n deinitElement(watchArray[i]);\n }\n }\n\n function switchElementMode(el, mode) {\n var nodeStyle = el.node.style;\n\n switch (mode) {\n case 0:\n nodeStyle.position = 'absolute';\n nodeStyle.left = el.offset.left + 'px';\n nodeStyle.right = el.offset.right + 'px';\n nodeStyle.top = el.offset.top + 'px';\n nodeStyle.bottom = 'auto';\n nodeStyle.width = 'auto';\n nodeStyle.marginLeft = 0;\n nodeStyle.marginRight = 0;\n nodeStyle.marginTop = 0;\n break;\n\n case 1:\n nodeStyle.position = 'fixed';\n nodeStyle.left = el.box.left + 'px';\n nodeStyle.right = el.box.right + 'px';\n nodeStyle.top = el.css.top;\n nodeStyle.bottom = 'auto';\n nodeStyle.width = 'auto';\n nodeStyle.marginLeft = 0;\n nodeStyle.marginRight = 0;\n nodeStyle.marginTop = 0;\n break;\n\n case 2:\n nodeStyle.position = 'absolute';\n nodeStyle.left = el.offset.left + 'px';\n nodeStyle.right = el.offset.right + 'px';\n nodeStyle.top = 'auto';\n nodeStyle.bottom = 0;\n nodeStyle.width = 'auto';\n nodeStyle.marginLeft = 0;\n nodeStyle.marginRight = 0;\n break;\n }\n\n el.mode = mode;\n }\n\n function clone(el) {\n el.clone = document.createElement('div');\n\n var refElement = el.node.nextSibling || el.node,\n cloneStyle = el.clone.style;\n\n cloneStyle.height = el.height + 'px';\n cloneStyle.width = el.width + 'px';\n cloneStyle.marginTop = el.computed.marginTop;\n cloneStyle.marginBottom = el.computed.marginBottom;\n cloneStyle.marginLeft = el.computed.marginLeft;\n cloneStyle.marginRight = el.computed.marginRight;\n cloneStyle.padding = cloneStyle.border = cloneStyle.borderSpacing = 0;\n cloneStyle.fontSize = '1em';\n cloneStyle.position = 'static';\n cloneStyle.cssFloat = el.computed.cssFloat;\n\n el.node.parentNode.insertBefore(el.clone, refElement);\n }\n\n function killClone(el) {\n el.clone.parentNode.removeChild(el.clone);\n el.clone = undefined;\n }\n\n function getElementParams(node) {\n var computedStyle = getComputedStyle(node),\n parentNode = node.parentNode,\n parentComputedStyle = getComputedStyle(parentNode),\n cachedPosition = node.style.position;\n\n node.style.position = 'relative';\n\n var computed = {\n top: computedStyle.top,\n marginTop: computedStyle.marginTop,\n marginBottom: computedStyle.marginBottom,\n marginLeft: computedStyle.marginLeft,\n marginRight: computedStyle.marginRight,\n cssFloat: computedStyle.cssFloat\n },\n numeric = {\n top: parseNumeric(computedStyle.top),\n marginBottom: parseNumeric(computedStyle.marginBottom),\n paddingLeft: parseNumeric(computedStyle.paddingLeft),\n paddingRight: parseNumeric(computedStyle.paddingRight),\n borderLeftWidth: parseNumeric(computedStyle.borderLeftWidth),\n borderRightWidth: parseNumeric(computedStyle.borderRightWidth)\n };\n\n node.style.position = cachedPosition;\n\n var css = {\n position: node.style.position,\n top: node.style.top,\n bottom: node.style.bottom,\n left: node.style.left,\n right: node.style.right,\n width: node.style.width,\n marginTop: node.style.marginTop,\n marginLeft: node.style.marginLeft,\n marginRight: node.style.marginRight\n },\n nodeOffset = getElementOffset(node),\n parentOffset = getElementOffset(parentNode),\n\n parent = {\n node: parentNode,\n css: {\n position: parentNode.style.position\n },\n computed: {\n position: parentComputedStyle.position\n },\n numeric: {\n borderLeftWidth: parseNumeric(parentComputedStyle.borderLeftWidth),\n borderRightWidth: parseNumeric(parentComputedStyle.borderRightWidth),\n borderTopWidth: parseNumeric(parentComputedStyle.borderTopWidth),\n borderBottomWidth: parseNumeric(parentComputedStyle.borderBottomWidth)\n }\n },\n\n el = {\n node: node,\n box: {\n left: nodeOffset.win.left,\n right: html.clientWidth - nodeOffset.win.right\n },\n offset: {\n top: nodeOffset.win.top - parentOffset.win.top - parent.numeric.borderTopWidth,\n left: nodeOffset.win.left - parentOffset.win.left - parent.numeric.borderLeftWidth,\n right: -nodeOffset.win.right + parentOffset.win.right - parent.numeric.borderRightWidth\n },\n css: css,\n isCell: computedStyle.display == 'table-cell',\n computed: computed,\n numeric: numeric,\n width: nodeOffset.win.right - nodeOffset.win.left,\n height: nodeOffset.win.bottom - nodeOffset.win.top,\n mode: -1,\n inited: false,\n parent: parent,\n limit: {\n start: nodeOffset.doc.top - numeric.top,\n end: parentOffset.doc.top + parentNode.offsetHeight - parent.numeric.borderBottomWidth -\n node.offsetHeight - numeric.top - numeric.marginBottom\n }\n };\n\n return el;\n }\n\n function getDocOffsetTop(node) {\n var docOffsetTop = 0;\n\n while (node) {\n docOffsetTop += node.offsetTop;\n node = node.offsetParent;\n }\n\n return docOffsetTop;\n }\n\n function getElementOffset(node) {\n var box = node.getBoundingClientRect();\n\n return {\n doc: {\n top: box.top + win.pageYOffset,\n left: box.left + win.pageXOffset\n },\n win: box\n };\n }\n\n function startFastCheckTimer() {\n checkTimer = setInterval(function() {\n !fastCheck() && rebuild();\n }, 500);\n }\n\n function stopFastCheckTimer() {\n clearInterval(checkTimer);\n }\n\n function handlePageVisibilityChange() {\n if (!initialized) return;\n\n if (document[hiddenPropertyName]) {\n stopFastCheckTimer();\n }\n else {\n startFastCheckTimer();\n }\n }\n\n function init() {\n if (initialized) return;\n\n updateScrollPos();\n initAll();\n\n win.addEventListener('scroll', onScroll);\n win.addEventListener('wheel', onWheel);\n\n //watch for width changes\n win.addEventListener('resize', rebuild);\n win.addEventListener('orientationchange', rebuild);\n\n //watch for page visibility\n doc.addEventListener(visibilityChangeEventName, handlePageVisibilityChange);\n\n startFastCheckTimer();\n\n initialized = true;\n }\n\n function rebuild() {\n if (!initialized) return;\n\n deinitAll();\n\n for (var i = watchArray.length - 1; i >= 0; i--) {\n watchArray[i] = getElementParams(watchArray[i].node);\n }\n\n initAll();\n }\n\n function pause() {\n win.removeEventListener('scroll', onScroll);\n win.removeEventListener('wheel', onWheel);\n win.removeEventListener('resize', rebuild);\n win.removeEventListener('orientationchange', rebuild);\n doc.removeEventListener(visibilityChangeEventName, handlePageVisibilityChange);\n\n stopFastCheckTimer();\n\n initialized = false;\n }\n\n function stop() {\n pause();\n deinitAll();\n }\n\n function kill() {\n stop();\n\n //empty the array without loosing the references,\n //the most performant method according to http://jsperf.com/empty-javascript-array\n while (watchArray.length) {\n watchArray.pop();\n }\n }\n\n function add(node) {\n //check if Stickyfill is already applied to the node\n for (var i = watchArray.length - 1; i >= 0; i--) {\n if (watchArray[i].node === node) return;\n };\n\n var el = getElementParams(node);\n\n watchArray.push(el);\n\n if (!initialized) {\n init();\n }\n else {\n initElement(el);\n }\n }\n\n function remove(node) {\n for (var i = watchArray.length - 1; i >= 0; i--) {\n if (watchArray[i].node === node) {\n deinitElement(watchArray[i]);\n watchArray.splice(i, 1);\n }\n };\n }\n\n //expose Stickyfill\n return {\n stickies: watchArray,\n add: add,\n remove: remove,\n init: init,\n rebuild: rebuild,\n pause: pause,\n stop: stop,\n kill: kill\n };\n})\n",";(function() {\n function Tablesort(el, options) {\n if (!(this instanceof Tablesort)) return new Tablesort(el, options);\n\n if (!el || el.tagName !== 'TABLE') {\n throw new Error('Element must be a table');\n }\n this.init(el, options || {});\n }\n\n var sortOptions = [];\n\n var createEvent = function(name) {\n var evt;\n\n if (!window.CustomEvent || typeof window.CustomEvent !== 'function') {\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n } else {\n evt = new CustomEvent(name);\n }\n\n return evt;\n };\n\n var getInnerText = function(el,options) {\n return el.getAttribute(options.sortAttribute || 'data-sort') || el.textContent || el.innerText || '';\n };\n\n // Default sort method if no better sort method is found\n var caseInsensitiveSort = function(a, b) {\n a = a.trim().toLowerCase();\n b = b.trim().toLowerCase();\n\n if (a === b) return 0;\n if (a < b) return 1;\n\n return -1;\n };\n\n var getCellByKey = function(cells, key) {\n return [].slice.call(cells).find(function(cell) {\n return cell.getAttribute('data-sort-column-key') === key;\n });\n };\n\n // Stable sort function\n // If two elements are equal under the original sort function,\n // then there relative order is reversed\n var stabilize = function(sort, antiStabilize) {\n return function(a, b) {\n var unstableResult = sort(a.td, b.td);\n\n if (unstableResult === 0) {\n if (antiStabilize) return b.index - a.index;\n return a.index - b.index;\n }\n\n return unstableResult;\n };\n };\n\n Tablesort.extend = function(name, pattern, sort) {\n if (typeof pattern !== 'function' || typeof sort !== 'function') {\n throw new Error('Pattern and sort must be a function');\n }\n\n sortOptions.push({\n name: name,\n pattern: pattern,\n sort: sort\n });\n };\n\n Tablesort.prototype = {\n\n init: function(el, options) {\n var that = this,\n firstRow,\n defaultSort,\n i,\n cell;\n\n that.table = el;\n that.thead = false;\n that.options = options;\n\n if (el.rows && el.rows.length > 0) {\n if (el.tHead && el.tHead.rows.length > 0) {\n for (i = 0; i < el.tHead.rows.length; i++) {\n if (el.tHead.rows[i].getAttribute('data-sort-method') === 'thead') {\n firstRow = el.tHead.rows[i];\n break;\n }\n }\n if (!firstRow) {\n firstRow = el.tHead.rows[el.tHead.rows.length - 1];\n }\n that.thead = true;\n } else {\n firstRow = el.rows[0];\n }\n }\n\n if (!firstRow) return;\n\n var onClick = function() {\n if (that.current && that.current !== this) {\n that.current.removeAttribute('aria-sort');\n }\n\n that.current = this;\n that.sortTable(this);\n };\n\n // Assume first row is the header and attach a click handler to each.\n for (i = 0; i < firstRow.cells.length; i++) {\n cell = firstRow.cells[i];\n cell.setAttribute('role','columnheader');\n if (cell.getAttribute('data-sort-method') !== 'none') {\n cell.tabindex = 0;\n cell.addEventListener('click', onClick, false);\n\n if (cell.getAttribute('data-sort-default') !== null) {\n defaultSort = cell;\n }\n }\n }\n\n if (defaultSort) {\n that.current = defaultSort;\n that.sortTable(defaultSort);\n }\n },\n\n sortTable: function(header, update) {\n var that = this,\n columnKey = header.getAttribute('data-sort-column-key'),\n column = header.cellIndex,\n sortFunction = caseInsensitiveSort,\n item = '',\n items = [],\n i = that.thead ? 0 : 1,\n sortMethod = header.getAttribute('data-sort-method'),\n sortOrder = header.getAttribute('aria-sort');\n\n that.table.dispatchEvent(createEvent('beforeSort'));\n\n // If updating an existing sort, direction should remain unchanged.\n if (!update) {\n if (sortOrder === 'ascending') {\n sortOrder = 'descending';\n } else if (sortOrder === 'descending') {\n sortOrder = 'ascending';\n } else {\n sortOrder = that.options.descending ? 'descending' : 'ascending';\n }\n\n header.setAttribute('aria-sort', sortOrder);\n }\n\n if (that.table.rows.length < 2) return;\n\n // If we force a sort method, it is not necessary to check rows\n if (!sortMethod) {\n var cell;\n while (items.length < 3 && i < that.table.tBodies[0].rows.length) {\n if(columnKey) {\n cell = getCellByKey(that.table.tBodies[0].rows[i].cells, columnKey);\n } else {\n cell = that.table.tBodies[0].rows[i].cells[column];\n }\n\n // Treat missing cells as empty cells\n item = cell ? getInnerText(cell,that.options) : \"\";\n\n item = item.trim();\n\n if (item.length > 0) {\n items.push(item);\n }\n\n i++;\n }\n\n if (!items) return;\n }\n\n for (i = 0; i < sortOptions.length; i++) {\n item = sortOptions[i];\n\n if (sortMethod) {\n if (item.name === sortMethod) {\n sortFunction = item.sort;\n break;\n }\n } else if (items.every(item.pattern)) {\n sortFunction = item.sort;\n break;\n }\n }\n\n that.col = column;\n\n for (i = 0; i < that.table.tBodies.length; i++) {\n var newRows = [],\n noSorts = {},\n j,\n totalRows = 0,\n noSortsSoFar = 0;\n\n if (that.table.tBodies[i].rows.length < 2) continue;\n\n for (j = 0; j < that.table.tBodies[i].rows.length; j++) {\n var cell;\n\n item = that.table.tBodies[i].rows[j];\n if (item.getAttribute('data-sort-method') === 'none') {\n // keep no-sorts in separate list to be able to insert\n // them back at their original position later\n noSorts[totalRows] = item;\n } else {\n if (columnKey) {\n cell = getCellByKey(item.cells, columnKey);\n } else {\n cell = item.cells[that.col];\n }\n // Save the index for stable sorting\n newRows.push({\n tr: item,\n td: cell ? getInnerText(cell,that.options) : '',\n index: totalRows\n });\n }\n totalRows++;\n }\n // Before we append should we reverse the new array or not?\n // If we reverse, the sort needs to be `anti-stable` so that\n // the double negatives cancel out\n if (sortOrder === 'descending') {\n newRows.sort(stabilize(sortFunction, true));\n } else {\n newRows.sort(stabilize(sortFunction, false));\n newRows.reverse();\n }\n\n // append rows that already exist rather than creating new ones\n for (j = 0; j < totalRows; j++) {\n if (noSorts[j]) {\n // We have a no-sort row for this position, insert it here.\n item = noSorts[j];\n noSortsSoFar++;\n } else {\n item = newRows[j - noSortsSoFar].tr;\n }\n\n // appendChild(x) moves x if already present somewhere else in the DOM\n that.table.tBodies[i].appendChild(item);\n }\n }\n\n that.table.dispatchEvent(createEvent('afterSort'));\n },\n\n refresh: function() {\n if (this.current !== undefined) {\n this.sortTable(this.current, true);\n }\n }\n };\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Tablesort;\n } else {\n window.Tablesort = Tablesort;\n }\n})();\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.Tweezer = factory());\n}(this, (function () { 'use strict';\n\n var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n var SingleTweener = function () {\n function SingleTweener() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, SingleTweener);\n\n this.start = opts.start;\n this.end = opts.end;\n this.decimal = opts.decimal;\n }\n\n _createClass(SingleTweener, [{\n key: \"getIntermediateValue\",\n value: function getIntermediateValue(tick) {\n if (this.decimal) {\n return tick;\n } else {\n return Math.round(tick);\n }\n }\n }, {\n key: \"getFinalValue\",\n value: function getFinalValue() {\n return this.end;\n }\n }]);\n\n return SingleTweener;\n }();\n\n var _createClass$1 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n var Tweezer = function () {\n function Tweezer() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck$1(this, Tweezer);\n\n this.duration = opts.duration || 1000;\n this.ease = opts.easing || this._defaultEase;\n this.tweener = opts.tweener || new SingleTweener(opts);\n this.start = this.tweener.start;\n this.end = this.tweener.end;\n\n this.frame = null;\n this.next = null;\n this.isRunning = false;\n this.events = {};\n this.direction = this.start < this.end ? 'up' : 'down';\n }\n\n _createClass$1(Tweezer, [{\n key: 'begin',\n value: function begin() {\n if (!this.isRunning && this.next !== this.end) {\n this.frame = window.requestAnimationFrame(this._tick.bind(this));\n }\n return this;\n }\n }, {\n key: 'stop',\n value: function stop() {\n window.cancelAnimationFrame(this.frame);\n this.isRunning = false;\n this.frame = null;\n this.timeStart = null;\n this.next = null;\n return this;\n }\n }, {\n key: 'on',\n value: function on(name, handler) {\n this.events[name] = this.events[name] || [];\n this.events[name].push(handler);\n return this;\n }\n }, {\n key: '_emit',\n value: function _emit(name, val) {\n var _this = this;\n\n var e = this.events[name];\n e && e.forEach(function (handler) {\n return handler.call(_this, val);\n });\n }\n }, {\n key: '_tick',\n value: function _tick(currentTime) {\n this.isRunning = true;\n\n var lastTick = this.next || this.start;\n\n if (!this.timeStart) this.timeStart = currentTime;\n this.timeElapsed = currentTime - this.timeStart;\n this.next = this.ease(this.timeElapsed, this.start, this.end - this.start, this.duration);\n\n if (this._shouldTick(lastTick)) {\n this._emit('tick', this.tweener.getIntermediateValue(this.next));\n this.frame = window.requestAnimationFrame(this._tick.bind(this));\n } else {\n this._emit('tick', this.tweener.getFinalValue());\n this._emit('done', null);\n }\n }\n }, {\n key: '_shouldTick',\n value: function _shouldTick(lastTick) {\n return {\n up: this.next < this.end && lastTick <= this.next,\n down: this.next > this.end && lastTick >= this.next\n }[this.direction];\n }\n }, {\n key: '_defaultEase',\n value: function _defaultEase(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t + b;\n return -c / 2 * (--t * (t - 2) - 1) + b;\n }\n }]);\n\n return Tweezer;\n }();\n\n return Tweezer;\n\n})));\n","/*********************************************************************\r\n* #### Twitter Post Fetcher v18.0.4 ####\r\n* Coded by Jason Mayes 2015. A present to all the developers out there.\r\n* www.jasonmayes.com\r\n* Please keep this disclaimer with my code if you use it. Thanks. :-)\r\n* Got feedback or questions, ask here:\r\n* http://www.jasonmayes.com/projects/twitterApi/\r\n* Github: https://github.com/jasonmayes/Twitter-Post-Fetcher\r\n* Updates will be posted to this site.\r\n*********************************************************************/\r\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?module.exports=t():t()}(0,function(){var e=\"\",t=20,i=!0,n=[],a=!1,l=!0,s=!0,r=null,o=!0,c=!0,m=null,d=!0,p=!1,u=!1,g=!0,h=!0,w=!1,f=null;function b(e){return e.replace(/]*>(.*?)<\\/b>/gi,function(e,t){return t}).replace(/class=\"(?!(tco-hidden|tco-display|tco-ellipsis))+.*?\"|data-query-source=\".*?\"|dir=\".*?\"|rel=\".*?\"/gi,\"\")}function v(e){for(var t=e.getElementsByTagName(\"a\"),i=t.length-1;i>=0;i--)t[i].setAttribute(\"target\",\"_blank\"),t[i].setAttribute(\"rel\",\"noopener\")}function _(e,t){for(var i=[],n=new RegExp(\"(^| )\"+t+\"( |$)\"),a=e.getElementsByTagName(\"*\"),l=0,s=a.length;l=0){for(var t=e.innerHTML.match(/data-image=\\\"([^\"]+)\\\"/gi),i=0;i0&&(T.fetch(n[0]),n.splice(0,1)));u||(f.body=f.body.replace(/(]*>)|(]*>)/g,\"\")),p||(f.body=f.body.replace(/(]*>|(]*>))/g,\"\")),s||(f.body=f.body.replace(/(]*>)/g,\"\"));var k=document.createElement(\"div\");function C(e){var t=e.getElementsByTagName(\"img\")[0];if(t)t.src=t.getAttribute(\"data-src-2x\");else{var i=e.getElementsByTagName(\"a\")[0].getAttribute(\"href\").split(\"twitter.com/\")[1],n=document.createElement(\"img\");n.setAttribute(\"src\",\"https://twitter.com/\"+i+\"/profile_image?size=bigger\"),e.prepend(n)}return e}k.innerHTML=f.body,void 0===k.getElementsByClassName&&(o=!1);var E=[],x=[],N=[],A=[],B=[],I=[],M=[],L=0;if(o)for(var j=k.getElementsByClassName(\"timeline-Tweet\");L0?B.push(!0):B.push(!1),(!B[L]||B[L]&&c)&&(E.push(j[L].getElementsByClassName(\"timeline-Tweet-text\")[0]),I.push(j[L].getAttribute(\"data-tweet-id\")),s&&x.push(C(j[L].getElementsByClassName(\"timeline-Tweet-author\")[0])),N.push(j[L].getElementsByClassName(\"dt-updated\")[0]),M.push(j[L].getElementsByClassName(\"timeline-Tweet-timestamp\")[0]),void 0!==j[L].getElementsByClassName(\"timeline-Tweet-media\")[0]?A.push(j[L].getElementsByClassName(\"timeline-Tweet-media\")[0]):A.push(void 0)),L++;else for(j=_(k,\"timeline-Tweet\");L0?B.push(!0):B.push(!1),(!B[L]||B[L]&&c)&&(E.push(_(j[L],\"timeline-Tweet-text\")[0]),I.push(j[L].getAttribute(\"data-tweet-id\")),s&&x.push(C(_(j[L],\"timeline-Tweet-author\")[0])),N.push(_(j[L],\"dt-updated\")[0]),M.push(_(j[L],\"timeline-Tweet-timestamp\")[0]),void 0!==_(j[L],\"timeline-Tweet-media\")[0]?A.push(_(j[L],\"timeline-Tweet-media\")[0]):A.push(void 0)),L++;E.length>t&&(E.splice(t,E.length-t),x.splice(t,x.length-t),N.splice(t,N.length-t),B.splice(t,B.length-t),A.splice(t,A.length-t),M.splice(t,M.length-t));var H=[],P=(L=E.length,0);if(w)for(;P'+b(x[P].innerHTML)+\"\"),U+='

'+b(E[P].innerHTML)+\"

\",l&&(U+=h?'

'+N[P].getAttribute(\"aria-label\")+\"

\":'

'+N[P].getAttribute(\"aria-label\")+\"

\")):(E[P].textContent,s&&(U+='

'+x[P].textContent+\"

\"),U+='

'+E[P].textContent+\"

\",l&&(U+='

'+N[P].textContent+\"

\")),d&&(U+='

':\">\")+'Reply':\">\")+'Retweet':\">\")+\"Favorite

\"),p&&void 0!==A[P]&&void 0!==y(A[P]))for(var D=y(A[P]),$=0;$\"Image';p?H.push(U):!p&&E[P].textContent.length&&H.push(U),P++}!function(t){if(null===m){for(var i=t.length,n=0,a=document.getElementById(e),l=\"
    \";n\"+t[n]+\"\",n++;l+=\"
\",a.innerHTML=l}else m(t)}(H),a=!1,n.length>0&&(T.fetch(n[0]),n.splice(0,1))}};return window.__twttrf=T,window.twitterFetcher=T,T}),[Element.prototype,Document.prototype,DocumentFragment.prototype].forEach(function(e){e.hasOwnProperty(\"prepend\")||Object.defineProperty(e,\"prepend\",{configurable:!0,enumerable:!0,writable:!0,value:function(){var e=Array.prototype.slice.call(arguments),t=document.createDocumentFragment();e.forEach(function(e){var i=e instanceof Node;t.appendChild(i?e:document.createTextNode(String(e)))}),this.insertBefore(t,this.firstChild)}})});\r\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","import { selectAll } from 'modules/dom'\n\nconst detectExternalLinks = () => {\n const currentUrl = window.location.host\n const aTags = selectAll('a')\n if (aTags && aTags.length) {\n aTags.map(tag => {\n if (tag && tag.getAttribute('href')) {\n const tagHref = tag.getAttribute('href')\n if (!tagHref.includes(currentUrl)) {\n tag.setAttribute('target', '_blank')\n }\n }\n })\n }\n}\nexport default detectExternalLinks\n","import { tryCatch, identity, ifElse, getProp, pipe, partial } from 'modules/utils'\nimport { selectAll, getData } from 'modules/dom'\n\n/**\n * Require a module by name\n *\n * @param {string} name\n * @return {Function|Object}\n */\nconst requireModule = (name) => require('modules/' + name)\n\n/**\n * Handle exception\n *\n * @param {Error} err\n * @returns {boolean}\n */\nconst handleError = (err) => {\n console.log(err.toString())\n return false\n}\n\n/**\n * Check to see if a module is an ES6 wrapper\n *\n * @param {Function|Object} val\n * @return {boolean}\n */\nconst isEs6Module = (val) => typeof val === 'object' && typeof val.default !== 'undefined'\n\n/**\n * Create new module instance for element\n *\n * @param {HTMLElement} el\n * @param {Function} Module\n * @returns {Module}}\n */\nconst runModule = (el, Module) => new Module(el)\n\n/**\n * Initialize module based on attribute name\n *\n * @param {HTMLElement} el\n * @returns {HTMLElement|Module}\n */\nconst initializeModuleForEl = (el) => {\n return pipe(\n getData('module-init'),\n tryCatch(requireModule, handleError),\n ifElse(isEs6Module, getProp('default'), identity),\n partial(runModule, el)\n )(el)\n}\n\n/**\n * Finds all elements with a \"data-module-init\" attribute\n * and calls the corresponding script\n *\n * @return {Array}\n */\nexport default () => selectAll('[data-module-init]').map(initializeModuleForEl)\n","import { ready } from 'modules/dom'\nimport initializeModules from './lib/init-modules.js'\nimport detectExternalLinks from \"./global\"\ndetectExternalLinks()\nready(initializeModules)\n"]}