{"version":3,"sources":["imagesLoaded/imagesLoaded.pkgd.js","flickity/flickity.pkgd.js","isotope/isotope.pkgd.js","main.js","Header/header.component.js","HomeGrid/home-grid.widget.js","partials/_responsive-carousel.js","Card/card.component.js","Map/map.js","ContactForm/contactForm.widget.js","partials/_debouncer.js","partials/_filter.js","partials/_form-validation.js","partials/_iubenda.js","partials/_lazy-loading-image.js","partials/_load-more.js","partials/_modal-response.js","partials/_recaptcha.js","Video/video.component.js","VideoCard/video-card.component.js"],"names":["e","t","define","amd","module","_typeof","exports","EvEmitter","window","prototype","on","i","this","_events","n","indexOf","push","once","_onceEvents","off","length","splice","emitEvent","slice","o","r","apply","allOff","require","imagesLoaded","s","document","querySelectorAll","elements","Array","isArray","d","call","options","getImages","h","jqDeferred","Deferred","setTimeout","check","bind","a","error","img","url","element","Image","jQuery","console","Object","create","images","forEach","addElementImages","nodeName","addImage","background","addElementBackgroundImages","nodeType","u","1","9","11","getComputedStyle","exec","backgroundImage","addBackground","progress","progressedCount","hasAnyBroken","complete","isLoaded","notify","debug","log","isComplete","getIsImageComplete","confirm","naturalWidth","proxyImage","addEventListener","src","handleEvent","type","onload","unbindEvents","onerror","removeEventListener","makeJQueryPlugin","fn","promise","factory","jQueryBridget","arraySlice","logError","message","namespace","PluginClass","$","option","opts","isPlainObject","extend","arg0","each","elem","instance","data","_init","methodName","args","returnValue","pluginMethodStr","arguments","$elems","method","charAt","value","undefined","updateJQuery","bridget","global","proto","eventName","listener","events","listeners","onceEvents","index","onceListeners","getSize","getStyleSize","num","parseFloat","isNaN","measurements","measurementsLength","getStyle","style","isBoxSizeOuter","isSetup","div","createElement","width","padding","borderStyle","borderWidth","boxSizing","body","documentElement","appendChild","Math","round","removeChild","querySelector","display","size","height","innerWidth","innerHeight","outerWidth","outerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","matchesSelector","matchesMethod","ElemProto","Element","matches","prefixes","selector","fizzyUIUtils","utils","b","prop","makeArray","obj","removeFrom","ary","getParent","parentNode","getQueryElement","event","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","threshold","timeoutName","timeout","clearTimeout","_this","docReady","callback","readyState","toDashed","str","replace","match","$1","$2","toLowerCase","htmlInit","WidgetClass","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","attr","getAttribute","JSON","parse","className","Flickity","Cell","parent","position","setAttribute","x","shift","destroy","unselect","side","originSide","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","target","cellAlign","getPositionValue","select","classList","add","removeAttribute","remove","wrapShift","slideableWidth","Slide","isOriginLeft","cells","addCell","cell","beginMargin","max","firstMargin","endMargin","lastCell","getLastCell","lastMargin","slideWidth","getCellElements","map","animatePrototype","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","modulo","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","slider","transform","positionX","firstSlide","slides","slidesWidth","dispatchEvent","selectedSlide","velocity","percentPosition","isPointerDown","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","getFrictionFactor","force","dragForce","isDraggable","dragX","applyForce","selectedAttraction","_Flickity","moveElements","toElem","GUID","instances","queryElement","flickityGUID","$element","constructor","defaults","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","createMethods","id","guid","viewport","_createSlider","watchCSS","activate","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","_makeCells","positionCells","_getWrapShiftCells","cellElem","getLastSlide","_sizeCells","_positionCells","maxCellHeight","startCell","cellX","len","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","reposition","positionSliderAtSelected","setCellAlign","cellAlignShorthands","center","left","right","shorthand","adaptiveHeight","gapX","cellIndex","_unshiftCells","_getGapCells","increment","contentWidth","isContentSmaller","beginBound","endBound","contain","isRightToLeft","min","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","selectedCell","selectedElement","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","cellElems","slideIndex","uiChange","childUIPointerDown","preventDefault","focus","onresize","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","removeData","setJQuery","jq","Unipointer","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","okayPointerDown","pointerDownPointer","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","isClickType","isOkay","focused","blur","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","dragEnd","onclick","isIgnoringMouseUp","staticClick","draggable","dragThreshold","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","focusNodes","isTouchStart","isTouchPointer","pointerType","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","Date","restingX","freeScroll","dragEndRestingSelect","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","md","isWrapAround","wrap","floor","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","shape","arrowShape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","handleClick","onClick","setDots","addDots","removeDots","count","fragment","createDocumentFragment","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","insertCellElement","endCells","isAppend","insertBefore","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","srcset","_createAsNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","asNavFor","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","firstIndex","selectIndex","removeNavSelectedElements","navSelectedElements","changeNavSelectedClass","navElem","cellElement","ImagesLoaded","onAlways","queryElem","elementNodeTypes","childImgs","child","LoadingImage","Background","reURL","loadingImage","onProgress","jqMethod","_createImagesLoaded","Outlayer","Item","docElemStyle","transitionProperty","transition","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDuration","transitionDelay","layout","_transn","ingProperties","clean","onEnd","css","elemStyle","getPosition","_getOption","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xResetProperty","getXValue","yResetProperty","getYValue","isHorizontal","_transitionTo","curX","curY","didNotMove","isTransitioning","transitionStyle","getTranslate","to","onTransitionEnd","isCleaning","goTo","moveTo","_nonTransition","_removeStyles","_transition","from","enableTransition","transitionProps","duration","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","-webkit-transform","propertyName","isEmptyObj","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","stagger","delay","removeElem","hide","reveal","isHidden","getHideRevealTransitionEndProperty","onRevealTransitionEnd","hiddenStyle","visibleStyle","styleProperty","optionStyle","opacity","onHideTransitionEnd","top","bottom","noop","outlayerGUID","containerStyle","initLayout","originLeft","originTop","resizeContainer","subclass","Parent","SubClass","oldOption","compatOptions","horizontal","layoutInstant","reloadItems","stamps","stamp","bindResize","items","_itemize","itemElems","_filterFindItemElements","item","itemSelector","getItemElements","_resetLayout","_manageStamps","_isLayoutInited","layoutItems","_getMeasurement","_getItemsForLayout","_layoutItems","_postLayout","filter","isIgnored","queue","_emitCompleteOnItems","_getItemLayoutPosition","isLayoutInstant","_processLayoutQueue","updateStagger","_positionItem","unit","mult","msUnits","getMilliseconds","_getContainerSize","_setContainerMeasure","measure","isWidth","elemSize","onComplete","doneCount","ignore","getItem","unignore","_find","unstamp","_getBoundingRect","_manageStamp","boundingRect","getBoundingClientRect","_boundingRect","_getElementOffset","thisRect","isResizeBound","unbindResize","needsResizeLayout","addItems","appended","prepended","previousItems","revealItemElements","getItems","hideItemElements","removeItems","Layout","ms","Isotope","itemGUID","sortData","updateSortData","random","key","getSortData","sorters","_sorters","sorter","_destroy","LayoutMode","isotope","filteredItems","needsVerticalResizeLayout","getColumnWidth","getSegmentSize","getRowHeight","segment","segmentName","outerSize","firstItemSize","getFirstItemSize","firstItem","modes","Mode","Masonry","fitWidth","measureColumns","colYs","cols","maxY","horizontalColIndex","getContainerWidth","columnWidth","firstItemElem","containerWidth","gutter","excess","container","remainder","colSpan","colPosition","horizontalOrder","col","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","offset","firstX","lastX","firstCol","lastCol","stampMaxY","_getContainerFitWidth","unusedCols","previousWidth","MasonryMode","keepModeMethods","isFitWidth","FitRows","itemWidth","Vertical","horizontalAlignment","trim","String","layoutMode","isJQueryFiltering","sortAscending","name","_getSorters","sortHistory","_initLayoutMode","_updateItemsSortData","initialOpts","_layout","arrange","_getIsInstant","filtered","_filter","_bindArrangeComplete","_isInstant","_noTransition","_hideReveal","_sort","needReveal","needHide","isLayoutComplete","isHideComplete","isRevealComplete","arrangeParallelCallback","hiddenMatched","visibleUnmatched","test","_getFilterTest","isMatched","is","mungeSorter","_parseFloat","_parseInt","split","query","attrMatch","getValue","textContent","getValueGetter","parser","sortDataParsers","_x2","_x","val","toString","sortBys","sortAsc","sortBy","_getIsSameSortBy","sort","itemA","itemB","_mode","mode","Error","_filterRevealAdded","filteredInsertItems","_remove","shuffle","getFilteredItemElements","initFormFieldsToggle","initRecaptcha","initFormsValidation","initModalResponse","initIubendaProof","initLoadMore","initVideo","initMobileMenu","initCarousel","initMasonry","initMapScript","initVideoCardComponent","iso","header","hamburgerIcon","closeIcon","componentFunction","mapsArray","APIKEY","script","async","head","initMap","singleMap","markerLat","markerLng","markerTitle","markerDescription","google","maps","Map","zoom","lat","lng","Marker","masonryGrid","elementsArray","masonry","card","contactFormsArray","form","togglerArray","elementsToBeToggledArray","toggler","toggleFormFields","array","selectToggler","includes","HTMLInputElement","HTMLSelectElement","input","debouncer","func","timeoutId","_this2","_len","_key","initFilter","filterInput","itemsToFilterArray","itemsTitleToFilterArray","inputText","innerText","isFormValid","contactForms","submitButton","singleForm","temporaryDisableButton","contactFormRequiredElements","checkFormValidity","isRecaptchaEnabled","grecaptcha","execute","arrayOfRequiredElements","errorCounter","isValidItem","label","hasAttribute","checkValidity","parentElement","html","btoa","encodeURI","innerHTML","textArea","createTextNode","jsLazyLoadImages","asyncImg","asyncBg","jsLazyLoad","lazyImgs","lazyImagesBG","notLazyNodes","_toConsumableArray","some","node","contains","active","lazyImage","resizeBg","buttonsArray","dataContainersArray","dataContainer","clickedButton","HTMLAnchorElement","nextPageUrl","href","fetch","then","text","result","parsedHTML","DOMParser","parseFromString","updatedButton","modalResponse","errorResponse","modal","closeModal","URL","location","searchParams","get","defer","submitAfterCaptcha","token","formToSubmit","sliderSelector","arrayCarousel","carouselContainer","flickitySlider","arraySliderItems","clientWidth","ready","parentContainer","videosArray","video","iframe","iframeContainer","videoId","frameBorder","allowFullscreen","allow","title","scrollIntoView","block","inline"],"mappings":"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","file":"scriptsbundle.js","sourcesContent":["/*!\r\n * imagesLoaded PACKAGED v4.1.4\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n\r\n!function (e, t) { \"function\" == typeof define && define.amd ? define(\"ev-emitter/ev-emitter\", t) : \"object\" == typeof module && module.exports ? module.exports = t() : e.EvEmitter = t() }(\"undefined\" != typeof window ? window : this, function () { function e() { } var t = e.prototype; return t.on = function (e, t) { if (e && t) { var i = this._events = this._events || {}, n = i[e] = i[e] || []; return n.indexOf(t) == -1 && n.push(t), this } }, t.once = function (e, t) { if (e && t) { this.on(e, t); var i = this._onceEvents = this._onceEvents || {}, n = i[e] = i[e] || {}; return n[t] = !0, this } }, t.off = function (e, t) { var i = this._events && this._events[e]; if (i && i.length) { var n = i.indexOf(t); return n != -1 && i.splice(n, 1), this } }, t.emitEvent = function (e, t) { var i = this._events && this._events[e]; if (i && i.length) { i = i.slice(0), t = t || []; for (var n = this._onceEvents && this._onceEvents[e], o = 0; o < i.length; o++) { var r = i[o], s = n && n[r]; s && (this.off(e, r), delete n[r]), r.apply(this, t) } return this } }, t.allOff = function () { delete this._events, delete this._onceEvents }, e }), function (e, t) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"ev-emitter/ev-emitter\"], function (i) { return t(e, i) }) : \"object\" == typeof module && module.exports ? module.exports = t(e, require(\"ev-emitter\")) : e.imagesLoaded = t(e, e.EvEmitter) }(\"undefined\" != typeof window ? window : this, function (e, t) { function i(e, t) { for (var i in t) e[i] = t[i]; return e } function n(e) { if (Array.isArray(e)) return e; var t = \"object\" == typeof e && \"number\" == typeof e.length; return t ? d.call(e) : [e] } function o(e, t, r) { if (!(this instanceof o)) return new o(e, t, r); var s = e; return \"string\" == typeof e && (s = document.querySelectorAll(e)), s ? (this.elements = n(s), this.options = i({}, this.options), \"function\" == typeof t ? r = t : i(this.options, t), r && this.on(\"always\", r), this.getImages(), h && (this.jqDeferred = new h.Deferred), void setTimeout(this.check.bind(this))) : void a.error(\"Bad element for imagesLoaded \" + (s || e)) } function r(e) { this.img = e } function s(e, t) { this.url = e, this.element = t, this.img = new Image } var h = e.jQuery, a = e.console, d = Array.prototype.slice; o.prototype = Object.create(t.prototype), o.prototype.options = {}, o.prototype.getImages = function () { this.images = [], this.elements.forEach(this.addElementImages, this) }, o.prototype.addElementImages = function (e) { \"IMG\" == e.nodeName && this.addImage(e), this.options.background === !0 && this.addElementBackgroundImages(e); var t = e.nodeType; if (t && u[t]) { for (var i = e.querySelectorAll(\"img\"), n = 0; n < i.length; n++) { var o = i[n]; this.addImage(o) } if (\"string\" == typeof this.options.background) { var r = e.querySelectorAll(this.options.background); for (n = 0; n < r.length; n++) { var s = r[n]; this.addElementBackgroundImages(s) } } } }; var u = { 1: !0, 9: !0, 11: !0 }; return o.prototype.addElementBackgroundImages = function (e) { var t = getComputedStyle(e); if (t) for (var i = /url\\((['\"])?(.*?)\\1\\)/gi, n = i.exec(t.backgroundImage); null !== n;) { var o = n && n[2]; o && this.addBackground(o, e), n = i.exec(t.backgroundImage) } }, o.prototype.addImage = function (e) { var t = new r(e); this.images.push(t) }, o.prototype.addBackground = function (e, t) { var i = new s(e, t); this.images.push(i) }, o.prototype.check = function () { function e(e, i, n) { setTimeout(function () { t.progress(e, i, n) }) } var t = this; return this.progressedCount = 0, this.hasAnyBroken = !1, this.images.length ? void this.images.forEach(function (t) { t.once(\"progress\", e), t.check() }) : void this.complete() }, o.prototype.progress = function (e, t, i) { this.progressedCount++, this.hasAnyBroken = this.hasAnyBroken || !e.isLoaded, this.emitEvent(\"progress\", [this, e, t]), this.jqDeferred && this.jqDeferred.notify && this.jqDeferred.notify(this, e), this.progressedCount == this.images.length && this.complete(), this.options.debug && a && a.log(\"progress: \" + i, e, t) }, o.prototype.complete = function () { var e = this.hasAnyBroken ? \"fail\" : \"done\"; if (this.isComplete = !0, this.emitEvent(e, [this]), this.emitEvent(\"always\", [this]), this.jqDeferred) { var t = this.hasAnyBroken ? \"reject\" : \"resolve\"; this.jqDeferred[t](this) } }, r.prototype = Object.create(t.prototype), r.prototype.check = function () { var e = this.getIsImageComplete(); return e ? void this.confirm(0 !== this.img.naturalWidth, \"naturalWidth\") : (this.proxyImage = new Image, this.proxyImage.addEventListener(\"load\", this), this.proxyImage.addEventListener(\"error\", this), this.img.addEventListener(\"load\", this), this.img.addEventListener(\"error\", this), void (this.proxyImage.src = this.img.src)) }, r.prototype.getIsImageComplete = function () { return this.img.complete && this.img.naturalWidth }, r.prototype.confirm = function (e, t) { this.isLoaded = e, this.emitEvent(\"progress\", [this, this.img, t]) }, r.prototype.handleEvent = function (e) { var t = \"on\" + e.type; this[t] && this[t](e) }, r.prototype.onload = function () { this.confirm(!0, \"onload\"), this.unbindEvents() }, r.prototype.onerror = function () { this.confirm(!1, \"onerror\"), this.unbindEvents() }, r.prototype.unbindEvents = function () { this.proxyImage.removeEventListener(\"load\", this), this.proxyImage.removeEventListener(\"error\", this), this.img.removeEventListener(\"load\", this), this.img.removeEventListener(\"error\", this) }, s.prototype = Object.create(r.prototype), s.prototype.check = function () { this.img.addEventListener(\"load\", this), this.img.addEventListener(\"error\", this), this.img.src = this.url; var e = this.getIsImageComplete(); e && (this.confirm(0 !== this.img.naturalWidth, \"naturalWidth\"), this.unbindEvents()) }, s.prototype.unbindEvents = function () { this.img.removeEventListener(\"load\", this), this.img.removeEventListener(\"error\", this) }, s.prototype.confirm = function (e, t) { this.isLoaded = e, this.emitEvent(\"progress\", [this, this.element, t]) }, o.makeJQueryPlugin = function (t) { t = t || e.jQuery, t && (h = t, h.fn.imagesLoaded = function (e, t) { var i = new o(this, e, t); return i.jqDeferred.promise(h(this)) }) }, o.makeJQueryPlugin(), o });","/*!\r\n * Flickity PACKAGED v2.2.0\r\n * Touch, responsive, flickable carousels\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Flickity Commercial License for commercial use\r\n *\r\n * https://flickity.metafizzy.co\r\n * Copyright 2015-2018 Metafizzy\r\n */\r\n\r\n/**\r\n * Bridget makes jQuery widgets\r\n * v2.0.1\r\n * MIT license\r\n */\r\n\r\n/* jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /* globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {\r\n return factory( window, jQuery );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('jquery')\r\n );\r\n } else {\r\n // browser global\r\n window.jQueryBridget = factory(\r\n window,\r\n window.jQuery\r\n );\r\n }\r\n\r\n}( window, function factory( window, jQuery ) {\r\n'use strict';\r\n\r\n// ----- utils ----- //\r\n\r\nvar arraySlice = Array.prototype.slice;\r\n\r\n// helper function for logging errors\r\n// $.error breaks jQuery chaining\r\nvar console = window.console;\r\nvar logError = typeof console == 'undefined' ? function() {} :\r\n function( message ) {\r\n console.error( message );\r\n };\r\n\r\n// ----- jQueryBridget ----- //\r\n\r\nfunction jQueryBridget( namespace, PluginClass, $ ) {\r\n $ = $ || jQuery || window.jQuery;\r\n if ( !$ ) {\r\n return;\r\n }\r\n\r\n // add option method -> $().plugin('option', {...})\r\n if ( !PluginClass.prototype.option ) {\r\n // option setter\r\n PluginClass.prototype.option = function( opts ) {\r\n // bail out if not an object\r\n if ( !$.isPlainObject( opts ) ){\r\n return;\r\n }\r\n this.options = $.extend( true, this.options, opts );\r\n };\r\n }\r\n\r\n // make jQuery plugin\r\n $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\r\n if ( typeof arg0 == 'string' ) {\r\n // method call $().plugin( 'methodName', { options } )\r\n // shift arguments by 1\r\n var args = arraySlice.call( arguments, 1 );\r\n return methodCall( this, arg0, args );\r\n }\r\n // just $().plugin({ options })\r\n plainCall( this, arg0 );\r\n return this;\r\n };\r\n\r\n // $().plugin('methodName')\r\n function methodCall( $elems, methodName, args ) {\r\n var returnValue;\r\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\r\n\r\n $elems.each( function( i, elem ) {\r\n // get instance\r\n var instance = $.data( elem, namespace );\r\n if ( !instance ) {\r\n logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\r\n pluginMethodStr );\r\n return;\r\n }\r\n\r\n var method = instance[ methodName ];\r\n if ( !method || methodName.charAt(0) == '_' ) {\r\n logError( pluginMethodStr + ' is not a valid method' );\r\n return;\r\n }\r\n\r\n // apply method, get return value\r\n var value = method.apply( instance, args );\r\n // set return value if value is returned, use only first value\r\n returnValue = returnValue === undefined ? value : returnValue;\r\n });\r\n\r\n return returnValue !== undefined ? returnValue : $elems;\r\n }\r\n\r\n function plainCall( $elems, options ) {\r\n $elems.each( function( i, elem ) {\r\n var instance = $.data( elem, namespace );\r\n if ( instance ) {\r\n // set options & init\r\n instance.option( options );\r\n instance._init();\r\n } else {\r\n // initialize new instance\r\n instance = new PluginClass( elem, options );\r\n $.data( elem, namespace, instance );\r\n }\r\n });\r\n }\r\n\r\n updateJQuery( $ );\r\n\r\n}\r\n\r\n// ----- updateJQuery ----- //\r\n\r\n// set $.bridget for v1 backwards compatibility\r\nfunction updateJQuery( $ ) {\r\n if ( !$ || ( $ && $.bridget ) ) {\r\n return;\r\n }\r\n $.bridget = jQueryBridget;\r\n}\r\n\r\nupdateJQuery( jQuery || window.jQuery );\r\n\r\n// ----- ----- //\r\n\r\nreturn jQueryBridget;\r\n\r\n}));\r\n\r\n/**\r\n * EvEmitter v1.1.0\r\n * Lil' event emitter\r\n * MIT License\r\n */\r\n\r\n/* jshint unused: true, undef: true, strict: true */\r\n\r\n( function( global, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */ /* globals define, module, window */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD - RequireJS\r\n define( 'ev-emitter/ev-emitter',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS - Browserify, Webpack\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n global.EvEmitter = factory();\r\n }\r\n\r\n}( typeof window != 'undefined' ? window : this, function() {\r\n\r\n\r\n\r\nfunction EvEmitter() {}\r\n\r\nvar proto = EvEmitter.prototype;\r\n\r\nproto.on = function( eventName, listener ) {\r\n if ( !eventName || !listener ) {\r\n return;\r\n }\r\n // set events hash\r\n var events = this._events = this._events || {};\r\n // set listeners array\r\n var listeners = events[ eventName ] = events[ eventName ] || [];\r\n // only add once\r\n if ( listeners.indexOf( listener ) == -1 ) {\r\n listeners.push( listener );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.once = function( eventName, listener ) {\r\n if ( !eventName || !listener ) {\r\n return;\r\n }\r\n // add event\r\n this.on( eventName, listener );\r\n // set once flag\r\n // set onceEvents hash\r\n var onceEvents = this._onceEvents = this._onceEvents || {};\r\n // set onceListeners object\r\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\r\n // set flag\r\n onceListeners[ listener ] = true;\r\n\r\n return this;\r\n};\r\n\r\nproto.off = function( eventName, listener ) {\r\n var listeners = this._events && this._events[ eventName ];\r\n if ( !listeners || !listeners.length ) {\r\n return;\r\n }\r\n var index = listeners.indexOf( listener );\r\n if ( index != -1 ) {\r\n listeners.splice( index, 1 );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.emitEvent = function( eventName, args ) {\r\n var listeners = this._events && this._events[ eventName ];\r\n if ( !listeners || !listeners.length ) {\r\n return;\r\n }\r\n // copy over to avoid interference if .off() in listener\r\n listeners = listeners.slice(0);\r\n args = args || [];\r\n // once stuff\r\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\r\n\r\n for ( var i=0; i < listeners.length; i++ ) {\r\n var listener = listeners[i]\r\n var isOnce = onceListeners && onceListeners[ listener ];\r\n if ( isOnce ) {\r\n // remove listener\r\n // remove before trigger to prevent recursion\r\n this.off( eventName, listener );\r\n // unset once flag\r\n delete onceListeners[ listener ];\r\n }\r\n // trigger listener\r\n listener.apply( this, args );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.allOff = function() {\r\n delete this._events;\r\n delete this._onceEvents;\r\n};\r\n\r\nreturn EvEmitter;\r\n\r\n}));\r\n\r\n/*!\r\n * getSize v2.0.3\r\n * measure size of elements\r\n * MIT license\r\n */\r\n\r\n/* jshint browser: true, strict: true, undef: true, unused: true */\r\n/* globals console: false */\r\n\r\n( function( window, factory ) {\r\n /* jshint strict: false */ /* globals define, module */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'get-size/get-size',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.getSize = factory();\r\n }\r\n\r\n})( window, function factory() {\r\n'use strict';\r\n\r\n// -------------------------- helpers -------------------------- //\r\n\r\n// get a number from a string, not a percentage\r\nfunction getStyleSize( value ) {\r\n var num = parseFloat( value );\r\n // not a percent like '100%', and a number\r\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\r\n return isValid && num;\r\n}\r\n\r\nfunction noop() {}\r\n\r\nvar logError = typeof console == 'undefined' ? noop :\r\n function( message ) {\r\n console.error( message );\r\n };\r\n\r\n// -------------------------- measurements -------------------------- //\r\n\r\nvar measurements = [\r\n 'paddingLeft',\r\n 'paddingRight',\r\n 'paddingTop',\r\n 'paddingBottom',\r\n 'marginLeft',\r\n 'marginRight',\r\n 'marginTop',\r\n 'marginBottom',\r\n 'borderLeftWidth',\r\n 'borderRightWidth',\r\n 'borderTopWidth',\r\n 'borderBottomWidth'\r\n];\r\n\r\nvar measurementsLength = measurements.length;\r\n\r\nfunction getZeroSize() {\r\n var size = {\r\n width: 0,\r\n height: 0,\r\n innerWidth: 0,\r\n innerHeight: 0,\r\n outerWidth: 0,\r\n outerHeight: 0\r\n };\r\n for ( var i=0; i < measurementsLength; i++ ) {\r\n var measurement = measurements[i];\r\n size[ measurement ] = 0;\r\n }\r\n return size;\r\n}\r\n\r\n// -------------------------- getStyle -------------------------- //\r\n\r\n/**\r\n * getStyle, get style of element, check for Firefox bug\r\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\r\n */\r\nfunction getStyle( elem ) {\r\n var style = getComputedStyle( elem );\r\n if ( !style ) {\r\n logError( 'Style returned ' + style +\r\n '. Are you running this code in a hidden iframe on Firefox? ' +\r\n 'See https://bit.ly/getsizebug1' );\r\n }\r\n return style;\r\n}\r\n\r\n// -------------------------- setup -------------------------- //\r\n\r\nvar isSetup = false;\r\n\r\nvar isBoxSizeOuter;\r\n\r\n/**\r\n * setup\r\n * check isBoxSizerOuter\r\n * do on first getSize() rather than on page load for Firefox bug\r\n */\r\nfunction setup() {\r\n // setup once\r\n if ( isSetup ) {\r\n return;\r\n }\r\n isSetup = true;\r\n\r\n // -------------------------- box sizing -------------------------- //\r\n\r\n /**\r\n * Chrome & Safari measure the outer-width on style.width on border-box elems\r\n * IE11 & Firefox<29 measures the inner-width\r\n */\r\n var div = document.createElement('div');\r\n div.style.width = '200px';\r\n div.style.padding = '1px 2px 3px 4px';\r\n div.style.borderStyle = 'solid';\r\n div.style.borderWidth = '1px 2px 3px 4px';\r\n div.style.boxSizing = 'border-box';\r\n\r\n var body = document.body || document.documentElement;\r\n body.appendChild( div );\r\n var style = getStyle( div );\r\n // round value for browser zoom. desandro/masonry#928\r\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\r\n getSize.isBoxSizeOuter = isBoxSizeOuter;\r\n\r\n body.removeChild( div );\r\n}\r\n\r\n// -------------------------- getSize -------------------------- //\r\n\r\nfunction getSize( elem ) {\r\n setup();\r\n\r\n // use querySeletor if elem is string\r\n if ( typeof elem == 'string' ) {\r\n elem = document.querySelector( elem );\r\n }\r\n\r\n // do not proceed on non-objects\r\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\r\n return;\r\n }\r\n\r\n var style = getStyle( elem );\r\n\r\n // if hidden, everything is 0\r\n if ( style.display == 'none' ) {\r\n return getZeroSize();\r\n }\r\n\r\n var size = {};\r\n size.width = elem.offsetWidth;\r\n size.height = elem.offsetHeight;\r\n\r\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\r\n\r\n // get all measurements\r\n for ( var i=0; i < measurementsLength; i++ ) {\r\n var measurement = measurements[i];\r\n var value = style[ measurement ];\r\n var num = parseFloat( value );\r\n // any 'auto', 'medium' value will be 0\r\n size[ measurement ] = !isNaN( num ) ? num : 0;\r\n }\r\n\r\n var paddingWidth = size.paddingLeft + size.paddingRight;\r\n var paddingHeight = size.paddingTop + size.paddingBottom;\r\n var marginWidth = size.marginLeft + size.marginRight;\r\n var marginHeight = size.marginTop + size.marginBottom;\r\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\r\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\r\n\r\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\r\n\r\n // overwrite width and height if we can get it from style\r\n var styleWidth = getStyleSize( style.width );\r\n if ( styleWidth !== false ) {\r\n size.width = styleWidth +\r\n // add padding and border unless it's already including it\r\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\r\n }\r\n\r\n var styleHeight = getStyleSize( style.height );\r\n if ( styleHeight !== false ) {\r\n size.height = styleHeight +\r\n // add padding and border unless it's already including it\r\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\r\n }\r\n\r\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\r\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\r\n\r\n size.outerWidth = size.width + marginWidth;\r\n size.outerHeight = size.height + marginHeight;\r\n\r\n return size;\r\n}\r\n\r\nreturn getSize;\r\n\r\n});\r\n\r\n/**\r\n * matchesSelector v2.0.2\r\n * matchesSelector( element, '.selector' )\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n( function( window, factory ) {\r\n /*global define: false, module: false */\r\n 'use strict';\r\n // universal module definition\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'desandro-matches-selector/matches-selector',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.matchesSelector = factory();\r\n }\r\n\r\n}( window, function factory() {\r\n 'use strict';\r\n\r\n var matchesMethod = ( function() {\r\n var ElemProto = window.Element.prototype;\r\n // check for the standard method name first\r\n if ( ElemProto.matches ) {\r\n return 'matches';\r\n }\r\n // check un-prefixed\r\n if ( ElemProto.matchesSelector ) {\r\n return 'matchesSelector';\r\n }\r\n // check vendor prefixes\r\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\r\n\r\n for ( var i=0; i < prefixes.length; i++ ) {\r\n var prefix = prefixes[i];\r\n var method = prefix + 'MatchesSelector';\r\n if ( ElemProto[ method ] ) {\r\n return method;\r\n }\r\n }\r\n })();\r\n\r\n return function matchesSelector( elem, selector ) {\r\n return elem[ matchesMethod ]( selector );\r\n };\r\n\r\n}));\r\n\r\n/**\r\n * Fizzy UI utils v2.0.7\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'fizzy-ui-utils/utils',[\r\n 'desandro-matches-selector/matches-selector'\r\n ], function( matchesSelector ) {\r\n return factory( window, matchesSelector );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('desandro-matches-selector')\r\n );\r\n } else {\r\n // browser global\r\n window.fizzyUIUtils = factory(\r\n window,\r\n window.matchesSelector\r\n );\r\n }\r\n\r\n}( window, function factory( window, matchesSelector ) {\r\n\r\n\r\n\r\nvar utils = {};\r\n\r\n// ----- extend ----- //\r\n\r\n// extends objects\r\nutils.extend = function( a, b ) {\r\n for ( var prop in b ) {\r\n a[ prop ] = b[ prop ];\r\n }\r\n return a;\r\n};\r\n\r\n// ----- modulo ----- //\r\n\r\nutils.modulo = function( num, div ) {\r\n return ( ( num % div ) + div ) % div;\r\n};\r\n\r\n// ----- makeArray ----- //\r\n\r\nvar arraySlice = Array.prototype.slice;\r\n\r\n// turn element or nodeList into an array\r\nutils.makeArray = function( obj ) {\r\n if ( Array.isArray( obj ) ) {\r\n // use object if already an array\r\n return obj;\r\n }\r\n // return empty array if undefined or null. #6\r\n if ( obj === null || obj === undefined ) {\r\n return [];\r\n }\r\n\r\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\r\n if ( isArrayLike ) {\r\n // convert nodeList to array\r\n return arraySlice.call( obj );\r\n }\r\n\r\n // array of single index\r\n return [ obj ];\r\n};\r\n\r\n// ----- removeFrom ----- //\r\n\r\nutils.removeFrom = function( ary, obj ) {\r\n var index = ary.indexOf( obj );\r\n if ( index != -1 ) {\r\n ary.splice( index, 1 );\r\n }\r\n};\r\n\r\n// ----- getParent ----- //\r\n\r\nutils.getParent = function( elem, selector ) {\r\n while ( elem.parentNode && elem != document.body ) {\r\n elem = elem.parentNode;\r\n if ( matchesSelector( elem, selector ) ) {\r\n return elem;\r\n }\r\n }\r\n};\r\n\r\n// ----- getQueryElement ----- //\r\n\r\n// use element as selector string\r\nutils.getQueryElement = function( elem ) {\r\n if ( typeof elem == 'string' ) {\r\n return document.querySelector( elem );\r\n }\r\n return elem;\r\n};\r\n\r\n// ----- handleEvent ----- //\r\n\r\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\r\nutils.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\n// ----- filterFindElements ----- //\r\n\r\nutils.filterFindElements = function( elems, selector ) {\r\n // make array of elems\r\n elems = utils.makeArray( elems );\r\n var ffElems = [];\r\n\r\n elems.forEach( function( elem ) {\r\n // check that elem is an actual element\r\n if ( !( elem instanceof HTMLElement ) ) {\r\n return;\r\n }\r\n // add elem if no selector\r\n if ( !selector ) {\r\n ffElems.push( elem );\r\n return;\r\n }\r\n // filter & find items if we have a selector\r\n // filter\r\n if ( matchesSelector( elem, selector ) ) {\r\n ffElems.push( elem );\r\n }\r\n // find children\r\n var childElems = elem.querySelectorAll( selector );\r\n // concat childElems to filterFound array\r\n for ( var i=0; i < childElems.length; i++ ) {\r\n ffElems.push( childElems[i] );\r\n }\r\n });\r\n\r\n return ffElems;\r\n};\r\n\r\n// ----- debounceMethod ----- //\r\n\r\nutils.debounceMethod = function( _class, methodName, threshold ) {\r\n threshold = threshold || 100;\r\n // original method\r\n var method = _class.prototype[ methodName ];\r\n var timeoutName = methodName + 'Timeout';\r\n\r\n _class.prototype[ methodName ] = function() {\r\n var timeout = this[ timeoutName ];\r\n clearTimeout( timeout );\r\n\r\n var args = arguments;\r\n var _this = this;\r\n this[ timeoutName ] = setTimeout( function() {\r\n method.apply( _this, args );\r\n delete _this[ timeoutName ];\r\n }, threshold );\r\n };\r\n};\r\n\r\n// ----- docReady ----- //\r\n\r\nutils.docReady = function( callback ) {\r\n var readyState = document.readyState;\r\n if ( readyState == 'complete' || readyState == 'interactive' ) {\r\n // do async to allow for other scripts to run. metafizzy/flickity#441\r\n setTimeout( callback );\r\n } else {\r\n document.addEventListener( 'DOMContentLoaded', callback );\r\n }\r\n};\r\n\r\n// ----- htmlInit ----- //\r\n\r\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\r\nutils.toDashed = function( str ) {\r\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\r\n return $1 + '-' + $2;\r\n }).toLowerCase();\r\n};\r\n\r\nvar console = window.console;\r\n/**\r\n * allow user to initialize classes via [data-namespace] or .js-namespace class\r\n * htmlInit( Widget, 'widgetName' )\r\n * options are parsed from data-namespace-options\r\n */\r\nutils.htmlInit = function( WidgetClass, namespace ) {\r\n utils.docReady( function() {\r\n var dashedNamespace = utils.toDashed( namespace );\r\n var dataAttr = 'data-' + dashedNamespace;\r\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\r\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\r\n var elems = utils.makeArray( dataAttrElems )\r\n .concat( utils.makeArray( jsDashElems ) );\r\n var dataOptionsAttr = dataAttr + '-options';\r\n var jQuery = window.jQuery;\r\n\r\n elems.forEach( function( elem ) {\r\n var attr = elem.getAttribute( dataAttr ) ||\r\n elem.getAttribute( dataOptionsAttr );\r\n var options;\r\n try {\r\n options = attr && JSON.parse( attr );\r\n } catch ( error ) {\r\n // log error, do not initialize\r\n if ( console ) {\r\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\r\n ': ' + error );\r\n }\r\n return;\r\n }\r\n // initialize\r\n var instance = new WidgetClass( elem, options );\r\n // make available via $().data('namespace')\r\n if ( jQuery ) {\r\n jQuery.data( elem, namespace, instance );\r\n }\r\n });\r\n\r\n });\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn utils;\r\n\r\n}));\r\n\r\n// Flickity.Cell\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/cell',[\r\n 'get-size/get-size'\r\n ], function( getSize ) {\r\n return factory( window, getSize );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('get-size')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = window.Flickity || {};\r\n window.Flickity.Cell = factory(\r\n window,\r\n window.getSize\r\n );\r\n }\r\n\r\n}( window, function factory( window, getSize ) {\r\n\r\n\r\n\r\nfunction Cell( elem, parent ) {\r\n this.element = elem;\r\n this.parent = parent;\r\n\r\n this.create();\r\n}\r\n\r\nvar proto = Cell.prototype;\r\n\r\nproto.create = function() {\r\n this.element.style.position = 'absolute';\r\n this.element.setAttribute( 'aria-hidden', 'true' );\r\n this.x = 0;\r\n this.shift = 0;\r\n};\r\n\r\nproto.destroy = function() {\r\n // reset style\r\n this.unselect();\r\n this.element.style.position = '';\r\n var side = this.parent.originSide;\r\n this.element.style[ side ] = '';\r\n};\r\n\r\nproto.getSize = function() {\r\n this.size = getSize( this.element );\r\n};\r\n\r\nproto.setPosition = function( x ) {\r\n this.x = x;\r\n this.updateTarget();\r\n this.renderPosition( x );\r\n};\r\n\r\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\r\nproto.updateTarget = proto.setDefaultTarget = function() {\r\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\r\n this.target = this.x + this.size[ marginProperty ] +\r\n this.size.width * this.parent.cellAlign;\r\n};\r\n\r\nproto.renderPosition = function( x ) {\r\n // render position of cell with in slider\r\n var side = this.parent.originSide;\r\n this.element.style[ side ] = this.parent.getPositionValue( x );\r\n};\r\n\r\nproto.select = function() {\r\n this.element.classList.add('is-selected');\r\n this.element.removeAttribute('aria-hidden');\r\n};\r\n\r\nproto.unselect = function() {\r\n this.element.classList.remove('is-selected');\r\n this.element.setAttribute( 'aria-hidden', 'true' );\r\n};\r\n\r\n/**\r\n * @param {Integer} factor - 0, 1, or -1\r\n**/\r\nproto.wrapShift = function( shift ) {\r\n this.shift = shift;\r\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\r\n};\r\n\r\nproto.remove = function() {\r\n this.element.parentNode.removeChild( this.element );\r\n};\r\n\r\nreturn Cell;\r\n\r\n}));\r\n\r\n// slide\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/slide',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.Flickity = window.Flickity || {};\r\n window.Flickity.Slide = factory();\r\n }\r\n\r\n}( window, function factory() {\r\n'use strict';\r\n\r\nfunction Slide( parent ) {\r\n this.parent = parent;\r\n this.isOriginLeft = parent.originSide == 'left';\r\n this.cells = [];\r\n this.outerWidth = 0;\r\n this.height = 0;\r\n}\r\n\r\nvar proto = Slide.prototype;\r\n\r\nproto.addCell = function( cell ) {\r\n this.cells.push( cell );\r\n this.outerWidth += cell.size.outerWidth;\r\n this.height = Math.max( cell.size.outerHeight, this.height );\r\n // first cell stuff\r\n if ( this.cells.length == 1 ) {\r\n this.x = cell.x; // x comes from first cell\r\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\r\n this.firstMargin = cell.size[ beginMargin ];\r\n }\r\n};\r\n\r\nproto.updateTarget = function() {\r\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\r\n var lastCell = this.getLastCell();\r\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\r\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\r\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\r\n};\r\n\r\nproto.getLastCell = function() {\r\n return this.cells[ this.cells.length - 1 ];\r\n};\r\n\r\nproto.select = function() {\r\n this.cells.forEach( function( cell ) {\r\n cell.select();\r\n });\r\n};\r\n\r\nproto.unselect = function() {\r\n this.cells.forEach( function( cell ) {\r\n cell.unselect();\r\n });\r\n};\r\n\r\nproto.getCellElements = function() {\r\n return this.cells.map( function( cell ) {\r\n return cell.element;\r\n });\r\n};\r\n\r\nreturn Slide;\r\n\r\n}));\r\n\r\n// animate\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/animate',[\r\n 'fizzy-ui-utils/utils'\r\n ], function( utils ) {\r\n return factory( window, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = window.Flickity || {};\r\n window.Flickity.animatePrototype = factory(\r\n window,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, utils ) {\r\n\r\n\r\n\r\n// -------------------------- animate -------------------------- //\r\n\r\nvar proto = {};\r\n\r\nproto.startAnimation = function() {\r\n if ( this.isAnimating ) {\r\n return;\r\n }\r\n\r\n this.isAnimating = true;\r\n this.restingFrames = 0;\r\n this.animate();\r\n};\r\n\r\nproto.animate = function() {\r\n this.applyDragForce();\r\n this.applySelectedAttraction();\r\n\r\n var previousX = this.x;\r\n\r\n this.integratePhysics();\r\n this.positionSlider();\r\n this.settle( previousX );\r\n // animate next frame\r\n if ( this.isAnimating ) {\r\n var _this = this;\r\n requestAnimationFrame( function animateFrame() {\r\n _this.animate();\r\n });\r\n }\r\n};\r\n\r\nproto.positionSlider = function() {\r\n var x = this.x;\r\n // wrap position around\r\n if ( this.options.wrapAround && this.cells.length > 1 ) {\r\n x = utils.modulo( x, this.slideableWidth );\r\n x = x - this.slideableWidth;\r\n this.shiftWrapCells( x );\r\n }\r\n\r\n this.setTranslateX( x, this.isAnimating );\r\n this.dispatchScrollEvent();\r\n};\r\n\r\nproto.setTranslateX = function( x, is3d ) {\r\n x += this.cursorPosition;\r\n // reverse if right-to-left and using transform\r\n x = this.options.rightToLeft ? -x : x;\r\n var translateX = this.getPositionValue( x );\r\n // use 3D tranforms for hardware acceleration on iOS\r\n // but use 2D when settled, for better font-rendering\r\n this.slider.style.transform = is3d ?\r\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\r\n};\r\n\r\nproto.dispatchScrollEvent = function() {\r\n var firstSlide = this.slides[0];\r\n if ( !firstSlide ) {\r\n return;\r\n }\r\n var positionX = -this.x - firstSlide.target;\r\n var progress = positionX / this.slidesWidth;\r\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\r\n};\r\n\r\nproto.positionSliderAtSelected = function() {\r\n if ( !this.cells.length ) {\r\n return;\r\n }\r\n this.x = -this.selectedSlide.target;\r\n this.velocity = 0; // stop wobble\r\n this.positionSlider();\r\n};\r\n\r\nproto.getPositionValue = function( position ) {\r\n if ( this.options.percentPosition ) {\r\n // percent position, round to 2 digits, like 12.34%\r\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\r\n } else {\r\n // pixel positioning\r\n return Math.round( position ) + 'px';\r\n }\r\n};\r\n\r\nproto.settle = function( previousX ) {\r\n // keep track of frames where x hasn't moved\r\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\r\n this.restingFrames++;\r\n }\r\n // stop animating if resting for 3 or more frames\r\n if ( this.restingFrames > 2 ) {\r\n this.isAnimating = false;\r\n delete this.isFreeScrolling;\r\n // render position with translateX when settled\r\n this.positionSlider();\r\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\r\n }\r\n};\r\n\r\nproto.shiftWrapCells = function( x ) {\r\n // shift before cells\r\n var beforeGap = this.cursorPosition + x;\r\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\r\n // shift after cells\r\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\r\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\r\n};\r\n\r\nproto._shiftCells = function( cells, gap, shift ) {\r\n for ( var i=0; i < cells.length; i++ ) {\r\n var cell = cells[i];\r\n var cellShift = gap > 0 ? shift : 0;\r\n cell.wrapShift( cellShift );\r\n gap -= cell.size.outerWidth;\r\n }\r\n};\r\n\r\nproto._unshiftCells = function( cells ) {\r\n if ( !cells || !cells.length ) {\r\n return;\r\n }\r\n for ( var i=0; i < cells.length; i++ ) {\r\n cells[i].wrapShift( 0 );\r\n }\r\n};\r\n\r\n// -------------------------- physics -------------------------- //\r\n\r\nproto.integratePhysics = function() {\r\n this.x += this.velocity;\r\n this.velocity *= this.getFrictionFactor();\r\n};\r\n\r\nproto.applyForce = function( force ) {\r\n this.velocity += force;\r\n};\r\n\r\nproto.getFrictionFactor = function() {\r\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\r\n};\r\n\r\nproto.getRestingPosition = function() {\r\n // my thanks to Steven Wittens, who simplified this math greatly\r\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\r\n};\r\n\r\nproto.applyDragForce = function() {\r\n if ( !this.isDraggable || !this.isPointerDown ) {\r\n return;\r\n }\r\n // change the position to drag position by applying force\r\n var dragVelocity = this.dragX - this.x;\r\n var dragForce = dragVelocity - this.velocity;\r\n this.applyForce( dragForce );\r\n};\r\n\r\nproto.applySelectedAttraction = function() {\r\n // do not attract if pointer down or no slides\r\n var dragDown = this.isDraggable && this.isPointerDown;\r\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\r\n return;\r\n }\r\n var distance = this.selectedSlide.target * -1 - this.x;\r\n var force = distance * this.options.selectedAttraction;\r\n this.applyForce( force );\r\n};\r\n\r\nreturn proto;\r\n\r\n}));\r\n\r\n// Flickity main\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/flickity',[\r\n 'ev-emitter/ev-emitter',\r\n 'get-size/get-size',\r\n 'fizzy-ui-utils/utils',\r\n './cell',\r\n './slide',\r\n './animate'\r\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\r\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter'),\r\n require('get-size'),\r\n require('fizzy-ui-utils'),\r\n require('./cell'),\r\n require('./slide'),\r\n require('./animate')\r\n );\r\n } else {\r\n // browser global\r\n var _Flickity = window.Flickity;\r\n\r\n window.Flickity = factory(\r\n window,\r\n window.EvEmitter,\r\n window.getSize,\r\n window.fizzyUIUtils,\r\n _Flickity.Cell,\r\n _Flickity.Slide,\r\n _Flickity.animatePrototype\r\n );\r\n }\r\n\r\n}( window, function factory( window, EvEmitter, getSize,\r\n utils, Cell, Slide, animatePrototype ) {\r\n\r\n\r\n\r\n// vars\r\nvar jQuery = window.jQuery;\r\nvar getComputedStyle = window.getComputedStyle;\r\nvar console = window.console;\r\n\r\nfunction moveElements( elems, toElem ) {\r\n elems = utils.makeArray( elems );\r\n while ( elems.length ) {\r\n toElem.appendChild( elems.shift() );\r\n }\r\n}\r\n\r\n// -------------------------- Flickity -------------------------- //\r\n\r\n// globally unique identifiers\r\nvar GUID = 0;\r\n// internal store of all Flickity intances\r\nvar instances = {};\r\n\r\nfunction Flickity( element, options ) {\r\n var queryElement = utils.getQueryElement( element );\r\n if ( !queryElement ) {\r\n if ( console ) {\r\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\r\n }\r\n return;\r\n }\r\n this.element = queryElement;\r\n // do not initialize twice on same element\r\n if ( this.element.flickityGUID ) {\r\n var instance = instances[ this.element.flickityGUID ];\r\n instance.option( options );\r\n return instance;\r\n }\r\n\r\n // add jQuery\r\n if ( jQuery ) {\r\n this.$element = jQuery( this.element );\r\n }\r\n // options\r\n this.options = utils.extend( {}, this.constructor.defaults );\r\n this.option( options );\r\n\r\n // kick things off\r\n this._create();\r\n}\r\n\r\nFlickity.defaults = {\r\n accessibility: true,\r\n // adaptiveHeight: false,\r\n cellAlign: 'center',\r\n // cellSelector: undefined,\r\n // contain: false,\r\n freeScrollFriction: 0.075, // friction when free-scrolling\r\n friction: 0.28, // friction when selecting\r\n namespaceJQueryEvents: true,\r\n // initialIndex: 0,\r\n percentPosition: true,\r\n resize: true,\r\n selectedAttraction: 0.025,\r\n setGallerySize: true\r\n // watchCSS: false,\r\n // wrapAround: false\r\n};\r\n\r\n// hash of methods triggered on _create()\r\nFlickity.createMethods = [];\r\n\r\nvar proto = Flickity.prototype;\r\n// inherit EventEmitter\r\nutils.extend( proto, EvEmitter.prototype );\r\n\r\nproto._create = function() {\r\n // add id for Flickity.data\r\n var id = this.guid = ++GUID;\r\n this.element.flickityGUID = id; // expando\r\n instances[ id ] = this; // associate via id\r\n // initial properties\r\n this.selectedIndex = 0;\r\n // how many frames slider has been in same position\r\n this.restingFrames = 0;\r\n // initial physics properties\r\n this.x = 0;\r\n this.velocity = 0;\r\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\r\n // create viewport & slider\r\n this.viewport = document.createElement('div');\r\n this.viewport.className = 'flickity-viewport';\r\n this._createSlider();\r\n\r\n if ( this.options.resize || this.options.watchCSS ) {\r\n window.addEventListener( 'resize', this );\r\n }\r\n\r\n // add listeners from on option\r\n for ( var eventName in this.options.on ) {\r\n var listener = this.options.on[ eventName ];\r\n this.on( eventName, listener );\r\n }\r\n\r\n Flickity.createMethods.forEach( function( method ) {\r\n this[ method ]();\r\n }, this );\r\n\r\n if ( this.options.watchCSS ) {\r\n this.watchCSS();\r\n } else {\r\n this.activate();\r\n }\r\n\r\n};\r\n\r\n/**\r\n * set options\r\n * @param {Object} opts\r\n */\r\nproto.option = function( opts ) {\r\n utils.extend( this.options, opts );\r\n};\r\n\r\nproto.activate = function() {\r\n if ( this.isActive ) {\r\n return;\r\n }\r\n this.isActive = true;\r\n this.element.classList.add('flickity-enabled');\r\n if ( this.options.rightToLeft ) {\r\n this.element.classList.add('flickity-rtl');\r\n }\r\n\r\n this.getSize();\r\n // move initial cell elements so they can be loaded as cells\r\n var cellElems = this._filterFindCellElements( this.element.children );\r\n moveElements( cellElems, this.slider );\r\n this.viewport.appendChild( this.slider );\r\n this.element.appendChild( this.viewport );\r\n // get cells from children\r\n this.reloadCells();\r\n\r\n if ( this.options.accessibility ) {\r\n // allow element to focusable\r\n this.element.tabIndex = 0;\r\n // listen for key presses\r\n this.element.addEventListener( 'keydown', this );\r\n }\r\n\r\n this.emitEvent('activate');\r\n this.selectInitialIndex();\r\n // flag for initial activation, for using initialIndex\r\n this.isInitActivated = true;\r\n // ready event. #493\r\n this.dispatchEvent('ready');\r\n};\r\n\r\n// slider positions the cells\r\nproto._createSlider = function() {\r\n // slider element does all the positioning\r\n var slider = document.createElement('div');\r\n slider.className = 'flickity-slider';\r\n slider.style[ this.originSide ] = 0;\r\n this.slider = slider;\r\n};\r\n\r\nproto._filterFindCellElements = function( elems ) {\r\n return utils.filterFindElements( elems, this.options.cellSelector );\r\n};\r\n\r\n// goes through all children\r\nproto.reloadCells = function() {\r\n // collection of item elements\r\n this.cells = this._makeCells( this.slider.children );\r\n this.positionCells();\r\n this._getWrapShiftCells();\r\n this.setGallerySize();\r\n};\r\n\r\n/**\r\n * turn elements into Flickity.Cells\r\n * @param {Array or NodeList or HTMLElement} elems\r\n * @returns {Array} items - collection of new Flickity Cells\r\n */\r\nproto._makeCells = function( elems ) {\r\n var cellElems = this._filterFindCellElements( elems );\r\n\r\n // create new Flickity for collection\r\n var cells = cellElems.map( function( cellElem ) {\r\n return new Cell( cellElem, this );\r\n }, this );\r\n\r\n return cells;\r\n};\r\n\r\nproto.getLastCell = function() {\r\n return this.cells[ this.cells.length - 1 ];\r\n};\r\n\r\nproto.getLastSlide = function() {\r\n return this.slides[ this.slides.length - 1 ];\r\n};\r\n\r\n// positions all cells\r\nproto.positionCells = function() {\r\n // size all cells\r\n this._sizeCells( this.cells );\r\n // position all cells\r\n this._positionCells( 0 );\r\n};\r\n\r\n/**\r\n * position certain cells\r\n * @param {Integer} index - which cell to start with\r\n */\r\nproto._positionCells = function( index ) {\r\n index = index || 0;\r\n // also measure maxCellHeight\r\n // start 0 if positioning all cells\r\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\r\n var cellX = 0;\r\n // get cellX\r\n if ( index > 0 ) {\r\n var startCell = this.cells[ index - 1 ];\r\n cellX = startCell.x + startCell.size.outerWidth;\r\n }\r\n var len = this.cells.length;\r\n for ( var i=index; i < len; i++ ) {\r\n var cell = this.cells[i];\r\n cell.setPosition( cellX );\r\n cellX += cell.size.outerWidth;\r\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\r\n }\r\n // keep track of cellX for wrap-around\r\n this.slideableWidth = cellX;\r\n // slides\r\n this.updateSlides();\r\n // contain slides target\r\n this._containSlides();\r\n // update slidesWidth\r\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\r\n};\r\n\r\n/**\r\n * cell.getSize() on multiple cells\r\n * @param {Array} cells\r\n */\r\nproto._sizeCells = function( cells ) {\r\n cells.forEach( function( cell ) {\r\n cell.getSize();\r\n });\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nproto.updateSlides = function() {\r\n this.slides = [];\r\n if ( !this.cells.length ) {\r\n return;\r\n }\r\n\r\n var slide = new Slide( this );\r\n this.slides.push( slide );\r\n var isOriginLeft = this.originSide == 'left';\r\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\r\n\r\n var canCellFit = this._getCanCellFit();\r\n\r\n this.cells.forEach( function( cell, i ) {\r\n // just add cell if first cell in slide\r\n if ( !slide.cells.length ) {\r\n slide.addCell( cell );\r\n return;\r\n }\r\n\r\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\r\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\r\n\r\n if ( canCellFit.call( this, i, slideWidth ) ) {\r\n slide.addCell( cell );\r\n } else {\r\n // doesn't fit, new slide\r\n slide.updateTarget();\r\n\r\n slide = new Slide( this );\r\n this.slides.push( slide );\r\n slide.addCell( cell );\r\n }\r\n }, this );\r\n // last slide\r\n slide.updateTarget();\r\n // update .selectedSlide\r\n this.updateSelectedSlide();\r\n};\r\n\r\nproto._getCanCellFit = function() {\r\n var groupCells = this.options.groupCells;\r\n if ( !groupCells ) {\r\n return function() {\r\n return false;\r\n };\r\n } else if ( typeof groupCells == 'number' ) {\r\n // group by number. 3 -> [0,1,2], [3,4,5], ...\r\n var number = parseInt( groupCells, 10 );\r\n return function( i ) {\r\n return ( i % number ) !== 0;\r\n };\r\n }\r\n // default, group by width of slide\r\n // parse '75%\r\n var percentMatch = typeof groupCells == 'string' &&\r\n groupCells.match(/^(\\d+)%$/);\r\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\r\n return function( i, slideWidth ) {\r\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\r\n };\r\n};\r\n\r\n// alias _init for jQuery plugin .flickity()\r\nproto._init =\r\nproto.reposition = function() {\r\n this.positionCells();\r\n this.positionSliderAtSelected();\r\n};\r\n\r\nproto.getSize = function() {\r\n this.size = getSize( this.element );\r\n this.setCellAlign();\r\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\r\n};\r\n\r\nvar cellAlignShorthands = {\r\n // cell align, then based on origin side\r\n center: {\r\n left: 0.5,\r\n right: 0.5\r\n },\r\n left: {\r\n left: 0,\r\n right: 1\r\n },\r\n right: {\r\n right: 0,\r\n left: 1\r\n }\r\n};\r\n\r\nproto.setCellAlign = function() {\r\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\r\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\r\n};\r\n\r\nproto.setGallerySize = function() {\r\n if ( this.options.setGallerySize ) {\r\n var height = this.options.adaptiveHeight && this.selectedSlide ?\r\n this.selectedSlide.height : this.maxCellHeight;\r\n this.viewport.style.height = height + 'px';\r\n }\r\n};\r\n\r\nproto._getWrapShiftCells = function() {\r\n // only for wrap-around\r\n if ( !this.options.wrapAround ) {\r\n return;\r\n }\r\n // unshift previous cells\r\n this._unshiftCells( this.beforeShiftCells );\r\n this._unshiftCells( this.afterShiftCells );\r\n // get before cells\r\n // initial gap\r\n var gapX = this.cursorPosition;\r\n var cellIndex = this.cells.length - 1;\r\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\r\n // get after cells\r\n // ending gap between last cell and end of gallery viewport\r\n gapX = this.size.innerWidth - this.cursorPosition;\r\n // start cloning at first cell, working forwards\r\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\r\n};\r\n\r\nproto._getGapCells = function( gapX, cellIndex, increment ) {\r\n // keep adding cells until the cover the initial gap\r\n var cells = [];\r\n while ( gapX > 0 ) {\r\n var cell = this.cells[ cellIndex ];\r\n if ( !cell ) {\r\n break;\r\n }\r\n cells.push( cell );\r\n cellIndex += increment;\r\n gapX -= cell.size.outerWidth;\r\n }\r\n return cells;\r\n};\r\n\r\n// ----- contain ----- //\r\n\r\n// contain cell targets so no excess sliding\r\nproto._containSlides = function() {\r\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\r\n return;\r\n }\r\n var isRightToLeft = this.options.rightToLeft;\r\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\r\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\r\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\r\n // content is less than gallery size\r\n var isContentSmaller = contentWidth < this.size.innerWidth;\r\n // bounds\r\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\r\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\r\n // contain each cell target\r\n this.slides.forEach( function( slide ) {\r\n if ( isContentSmaller ) {\r\n // all cells fit inside gallery\r\n slide.target = contentWidth * this.cellAlign;\r\n } else {\r\n // contain to bounds\r\n slide.target = Math.max( slide.target, beginBound );\r\n slide.target = Math.min( slide.target, endBound );\r\n }\r\n }, this );\r\n};\r\n\r\n// ----- ----- //\r\n\r\n/**\r\n * emits events via eventEmitter and jQuery events\r\n * @param {String} type - name of event\r\n * @param {Event} event - original event\r\n * @param {Array} args - extra arguments\r\n */\r\nproto.dispatchEvent = function( type, event, args ) {\r\n var emitArgs = event ? [ event ].concat( args ) : args;\r\n this.emitEvent( type, emitArgs );\r\n\r\n if ( jQuery && this.$element ) {\r\n // default trigger with type if no event\r\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\r\n var $event = type;\r\n if ( event ) {\r\n // create jQuery event\r\n var jQEvent = jQuery.Event( event );\r\n jQEvent.type = type;\r\n $event = jQEvent;\r\n }\r\n this.$element.trigger( $event, args );\r\n }\r\n};\r\n\r\n// -------------------------- select -------------------------- //\r\n\r\n/**\r\n * @param {Integer} index - index of the slide\r\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\r\n * @param {Boolean} isInstant - will immediately set position at selected cell\r\n */\r\nproto.select = function( index, isWrap, isInstant ) {\r\n if ( !this.isActive ) {\r\n return;\r\n }\r\n index = parseInt( index, 10 );\r\n this._wrapSelect( index );\r\n\r\n if ( this.options.wrapAround || isWrap ) {\r\n index = utils.modulo( index, this.slides.length );\r\n }\r\n // bail if invalid index\r\n if ( !this.slides[ index ] ) {\r\n return;\r\n }\r\n var prevIndex = this.selectedIndex;\r\n this.selectedIndex = index;\r\n this.updateSelectedSlide();\r\n if ( isInstant ) {\r\n this.positionSliderAtSelected();\r\n } else {\r\n this.startAnimation();\r\n }\r\n if ( this.options.adaptiveHeight ) {\r\n this.setGallerySize();\r\n }\r\n // events\r\n this.dispatchEvent( 'select', null, [ index ] );\r\n // change event if new index\r\n if ( index != prevIndex ) {\r\n this.dispatchEvent( 'change', null, [ index ] );\r\n }\r\n // old v1 event name, remove in v3\r\n this.dispatchEvent('cellSelect');\r\n};\r\n\r\n// wraps position for wrapAround, to move to closest slide. #113\r\nproto._wrapSelect = function( index ) {\r\n var len = this.slides.length;\r\n var isWrapping = this.options.wrapAround && len > 1;\r\n if ( !isWrapping ) {\r\n return index;\r\n }\r\n var wrapIndex = utils.modulo( index, len );\r\n // go to shortest\r\n var delta = Math.abs( wrapIndex - this.selectedIndex );\r\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\r\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\r\n if ( !this.isDragSelect && backWrapDelta < delta ) {\r\n index += len;\r\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\r\n index -= len;\r\n }\r\n // wrap position so slider is within normal area\r\n if ( index < 0 ) {\r\n this.x -= this.slideableWidth;\r\n } else if ( index >= len ) {\r\n this.x += this.slideableWidth;\r\n }\r\n};\r\n\r\nproto.previous = function( isWrap, isInstant ) {\r\n this.select( this.selectedIndex - 1, isWrap, isInstant );\r\n};\r\n\r\nproto.next = function( isWrap, isInstant ) {\r\n this.select( this.selectedIndex + 1, isWrap, isInstant );\r\n};\r\n\r\nproto.updateSelectedSlide = function() {\r\n var slide = this.slides[ this.selectedIndex ];\r\n // selectedIndex could be outside of slides, if triggered before resize()\r\n if ( !slide ) {\r\n return;\r\n }\r\n // unselect previous selected slide\r\n this.unselectSelectedSlide();\r\n // update new selected slide\r\n this.selectedSlide = slide;\r\n slide.select();\r\n this.selectedCells = slide.cells;\r\n this.selectedElements = slide.getCellElements();\r\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\r\n // Remove in v3?\r\n this.selectedCell = slide.cells[0];\r\n this.selectedElement = this.selectedElements[0];\r\n};\r\n\r\nproto.unselectSelectedSlide = function() {\r\n if ( this.selectedSlide ) {\r\n this.selectedSlide.unselect();\r\n }\r\n};\r\n\r\nproto.selectInitialIndex = function() {\r\n var initialIndex = this.options.initialIndex;\r\n // already activated, select previous selectedIndex\r\n if ( this.isInitActivated ) {\r\n this.select( this.selectedIndex, false, true );\r\n return;\r\n }\r\n // select with selector string\r\n if ( initialIndex && typeof initialIndex == 'string' ) {\r\n var cell = this.queryCell( initialIndex );\r\n if ( cell ) {\r\n this.selectCell( initialIndex, false, true );\r\n return;\r\n }\r\n }\r\n\r\n var index = 0;\r\n // select with number\r\n if ( initialIndex && this.slides[ initialIndex ] ) {\r\n index = initialIndex;\r\n }\r\n // select instantly\r\n this.select( index, false, true );\r\n};\r\n\r\n/**\r\n * select slide from number or cell element\r\n * @param {Element or Number} elem\r\n */\r\nproto.selectCell = function( value, isWrap, isInstant ) {\r\n // get cell\r\n var cell = this.queryCell( value );\r\n if ( !cell ) {\r\n return;\r\n }\r\n\r\n var index = this.getCellSlideIndex( cell );\r\n this.select( index, isWrap, isInstant );\r\n};\r\n\r\nproto.getCellSlideIndex = function( cell ) {\r\n // get index of slides that has cell\r\n for ( var i=0; i < this.slides.length; i++ ) {\r\n var slide = this.slides[i];\r\n var index = slide.cells.indexOf( cell );\r\n if ( index != -1 ) {\r\n return i;\r\n }\r\n }\r\n};\r\n\r\n// -------------------------- get cells -------------------------- //\r\n\r\n/**\r\n * get Flickity.Cell, given an Element\r\n * @param {Element} elem\r\n * @returns {Flickity.Cell} item\r\n */\r\nproto.getCell = function( elem ) {\r\n // loop through cells to get the one that matches\r\n for ( var i=0; i < this.cells.length; i++ ) {\r\n var cell = this.cells[i];\r\n if ( cell.element == elem ) {\r\n return cell;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * get collection of Flickity.Cells, given Elements\r\n * @param {Element, Array, NodeList} elems\r\n * @returns {Array} cells - Flickity.Cells\r\n */\r\nproto.getCells = function( elems ) {\r\n elems = utils.makeArray( elems );\r\n var cells = [];\r\n elems.forEach( function( elem ) {\r\n var cell = this.getCell( elem );\r\n if ( cell ) {\r\n cells.push( cell );\r\n }\r\n }, this );\r\n return cells;\r\n};\r\n\r\n/**\r\n * get cell elements\r\n * @returns {Array} cellElems\r\n */\r\nproto.getCellElements = function() {\r\n return this.cells.map( function( cell ) {\r\n return cell.element;\r\n });\r\n};\r\n\r\n/**\r\n * get parent cell from an element\r\n * @param {Element} elem\r\n * @returns {Flickit.Cell} cell\r\n */\r\nproto.getParentCell = function( elem ) {\r\n // first check if elem is cell\r\n var cell = this.getCell( elem );\r\n if ( cell ) {\r\n return cell;\r\n }\r\n // try to get parent cell elem\r\n elem = utils.getParent( elem, '.flickity-slider > *' );\r\n return this.getCell( elem );\r\n};\r\n\r\n/**\r\n * get cells adjacent to a slide\r\n * @param {Integer} adjCount - number of adjacent slides\r\n * @param {Integer} index - index of slide to start\r\n * @returns {Array} cells - array of Flickity.Cells\r\n */\r\nproto.getAdjacentCellElements = function( adjCount, index ) {\r\n if ( !adjCount ) {\r\n return this.selectedSlide.getCellElements();\r\n }\r\n index = index === undefined ? this.selectedIndex : index;\r\n\r\n var len = this.slides.length;\r\n if ( 1 + ( adjCount * 2 ) >= len ) {\r\n return this.getCellElements();\r\n }\r\n\r\n var cellElems = [];\r\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\r\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\r\n var slide = this.slides[ slideIndex ];\r\n if ( slide ) {\r\n cellElems = cellElems.concat( slide.getCellElements() );\r\n }\r\n }\r\n return cellElems;\r\n};\r\n\r\n/**\r\n * select slide from number or cell element\r\n * @param {Element, Selector String, or Number} selector\r\n */\r\nproto.queryCell = function( selector ) {\r\n if ( typeof selector == 'number' ) {\r\n // use number as index\r\n return this.cells[ selector ];\r\n }\r\n if ( typeof selector == 'string' ) {\r\n // do not select invalid selectors from hash: #123, #/. #791\r\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\r\n return;\r\n }\r\n // use string as selector, get element\r\n selector = this.element.querySelector( selector );\r\n }\r\n // get cell from element\r\n return this.getCell( selector );\r\n};\r\n\r\n// -------------------------- events -------------------------- //\r\n\r\nproto.uiChange = function() {\r\n this.emitEvent('uiChange');\r\n};\r\n\r\n// keep focus on element when child UI elements are clicked\r\nproto.childUIPointerDown = function( event ) {\r\n // HACK iOS does not allow touch events to bubble up?!\r\n if ( event.type != 'touchstart' ) {\r\n event.preventDefault();\r\n }\r\n this.focus();\r\n};\r\n\r\n// ----- resize ----- //\r\n\r\nproto.onresize = function() {\r\n this.watchCSS();\r\n this.resize();\r\n};\r\n\r\nutils.debounceMethod( Flickity, 'onresize', 150 );\r\n\r\nproto.resize = function() {\r\n if ( !this.isActive ) {\r\n return;\r\n }\r\n this.getSize();\r\n // wrap values\r\n if ( this.options.wrapAround ) {\r\n this.x = utils.modulo( this.x, this.slideableWidth );\r\n }\r\n this.positionCells();\r\n this._getWrapShiftCells();\r\n this.setGallerySize();\r\n this.emitEvent('resize');\r\n // update selected index for group slides, instant\r\n // TODO: position can be lost between groups of various numbers\r\n var selectedElement = this.selectedElements && this.selectedElements[0];\r\n this.selectCell( selectedElement, false, true );\r\n};\r\n\r\n// watches the :after property, activates/deactivates\r\nproto.watchCSS = function() {\r\n var watchOption = this.options.watchCSS;\r\n if ( !watchOption ) {\r\n return;\r\n }\r\n\r\n var afterContent = getComputedStyle( this.element, ':after' ).content;\r\n // activate if :after { content: 'flickity' }\r\n if ( afterContent.indexOf('flickity') != -1 ) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n};\r\n\r\n// ----- keydown ----- //\r\n\r\n// go previous/next if left/right keys pressed\r\nproto.onkeydown = function( event ) {\r\n // only work if element is in focus\r\n var isNotFocused = document.activeElement && document.activeElement != this.element;\r\n if ( !this.options.accessibility ||isNotFocused ) {\r\n return;\r\n }\r\n\r\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\r\n if ( handler ) {\r\n handler.call( this );\r\n }\r\n};\r\n\r\nFlickity.keyboardHandlers = {\r\n // left arrow\r\n 37: function() {\r\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\r\n this.uiChange();\r\n this[ leftMethod ]();\r\n },\r\n // right arrow\r\n 39: function() {\r\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\r\n this.uiChange();\r\n this[ rightMethod ]();\r\n },\r\n};\r\n\r\n// ----- focus ----- //\r\n\r\nproto.focus = function() {\r\n // TODO remove scrollTo once focus options gets more support\r\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\r\n var prevScrollY = window.pageYOffset;\r\n this.element.focus({ preventScroll: true });\r\n // hack to fix scroll jump after focus, #76\r\n if ( window.pageYOffset != prevScrollY ) {\r\n window.scrollTo( window.pageXOffset, prevScrollY );\r\n }\r\n};\r\n\r\n// -------------------------- destroy -------------------------- //\r\n\r\n// deactivate all Flickity functionality, but keep stuff available\r\nproto.deactivate = function() {\r\n if ( !this.isActive ) {\r\n return;\r\n }\r\n this.element.classList.remove('flickity-enabled');\r\n this.element.classList.remove('flickity-rtl');\r\n this.unselectSelectedSlide();\r\n // destroy cells\r\n this.cells.forEach( function( cell ) {\r\n cell.destroy();\r\n });\r\n this.element.removeChild( this.viewport );\r\n // move child elements back into element\r\n moveElements( this.slider.children, this.element );\r\n if ( this.options.accessibility ) {\r\n this.element.removeAttribute('tabIndex');\r\n this.element.removeEventListener( 'keydown', this );\r\n }\r\n // set flags\r\n this.isActive = false;\r\n this.emitEvent('deactivate');\r\n};\r\n\r\nproto.destroy = function() {\r\n this.deactivate();\r\n window.removeEventListener( 'resize', this );\r\n this.allOff();\r\n this.emitEvent('destroy');\r\n if ( jQuery && this.$element ) {\r\n jQuery.removeData( this.element, 'flickity' );\r\n }\r\n delete this.element.flickityGUID;\r\n delete instances[ this.guid ];\r\n};\r\n\r\n// -------------------------- prototype -------------------------- //\r\n\r\nutils.extend( proto, animatePrototype );\r\n\r\n// -------------------------- extras -------------------------- //\r\n\r\n/**\r\n * get Flickity instance from element\r\n * @param {Element} elem\r\n * @returns {Flickity}\r\n */\r\nFlickity.data = function( elem ) {\r\n elem = utils.getQueryElement( elem );\r\n var id = elem && elem.flickityGUID;\r\n return id && instances[ id ];\r\n};\r\n\r\nutils.htmlInit( Flickity, 'flickity' );\r\n\r\nif ( jQuery && jQuery.bridget ) {\r\n jQuery.bridget( 'flickity', Flickity );\r\n}\r\n\r\n// set internal jQuery, for Webpack + jQuery v3, #478\r\nFlickity.setJQuery = function( jq ) {\r\n jQuery = jq;\r\n};\r\n\r\nFlickity.Cell = Cell;\r\nFlickity.Slide = Slide;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n/*!\r\n * Unipointer v2.3.0\r\n * base class for doing one thing with pointer event\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */ /*global define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'unipointer/unipointer',[\r\n 'ev-emitter/ev-emitter'\r\n ], function( EvEmitter ) {\r\n return factory( window, EvEmitter );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter')\r\n );\r\n } else {\r\n // browser global\r\n window.Unipointer = factory(\r\n window,\r\n window.EvEmitter\r\n );\r\n }\r\n\r\n}( window, function factory( window, EvEmitter ) {\r\n\r\n\r\n\r\nfunction noop() {}\r\n\r\nfunction Unipointer() {}\r\n\r\n// inherit EvEmitter\r\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\r\n\r\nproto.bindStartEvent = function( elem ) {\r\n this._bindStartEvent( elem, true );\r\n};\r\n\r\nproto.unbindStartEvent = function( elem ) {\r\n this._bindStartEvent( elem, false );\r\n};\r\n\r\n/**\r\n * Add or remove start event\r\n * @param {Boolean} isAdd - remove if falsey\r\n */\r\nproto._bindStartEvent = function( elem, isAdd ) {\r\n // munge isAdd, default to true\r\n isAdd = isAdd === undefined ? true : isAdd;\r\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\r\n\r\n // default to mouse events\r\n var startEvent = 'mousedown';\r\n if ( window.PointerEvent ) {\r\n // Pointer Events\r\n startEvent = 'pointerdown';\r\n } else if ( 'ontouchstart' in window ) {\r\n // Touch Events. iOS Safari\r\n startEvent = 'touchstart';\r\n }\r\n elem[ bindMethod ]( startEvent, this );\r\n};\r\n\r\n// trigger handler methods for events\r\nproto.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\n// returns the touch that we're keeping track of\r\nproto.getTouch = function( touches ) {\r\n for ( var i=0; i < touches.length; i++ ) {\r\n var touch = touches[i];\r\n if ( touch.identifier == this.pointerIdentifier ) {\r\n return touch;\r\n }\r\n }\r\n};\r\n\r\n// ----- start event ----- //\r\n\r\nproto.onmousedown = function( event ) {\r\n // dismiss clicks from right or middle buttons\r\n var button = event.button;\r\n if ( button && ( button !== 0 && button !== 1 ) ) {\r\n return;\r\n }\r\n this._pointerDown( event, event );\r\n};\r\n\r\nproto.ontouchstart = function( event ) {\r\n this._pointerDown( event, event.changedTouches[0] );\r\n};\r\n\r\nproto.onpointerdown = function( event ) {\r\n this._pointerDown( event, event );\r\n};\r\n\r\n/**\r\n * pointer start\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto._pointerDown = function( event, pointer ) {\r\n // dismiss right click and other pointers\r\n // button = 0 is okay, 1-4 not\r\n if ( event.button || this.isPointerDown ) {\r\n return;\r\n }\r\n\r\n this.isPointerDown = true;\r\n // save pointer identifier to match up touch events\r\n this.pointerIdentifier = pointer.pointerId !== undefined ?\r\n // pointerId for pointer events, touch.indentifier for touch events\r\n pointer.pointerId : pointer.identifier;\r\n\r\n this.pointerDown( event, pointer );\r\n};\r\n\r\nproto.pointerDown = function( event, pointer ) {\r\n this._bindPostStartEvents( event );\r\n this.emitEvent( 'pointerDown', [ event, pointer ] );\r\n};\r\n\r\n// hash of events to be bound after start event\r\nvar postStartEvents = {\r\n mousedown: [ 'mousemove', 'mouseup' ],\r\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\r\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\r\n};\r\n\r\nproto._bindPostStartEvents = function( event ) {\r\n if ( !event ) {\r\n return;\r\n }\r\n // get proper events to match start event\r\n var events = postStartEvents[ event.type ];\r\n // bind events to node\r\n events.forEach( function( eventName ) {\r\n window.addEventListener( eventName, this );\r\n }, this );\r\n // save these arguments\r\n this._boundPointerEvents = events;\r\n};\r\n\r\nproto._unbindPostStartEvents = function() {\r\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\r\n if ( !this._boundPointerEvents ) {\r\n return;\r\n }\r\n this._boundPointerEvents.forEach( function( eventName ) {\r\n window.removeEventListener( eventName, this );\r\n }, this );\r\n\r\n delete this._boundPointerEvents;\r\n};\r\n\r\n// ----- move event ----- //\r\n\r\nproto.onmousemove = function( event ) {\r\n this._pointerMove( event, event );\r\n};\r\n\r\nproto.onpointermove = function( event ) {\r\n if ( event.pointerId == this.pointerIdentifier ) {\r\n this._pointerMove( event, event );\r\n }\r\n};\r\n\r\nproto.ontouchmove = function( event ) {\r\n var touch = this.getTouch( event.changedTouches );\r\n if ( touch ) {\r\n this._pointerMove( event, touch );\r\n }\r\n};\r\n\r\n/**\r\n * pointer move\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n * @private\r\n */\r\nproto._pointerMove = function( event, pointer ) {\r\n this.pointerMove( event, pointer );\r\n};\r\n\r\n// public\r\nproto.pointerMove = function( event, pointer ) {\r\n this.emitEvent( 'pointerMove', [ event, pointer ] );\r\n};\r\n\r\n// ----- end event ----- //\r\n\r\n\r\nproto.onmouseup = function( event ) {\r\n this._pointerUp( event, event );\r\n};\r\n\r\nproto.onpointerup = function( event ) {\r\n if ( event.pointerId == this.pointerIdentifier ) {\r\n this._pointerUp( event, event );\r\n }\r\n};\r\n\r\nproto.ontouchend = function( event ) {\r\n var touch = this.getTouch( event.changedTouches );\r\n if ( touch ) {\r\n this._pointerUp( event, touch );\r\n }\r\n};\r\n\r\n/**\r\n * pointer up\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n * @private\r\n */\r\nproto._pointerUp = function( event, pointer ) {\r\n this._pointerDone();\r\n this.pointerUp( event, pointer );\r\n};\r\n\r\n// public\r\nproto.pointerUp = function( event, pointer ) {\r\n this.emitEvent( 'pointerUp', [ event, pointer ] );\r\n};\r\n\r\n// ----- pointer done ----- //\r\n\r\n// triggered on pointer up & pointer cancel\r\nproto._pointerDone = function() {\r\n this._pointerReset();\r\n this._unbindPostStartEvents();\r\n this.pointerDone();\r\n};\r\n\r\nproto._pointerReset = function() {\r\n // reset properties\r\n this.isPointerDown = false;\r\n delete this.pointerIdentifier;\r\n};\r\n\r\nproto.pointerDone = noop;\r\n\r\n// ----- pointer cancel ----- //\r\n\r\nproto.onpointercancel = function( event ) {\r\n if ( event.pointerId == this.pointerIdentifier ) {\r\n this._pointerCancel( event, event );\r\n }\r\n};\r\n\r\nproto.ontouchcancel = function( event ) {\r\n var touch = this.getTouch( event.changedTouches );\r\n if ( touch ) {\r\n this._pointerCancel( event, touch );\r\n }\r\n};\r\n\r\n/**\r\n * pointer cancel\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n * @private\r\n */\r\nproto._pointerCancel = function( event, pointer ) {\r\n this._pointerDone();\r\n this.pointerCancel( event, pointer );\r\n};\r\n\r\n// public\r\nproto.pointerCancel = function( event, pointer ) {\r\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\r\n};\r\n\r\n// ----- ----- //\r\n\r\n// utility function for getting x/y coords from event\r\nUnipointer.getPointerPoint = function( pointer ) {\r\n return {\r\n x: pointer.pageX,\r\n y: pointer.pageY\r\n };\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn Unipointer;\r\n\r\n}));\r\n\r\n/*!\r\n * Unidragger v2.3.0\r\n * Draggable base class\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, unused: true, undef: true, strict: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'unidragger/unidragger',[\r\n 'unipointer/unipointer'\r\n ], function( Unipointer ) {\r\n return factory( window, Unipointer );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('unipointer')\r\n );\r\n } else {\r\n // browser global\r\n window.Unidragger = factory(\r\n window,\r\n window.Unipointer\r\n );\r\n }\r\n\r\n}( window, function factory( window, Unipointer ) {\r\n\r\n\r\n\r\n// -------------------------- Unidragger -------------------------- //\r\n\r\nfunction Unidragger() {}\r\n\r\n// inherit Unipointer & EvEmitter\r\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\r\n\r\n// ----- bind start ----- //\r\n\r\nproto.bindHandles = function() {\r\n this._bindHandles( true );\r\n};\r\n\r\nproto.unbindHandles = function() {\r\n this._bindHandles( false );\r\n};\r\n\r\n/**\r\n * Add or remove start event\r\n * @param {Boolean} isAdd\r\n */\r\nproto._bindHandles = function( isAdd ) {\r\n // munge isAdd, default to true\r\n isAdd = isAdd === undefined ? true : isAdd;\r\n // bind each handle\r\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\r\n var touchAction = isAdd ? this._touchActionValue : '';\r\n for ( var i=0; i < this.handles.length; i++ ) {\r\n var handle = this.handles[i];\r\n this._bindStartEvent( handle, isAdd );\r\n handle[ bindMethod ]( 'click', this );\r\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\r\n if ( window.PointerEvent ) {\r\n handle.style.touchAction = touchAction;\r\n }\r\n }\r\n};\r\n\r\n// prototype so it can be overwriteable by Flickity\r\nproto._touchActionValue = 'none';\r\n\r\n// ----- start event ----- //\r\n\r\n/**\r\n * pointer start\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto.pointerDown = function( event, pointer ) {\r\n var isOkay = this.okayPointerDown( event );\r\n if ( !isOkay ) {\r\n return;\r\n }\r\n // track start event position\r\n this.pointerDownPointer = pointer;\r\n\r\n event.preventDefault();\r\n this.pointerDownBlur();\r\n // bind move and end events\r\n this._bindPostStartEvents( event );\r\n this.emitEvent( 'pointerDown', [ event, pointer ] );\r\n};\r\n\r\n// nodes that have text fields\r\nvar cursorNodes = {\r\n TEXTAREA: true,\r\n INPUT: true,\r\n SELECT: true,\r\n OPTION: true,\r\n};\r\n\r\n// input types that do not have text fields\r\nvar clickTypes = {\r\n radio: true,\r\n checkbox: true,\r\n button: true,\r\n submit: true,\r\n image: true,\r\n file: true,\r\n};\r\n\r\n// dismiss inputs with text fields. flickity#403, flickity#404\r\nproto.okayPointerDown = function( event ) {\r\n var isCursorNode = cursorNodes[ event.target.nodeName ];\r\n var isClickType = clickTypes[ event.target.type ];\r\n var isOkay = !isCursorNode || isClickType;\r\n if ( !isOkay ) {\r\n this._pointerReset();\r\n }\r\n return isOkay;\r\n};\r\n\r\n// kludge to blur previously focused input\r\nproto.pointerDownBlur = function() {\r\n var focused = document.activeElement;\r\n // do not blur body for IE10, metafizzy/flickity#117\r\n var canBlur = focused && focused.blur && focused != document.body;\r\n if ( canBlur ) {\r\n focused.blur();\r\n }\r\n};\r\n\r\n// ----- move event ----- //\r\n\r\n/**\r\n * drag move\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto.pointerMove = function( event, pointer ) {\r\n var moveVector = this._dragPointerMove( event, pointer );\r\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\r\n this._dragMove( event, pointer, moveVector );\r\n};\r\n\r\n// base pointer move logic\r\nproto._dragPointerMove = function( event, pointer ) {\r\n var moveVector = {\r\n x: pointer.pageX - this.pointerDownPointer.pageX,\r\n y: pointer.pageY - this.pointerDownPointer.pageY\r\n };\r\n // start drag if pointer has moved far enough to start drag\r\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\r\n this._dragStart( event, pointer );\r\n }\r\n return moveVector;\r\n};\r\n\r\n// condition if pointer has moved far enough to start drag\r\nproto.hasDragStarted = function( moveVector ) {\r\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\r\n};\r\n\r\n// ----- end event ----- //\r\n\r\n/**\r\n * pointer up\r\n * @param {Event} event\r\n * @param {Event or Touch} pointer\r\n */\r\nproto.pointerUp = function( event, pointer ) {\r\n this.emitEvent( 'pointerUp', [ event, pointer ] );\r\n this._dragPointerUp( event, pointer );\r\n};\r\n\r\nproto._dragPointerUp = function( event, pointer ) {\r\n if ( this.isDragging ) {\r\n this._dragEnd( event, pointer );\r\n } else {\r\n // pointer didn't move enough for drag to start\r\n this._staticClick( event, pointer );\r\n }\r\n};\r\n\r\n// -------------------------- drag -------------------------- //\r\n\r\n// dragStart\r\nproto._dragStart = function( event, pointer ) {\r\n this.isDragging = true;\r\n // prevent clicks\r\n this.isPreventingClicks = true;\r\n this.dragStart( event, pointer );\r\n};\r\n\r\nproto.dragStart = function( event, pointer ) {\r\n this.emitEvent( 'dragStart', [ event, pointer ] );\r\n};\r\n\r\n// dragMove\r\nproto._dragMove = function( event, pointer, moveVector ) {\r\n // do not drag if not dragging yet\r\n if ( !this.isDragging ) {\r\n return;\r\n }\r\n\r\n this.dragMove( event, pointer, moveVector );\r\n};\r\n\r\nproto.dragMove = function( event, pointer, moveVector ) {\r\n event.preventDefault();\r\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\r\n};\r\n\r\n// dragEnd\r\nproto._dragEnd = function( event, pointer ) {\r\n // set flags\r\n this.isDragging = false;\r\n // re-enable clicking async\r\n setTimeout( function() {\r\n delete this.isPreventingClicks;\r\n }.bind( this ) );\r\n\r\n this.dragEnd( event, pointer );\r\n};\r\n\r\nproto.dragEnd = function( event, pointer ) {\r\n this.emitEvent( 'dragEnd', [ event, pointer ] );\r\n};\r\n\r\n// ----- onclick ----- //\r\n\r\n// handle all clicks and prevent clicks when dragging\r\nproto.onclick = function( event ) {\r\n if ( this.isPreventingClicks ) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\n// ----- staticClick ----- //\r\n\r\n// triggered after pointer down & up with no/tiny movement\r\nproto._staticClick = function( event, pointer ) {\r\n // ignore emulated mouse up clicks\r\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\r\n return;\r\n }\r\n\r\n this.staticClick( event, pointer );\r\n\r\n // set flag for emulated clicks 300ms after touchend\r\n if ( event.type != 'mouseup' ) {\r\n this.isIgnoringMouseUp = true;\r\n // reset flag after 300ms\r\n setTimeout( function() {\r\n delete this.isIgnoringMouseUp;\r\n }.bind( this ), 400 );\r\n }\r\n};\r\n\r\nproto.staticClick = function( event, pointer ) {\r\n this.emitEvent( 'staticClick', [ event, pointer ] );\r\n};\r\n\r\n// ----- utils ----- //\r\n\r\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\r\n\r\n// ----- ----- //\r\n\r\nreturn Unidragger;\r\n\r\n}));\r\n\r\n// drag\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/drag',[\r\n './flickity',\r\n 'unidragger/unidragger',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, Unidragger, utils ) {\r\n return factory( window, Flickity, Unidragger, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('unidragger'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = factory(\r\n window,\r\n window.Flickity,\r\n window.Unidragger,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, Unidragger, utils ) {\r\n\r\n\r\n\r\n// ----- defaults ----- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n draggable: '>1',\r\n dragThreshold: 3,\r\n});\r\n\r\n// ----- create ----- //\r\n\r\nFlickity.createMethods.push('_createDrag');\r\n\r\n// -------------------------- drag prototype -------------------------- //\r\n\r\nvar proto = Flickity.prototype;\r\nutils.extend( proto, Unidragger.prototype );\r\nproto._touchActionValue = 'pan-y';\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nvar isTouch = 'createTouch' in document;\r\nvar isTouchmoveScrollCanceled = false;\r\n\r\nproto._createDrag = function() {\r\n this.on( 'activate', this.onActivateDrag );\r\n this.on( 'uiChange', this._uiChangeDrag );\r\n this.on( 'deactivate', this.onDeactivateDrag );\r\n this.on( 'cellChange', this.updateDraggable );\r\n // TODO updateDraggable on resize? if groupCells & slides change\r\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\r\n // #457, RubaXa/Sortable#973\r\n if ( isTouch && !isTouchmoveScrollCanceled ) {\r\n window.addEventListener( 'touchmove', function() {});\r\n isTouchmoveScrollCanceled = true;\r\n }\r\n};\r\n\r\nproto.onActivateDrag = function() {\r\n this.handles = [ this.viewport ];\r\n this.bindHandles();\r\n this.updateDraggable();\r\n};\r\n\r\nproto.onDeactivateDrag = function() {\r\n this.unbindHandles();\r\n this.element.classList.remove('is-draggable');\r\n};\r\n\r\nproto.updateDraggable = function() {\r\n // disable dragging if less than 2 slides. #278\r\n if ( this.options.draggable == '>1' ) {\r\n this.isDraggable = this.slides.length > 1;\r\n } else {\r\n this.isDraggable = this.options.draggable;\r\n }\r\n if ( this.isDraggable ) {\r\n this.element.classList.add('is-draggable');\r\n } else {\r\n this.element.classList.remove('is-draggable');\r\n }\r\n};\r\n\r\n// backwards compatibility\r\nproto.bindDrag = function() {\r\n this.options.draggable = true;\r\n this.updateDraggable();\r\n};\r\n\r\nproto.unbindDrag = function() {\r\n this.options.draggable = false;\r\n this.updateDraggable();\r\n};\r\n\r\nproto._uiChangeDrag = function() {\r\n delete this.isFreeScrolling;\r\n};\r\n\r\n// -------------------------- pointer events -------------------------- //\r\n\r\nproto.pointerDown = function( event, pointer ) {\r\n if ( !this.isDraggable ) {\r\n this._pointerDownDefault( event, pointer );\r\n return;\r\n }\r\n var isOkay = this.okayPointerDown( event );\r\n if ( !isOkay ) {\r\n return;\r\n }\r\n\r\n this._pointerDownPreventDefault( event );\r\n this.pointerDownFocus( event );\r\n // blur\r\n if ( document.activeElement != this.element ) {\r\n // do not blur if already focused\r\n this.pointerDownBlur();\r\n }\r\n\r\n // stop if it was moving\r\n this.dragX = this.x;\r\n this.viewport.classList.add('is-pointer-down');\r\n // track scrolling\r\n this.pointerDownScroll = getScrollPosition();\r\n window.addEventListener( 'scroll', this );\r\n\r\n this._pointerDownDefault( event, pointer );\r\n};\r\n\r\n// default pointerDown logic, used for staticClick\r\nproto._pointerDownDefault = function( event, pointer ) {\r\n // track start event position\r\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\r\n this.pointerDownPointer = {\r\n pageX: pointer.pageX,\r\n pageY: pointer.pageY,\r\n };\r\n // bind move and end events\r\n this._bindPostStartEvents( event );\r\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\r\n};\r\n\r\nvar focusNodes = {\r\n INPUT: true,\r\n TEXTAREA: true,\r\n SELECT: true,\r\n};\r\n\r\nproto.pointerDownFocus = function( event ) {\r\n var isFocusNode = focusNodes[ event.target.nodeName ];\r\n if ( !isFocusNode ) {\r\n this.focus();\r\n }\r\n};\r\n\r\nproto._pointerDownPreventDefault = function( event ) {\r\n var isTouchStart = event.type == 'touchstart';\r\n var isTouchPointer = event.pointerType == 'touch';\r\n var isFocusNode = focusNodes[ event.target.nodeName ];\r\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\n// ----- move ----- //\r\n\r\nproto.hasDragStarted = function( moveVector ) {\r\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\r\n};\r\n\r\n// ----- up ----- //\r\n\r\nproto.pointerUp = function( event, pointer ) {\r\n delete this.isTouchScrolling;\r\n this.viewport.classList.remove('is-pointer-down');\r\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\r\n this._dragPointerUp( event, pointer );\r\n};\r\n\r\nproto.pointerDone = function() {\r\n window.removeEventListener( 'scroll', this );\r\n delete this.pointerDownScroll;\r\n};\r\n\r\n// -------------------------- dragging -------------------------- //\r\n\r\nproto.dragStart = function( event, pointer ) {\r\n if ( !this.isDraggable ) {\r\n return;\r\n }\r\n this.dragStartPosition = this.x;\r\n this.startAnimation();\r\n window.removeEventListener( 'scroll', this );\r\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\r\n};\r\n\r\nproto.pointerMove = function( event, pointer ) {\r\n var moveVector = this._dragPointerMove( event, pointer );\r\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\r\n this._dragMove( event, pointer, moveVector );\r\n};\r\n\r\nproto.dragMove = function( event, pointer, moveVector ) {\r\n if ( !this.isDraggable ) {\r\n return;\r\n }\r\n event.preventDefault();\r\n\r\n this.previousDragX = this.dragX;\r\n // reverse if right-to-left\r\n var direction = this.options.rightToLeft ? -1 : 1;\r\n if ( this.options.wrapAround ) {\r\n // wrap around move. #589\r\n moveVector.x = moveVector.x % this.slideableWidth;\r\n }\r\n var dragX = this.dragStartPosition + moveVector.x * direction;\r\n\r\n if ( !this.options.wrapAround && this.slides.length ) {\r\n // slow drag\r\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\r\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\r\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\r\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\r\n }\r\n\r\n this.dragX = dragX;\r\n\r\n this.dragMoveTime = new Date();\r\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\r\n};\r\n\r\nproto.dragEnd = function( event, pointer ) {\r\n if ( !this.isDraggable ) {\r\n return;\r\n }\r\n if ( this.options.freeScroll ) {\r\n this.isFreeScrolling = true;\r\n }\r\n // set selectedIndex based on where flick will end up\r\n var index = this.dragEndRestingSelect();\r\n\r\n if ( this.options.freeScroll && !this.options.wrapAround ) {\r\n // if free-scroll & not wrap around\r\n // do not free-scroll if going outside of bounding slides\r\n // so bounding slides can attract slider, and keep it in bounds\r\n var restingX = this.getRestingPosition();\r\n this.isFreeScrolling = -restingX > this.slides[0].target &&\r\n -restingX < this.getLastSlide().target;\r\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\r\n // boost selection if selected index has not changed\r\n index += this.dragEndBoostSelect();\r\n }\r\n delete this.previousDragX;\r\n // apply selection\r\n // TODO refactor this, selecting here feels weird\r\n // HACK, set flag so dragging stays in correct direction\r\n this.isDragSelect = this.options.wrapAround;\r\n this.select( index );\r\n delete this.isDragSelect;\r\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\r\n};\r\n\r\nproto.dragEndRestingSelect = function() {\r\n var restingX = this.getRestingPosition();\r\n // how far away from selected slide\r\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\r\n // get closet resting going up and going down\r\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\r\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\r\n // use closer resting for wrap-around\r\n var index = positiveResting.distance < negativeResting.distance ?\r\n positiveResting.index : negativeResting.index;\r\n return index;\r\n};\r\n\r\n/**\r\n * given resting X and distance to selected cell\r\n * get the distance and index of the closest cell\r\n * @param {Number} restingX - estimated post-flick resting position\r\n * @param {Number} distance - distance to selected cell\r\n * @param {Integer} increment - +1 or -1, going up or down\r\n * @returns {Object} - { distance: {Number}, index: {Integer} }\r\n */\r\nproto._getClosestResting = function( restingX, distance, increment ) {\r\n var index = this.selectedIndex;\r\n var minDistance = Infinity;\r\n var condition = this.options.contain && !this.options.wrapAround ?\r\n // if contain, keep going if distance is equal to minDistance\r\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\r\n while ( condition( distance, minDistance ) ) {\r\n // measure distance to next cell\r\n index += increment;\r\n minDistance = distance;\r\n distance = this.getSlideDistance( -restingX, index );\r\n if ( distance === null ) {\r\n break;\r\n }\r\n distance = Math.abs( distance );\r\n }\r\n return {\r\n distance: minDistance,\r\n // selected was previous index\r\n index: index - increment\r\n };\r\n};\r\n\r\n/**\r\n * measure distance between x and a slide target\r\n * @param {Number} x\r\n * @param {Integer} index - slide index\r\n */\r\nproto.getSlideDistance = function( x, index ) {\r\n var len = this.slides.length;\r\n // wrap around if at least 2 slides\r\n var isWrapAround = this.options.wrapAround && len > 1;\r\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\r\n var slide = this.slides[ slideIndex ];\r\n if ( !slide ) {\r\n return null;\r\n }\r\n // add distance for wrap-around slides\r\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\r\n return x - ( slide.target + wrap );\r\n};\r\n\r\nproto.dragEndBoostSelect = function() {\r\n // do not boost if no previousDragX or dragMoveTime\r\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\r\n // or if drag was held for 100 ms\r\n new Date() - this.dragMoveTime > 100 ) {\r\n return 0;\r\n }\r\n\r\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\r\n var delta = this.previousDragX - this.dragX;\r\n if ( distance > 0 && delta > 0 ) {\r\n // boost to next if moving towards the right, and positive velocity\r\n return 1;\r\n } else if ( distance < 0 && delta < 0 ) {\r\n // boost to previous if moving towards the left, and negative velocity\r\n return -1;\r\n }\r\n return 0;\r\n};\r\n\r\n// ----- staticClick ----- //\r\n\r\nproto.staticClick = function( event, pointer ) {\r\n // get clickedCell, if cell was clicked\r\n var clickedCell = this.getParentCell( event.target );\r\n var cellElem = clickedCell && clickedCell.element;\r\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\r\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\r\n};\r\n\r\n// ----- scroll ----- //\r\n\r\nproto.onscroll = function() {\r\n var scroll = getScrollPosition();\r\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\r\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\r\n // cancel click/tap if scroll is too much\r\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\r\n this._pointerDone();\r\n }\r\n};\r\n\r\n// ----- utils ----- //\r\n\r\nfunction getScrollPosition() {\r\n return {\r\n x: window.pageXOffset,\r\n y: window.pageYOffset\r\n };\r\n}\r\n\r\n// ----- ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// prev/next buttons\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/prev-next-button',[\r\n './flickity',\r\n 'unipointer/unipointer',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, Unipointer, utils ) {\r\n return factory( window, Flickity, Unipointer, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('unipointer'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.Unipointer,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, Unipointer, utils ) {\r\n'use strict';\r\n\r\nvar svgURI = 'http://www.w3.org/2000/svg';\r\n\r\n// -------------------------- PrevNextButton -------------------------- //\r\n\r\nfunction PrevNextButton( direction, parent ) {\r\n this.direction = direction;\r\n this.parent = parent;\r\n this._create();\r\n}\r\n\r\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\r\n\r\nPrevNextButton.prototype._create = function() {\r\n // properties\r\n this.isEnabled = true;\r\n this.isPrevious = this.direction == -1;\r\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\r\n this.isLeft = this.direction == leftDirection;\r\n\r\n var element = this.element = document.createElement('button');\r\n element.className = 'flickity-button flickity-prev-next-button';\r\n element.className += this.isPrevious ? ' previous' : ' next';\r\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\r\n element.setAttribute( 'type', 'button' );\r\n // init as disabled\r\n this.disable();\r\n\r\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\r\n\r\n // create arrow\r\n var svg = this.createSVG();\r\n element.appendChild( svg );\r\n // events\r\n this.parent.on( 'select', this.update.bind( this ) );\r\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\r\n};\r\n\r\nPrevNextButton.prototype.activate = function() {\r\n this.bindStartEvent( this.element );\r\n this.element.addEventListener( 'click', this );\r\n // add to DOM\r\n this.parent.element.appendChild( this.element );\r\n};\r\n\r\nPrevNextButton.prototype.deactivate = function() {\r\n // remove from DOM\r\n this.parent.element.removeChild( this.element );\r\n // click events\r\n this.unbindStartEvent( this.element );\r\n this.element.removeEventListener( 'click', this );\r\n};\r\n\r\nPrevNextButton.prototype.createSVG = function() {\r\n var svg = document.createElementNS( svgURI, 'svg');\r\n svg.setAttribute( 'class', 'flickity-button-icon' );\r\n svg.setAttribute( 'viewBox', '0 0 100 100' );\r\n var path = document.createElementNS( svgURI, 'path');\r\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\r\n path.setAttribute( 'd', pathMovements );\r\n path.setAttribute( 'class', 'arrow' );\r\n // rotate arrow\r\n if ( !this.isLeft ) {\r\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\r\n }\r\n svg.appendChild( path );\r\n return svg;\r\n};\r\n\r\n// get SVG path movmement\r\nfunction getArrowMovements( shape ) {\r\n // use shape as movement if string\r\n if ( typeof shape == 'string' ) {\r\n return shape;\r\n }\r\n // create movement string\r\n return 'M ' + shape.x0 + ',50' +\r\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\r\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\r\n ' L ' + shape.x3 + ',50 ' +\r\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\r\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\r\n ' Z';\r\n}\r\n\r\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\r\n\r\nPrevNextButton.prototype.onclick = function() {\r\n if ( !this.isEnabled ) {\r\n return;\r\n }\r\n this.parent.uiChange();\r\n var method = this.isPrevious ? 'previous' : 'next';\r\n this.parent[ method ]();\r\n};\r\n\r\n// ----- ----- //\r\n\r\nPrevNextButton.prototype.enable = function() {\r\n if ( this.isEnabled ) {\r\n return;\r\n }\r\n this.element.disabled = false;\r\n this.isEnabled = true;\r\n};\r\n\r\nPrevNextButton.prototype.disable = function() {\r\n if ( !this.isEnabled ) {\r\n return;\r\n }\r\n this.element.disabled = true;\r\n this.isEnabled = false;\r\n};\r\n\r\nPrevNextButton.prototype.update = function() {\r\n // index of first or last slide, if previous or next\r\n var slides = this.parent.slides;\r\n // enable is wrapAround and at least 2 slides\r\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\r\n this.enable();\r\n return;\r\n }\r\n var lastIndex = slides.length ? slides.length - 1 : 0;\r\n var boundIndex = this.isPrevious ? 0 : lastIndex;\r\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\r\n this[ method ]();\r\n};\r\n\r\nPrevNextButton.prototype.destroy = function() {\r\n this.deactivate();\r\n this.allOff();\r\n};\r\n\r\n// -------------------------- Flickity prototype -------------------------- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n prevNextButtons: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60, y1: 50,\r\n x2: 70, y2: 40,\r\n x3: 30\r\n }\r\n});\r\n\r\nFlickity.createMethods.push('_createPrevNextButtons');\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createPrevNextButtons = function() {\r\n if ( !this.options.prevNextButtons ) {\r\n return;\r\n }\r\n\r\n this.prevButton = new PrevNextButton( -1, this );\r\n this.nextButton = new PrevNextButton( 1, this );\r\n\r\n this.on( 'activate', this.activatePrevNextButtons );\r\n};\r\n\r\nproto.activatePrevNextButtons = function() {\r\n this.prevButton.activate();\r\n this.nextButton.activate();\r\n this.on( 'deactivate', this.deactivatePrevNextButtons );\r\n};\r\n\r\nproto.deactivatePrevNextButtons = function() {\r\n this.prevButton.deactivate();\r\n this.nextButton.deactivate();\r\n this.off( 'deactivate', this.deactivatePrevNextButtons );\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nFlickity.PrevNextButton = PrevNextButton;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// page dots\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/page-dots',[\r\n './flickity',\r\n 'unipointer/unipointer',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, Unipointer, utils ) {\r\n return factory( window, Flickity, Unipointer, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('unipointer'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.Unipointer,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, Unipointer, utils ) {\r\n\r\n// -------------------------- PageDots -------------------------- //\r\n\r\n\r\n\r\nfunction PageDots( parent ) {\r\n this.parent = parent;\r\n this._create();\r\n}\r\n\r\nPageDots.prototype = Object.create( Unipointer.prototype );\r\n\r\nPageDots.prototype._create = function() {\r\n // create holder element\r\n this.holder = document.createElement('ol');\r\n this.holder.className = 'flickity-page-dots';\r\n // create dots, array of elements\r\n this.dots = [];\r\n // events\r\n this.handleClick = this.onClick.bind( this );\r\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\r\n};\r\n\r\nPageDots.prototype.activate = function() {\r\n this.setDots();\r\n this.holder.addEventListener( 'click', this.handleClick );\r\n this.bindStartEvent( this.holder );\r\n // add to DOM\r\n this.parent.element.appendChild( this.holder );\r\n};\r\n\r\nPageDots.prototype.deactivate = function() {\r\n this.holder.removeEventListener( 'click', this.handleClick );\r\n this.unbindStartEvent( this.holder );\r\n // remove from DOM\r\n this.parent.element.removeChild( this.holder );\r\n};\r\n\r\nPageDots.prototype.setDots = function() {\r\n // get difference between number of slides and number of dots\r\n var delta = this.parent.slides.length - this.dots.length;\r\n if ( delta > 0 ) {\r\n this.addDots( delta );\r\n } else if ( delta < 0 ) {\r\n this.removeDots( -delta );\r\n }\r\n};\r\n\r\nPageDots.prototype.addDots = function( count ) {\r\n var fragment = document.createDocumentFragment();\r\n var newDots = [];\r\n var length = this.dots.length;\r\n var max = length + count;\r\n\r\n for ( var i = length; i < max; i++ ) {\r\n var dot = document.createElement('li');\r\n dot.className = 'dot';\r\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\r\n fragment.appendChild( dot );\r\n newDots.push( dot );\r\n }\r\n\r\n this.holder.appendChild( fragment );\r\n this.dots = this.dots.concat( newDots );\r\n};\r\n\r\nPageDots.prototype.removeDots = function( count ) {\r\n // remove from this.dots collection\r\n var removeDots = this.dots.splice( this.dots.length - count, count );\r\n // remove from DOM\r\n removeDots.forEach( function( dot ) {\r\n this.holder.removeChild( dot );\r\n }, this );\r\n};\r\n\r\nPageDots.prototype.updateSelected = function() {\r\n // remove selected class on previous\r\n if ( this.selectedDot ) {\r\n this.selectedDot.className = 'dot';\r\n this.selectedDot.removeAttribute('aria-current');\r\n }\r\n // don't proceed if no dots\r\n if ( !this.dots.length ) {\r\n return;\r\n }\r\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\r\n this.selectedDot.className = 'dot is-selected';\r\n this.selectedDot.setAttribute( 'aria-current', 'step' );\r\n};\r\n\r\nPageDots.prototype.onTap = // old method name, backwards-compatible\r\nPageDots.prototype.onClick = function( event ) {\r\n var target = event.target;\r\n // only care about dot clicks\r\n if ( target.nodeName != 'LI' ) {\r\n return;\r\n }\r\n\r\n this.parent.uiChange();\r\n var index = this.dots.indexOf( target );\r\n this.parent.select( index );\r\n};\r\n\r\nPageDots.prototype.destroy = function() {\r\n this.deactivate();\r\n this.allOff();\r\n};\r\n\r\nFlickity.PageDots = PageDots;\r\n\r\n// -------------------------- Flickity -------------------------- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n pageDots: true\r\n});\r\n\r\nFlickity.createMethods.push('_createPageDots');\r\n\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createPageDots = function() {\r\n if ( !this.options.pageDots ) {\r\n return;\r\n }\r\n this.pageDots = new PageDots( this );\r\n // events\r\n this.on( 'activate', this.activatePageDots );\r\n this.on( 'select', this.updateSelectedPageDots );\r\n this.on( 'cellChange', this.updatePageDots );\r\n this.on( 'resize', this.updatePageDots );\r\n this.on( 'deactivate', this.deactivatePageDots );\r\n};\r\n\r\nproto.activatePageDots = function() {\r\n this.pageDots.activate();\r\n};\r\n\r\nproto.updateSelectedPageDots = function() {\r\n this.pageDots.updateSelected();\r\n};\r\n\r\nproto.updatePageDots = function() {\r\n this.pageDots.setDots();\r\n};\r\n\r\nproto.deactivatePageDots = function() {\r\n this.pageDots.deactivate();\r\n};\r\n\r\n// ----- ----- //\r\n\r\nFlickity.PageDots = PageDots;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// player & autoPlay\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/player',[\r\n 'ev-emitter/ev-emitter',\r\n 'fizzy-ui-utils/utils',\r\n './flickity'\r\n ], function( EvEmitter, utils, Flickity ) {\r\n return factory( EvEmitter, utils, Flickity );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('ev-emitter'),\r\n require('fizzy-ui-utils'),\r\n require('./flickity')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window.EvEmitter,\r\n window.fizzyUIUtils,\r\n window.Flickity\r\n );\r\n }\r\n\r\n}( window, function factory( EvEmitter, utils, Flickity ) {\r\n\r\n\r\n\r\n// -------------------------- Player -------------------------- //\r\n\r\nfunction Player( parent ) {\r\n this.parent = parent;\r\n this.state = 'stopped';\r\n // visibility change event handler\r\n this.onVisibilityChange = this.visibilityChange.bind( this );\r\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\r\n}\r\n\r\nPlayer.prototype = Object.create( EvEmitter.prototype );\r\n\r\n// start play\r\nPlayer.prototype.play = function() {\r\n if ( this.state == 'playing' ) {\r\n return;\r\n }\r\n // do not play if page is hidden, start playing when page is visible\r\n var isPageHidden = document.hidden;\r\n if ( isPageHidden ) {\r\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\r\n return;\r\n }\r\n\r\n this.state = 'playing';\r\n // listen to visibility change\r\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\r\n // start ticking\r\n this.tick();\r\n};\r\n\r\nPlayer.prototype.tick = function() {\r\n // do not tick if not playing\r\n if ( this.state != 'playing' ) {\r\n return;\r\n }\r\n\r\n var time = this.parent.options.autoPlay;\r\n // default to 3 seconds\r\n time = typeof time == 'number' ? time : 3000;\r\n var _this = this;\r\n // HACK: reset ticks if stopped and started within interval\r\n this.clear();\r\n this.timeout = setTimeout( function() {\r\n _this.parent.next( true );\r\n _this.tick();\r\n }, time );\r\n};\r\n\r\nPlayer.prototype.stop = function() {\r\n this.state = 'stopped';\r\n this.clear();\r\n // remove visibility change event\r\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\r\n};\r\n\r\nPlayer.prototype.clear = function() {\r\n clearTimeout( this.timeout );\r\n};\r\n\r\nPlayer.prototype.pause = function() {\r\n if ( this.state == 'playing' ) {\r\n this.state = 'paused';\r\n this.clear();\r\n }\r\n};\r\n\r\nPlayer.prototype.unpause = function() {\r\n // re-start play if paused\r\n if ( this.state == 'paused' ) {\r\n this.play();\r\n }\r\n};\r\n\r\n// pause if page visibility is hidden, unpause if visible\r\nPlayer.prototype.visibilityChange = function() {\r\n var isPageHidden = document.hidden;\r\n this[ isPageHidden ? 'pause' : 'unpause' ]();\r\n};\r\n\r\nPlayer.prototype.visibilityPlay = function() {\r\n this.play();\r\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\r\n};\r\n\r\n// -------------------------- Flickity -------------------------- //\r\n\r\nutils.extend( Flickity.defaults, {\r\n pauseAutoPlayOnHover: true\r\n});\r\n\r\nFlickity.createMethods.push('_createPlayer');\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createPlayer = function() {\r\n this.player = new Player( this );\r\n\r\n this.on( 'activate', this.activatePlayer );\r\n this.on( 'uiChange', this.stopPlayer );\r\n this.on( 'pointerDown', this.stopPlayer );\r\n this.on( 'deactivate', this.deactivatePlayer );\r\n};\r\n\r\nproto.activatePlayer = function() {\r\n if ( !this.options.autoPlay ) {\r\n return;\r\n }\r\n this.player.play();\r\n this.element.addEventListener( 'mouseenter', this );\r\n};\r\n\r\n// Player API, don't hate the ... thanks I know where the door is\r\n\r\nproto.playPlayer = function() {\r\n this.player.play();\r\n};\r\n\r\nproto.stopPlayer = function() {\r\n this.player.stop();\r\n};\r\n\r\nproto.pausePlayer = function() {\r\n this.player.pause();\r\n};\r\n\r\nproto.unpausePlayer = function() {\r\n this.player.unpause();\r\n};\r\n\r\nproto.deactivatePlayer = function() {\r\n this.player.stop();\r\n this.element.removeEventListener( 'mouseenter', this );\r\n};\r\n\r\n// ----- mouseenter/leave ----- //\r\n\r\n// pause auto-play on hover\r\nproto.onmouseenter = function() {\r\n if ( !this.options.pauseAutoPlayOnHover ) {\r\n return;\r\n }\r\n this.player.pause();\r\n this.element.addEventListener( 'mouseleave', this );\r\n};\r\n\r\n// resume auto-play on hover off\r\nproto.onmouseleave = function() {\r\n this.player.unpause();\r\n this.element.removeEventListener( 'mouseleave', this );\r\n};\r\n\r\n// ----- ----- //\r\n\r\nFlickity.Player = Player;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// add, remove cell\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/add-remove-cell',[\r\n './flickity',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, utils ) {\r\n return factory( window, Flickity, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, utils ) {\r\n\r\n\r\n\r\n// append cells to a document fragment\r\nfunction getCellsFragment( cells ) {\r\n var fragment = document.createDocumentFragment();\r\n cells.forEach( function( cell ) {\r\n fragment.appendChild( cell.element );\r\n });\r\n return fragment;\r\n}\r\n\r\n// -------------------------- add/remove cell prototype -------------------------- //\r\n\r\nvar proto = Flickity.prototype;\r\n\r\n/**\r\n * Insert, prepend, or append cells\r\n * @param {Element, Array, NodeList} elems\r\n * @param {Integer} index\r\n */\r\nproto.insert = function( elems, index ) {\r\n var cells = this._makeCells( elems );\r\n if ( !cells || !cells.length ) {\r\n return;\r\n }\r\n var len = this.cells.length;\r\n // default to append\r\n index = index === undefined ? len : index;\r\n // add cells with document fragment\r\n var fragment = getCellsFragment( cells );\r\n // append to slider\r\n var isAppend = index == len;\r\n if ( isAppend ) {\r\n this.slider.appendChild( fragment );\r\n } else {\r\n var insertCellElement = this.cells[ index ].element;\r\n this.slider.insertBefore( fragment, insertCellElement );\r\n }\r\n // add to this.cells\r\n if ( index === 0 ) {\r\n // prepend, add to start\r\n this.cells = cells.concat( this.cells );\r\n } else if ( isAppend ) {\r\n // append, add to end\r\n this.cells = this.cells.concat( cells );\r\n } else {\r\n // insert in this.cells\r\n var endCells = this.cells.splice( index, len - index );\r\n this.cells = this.cells.concat( cells ).concat( endCells );\r\n }\r\n\r\n this._sizeCells( cells );\r\n this.cellChange( index, true );\r\n};\r\n\r\nproto.append = function( elems ) {\r\n this.insert( elems, this.cells.length );\r\n};\r\n\r\nproto.prepend = function( elems ) {\r\n this.insert( elems, 0 );\r\n};\r\n\r\n/**\r\n * Remove cells\r\n * @param {Element, Array, NodeList} elems\r\n */\r\nproto.remove = function( elems ) {\r\n var cells = this.getCells( elems );\r\n if ( !cells || !cells.length ) {\r\n return;\r\n }\r\n\r\n var minCellIndex = this.cells.length - 1;\r\n // remove cells from collection & DOM\r\n cells.forEach( function( cell ) {\r\n cell.remove();\r\n var index = this.cells.indexOf( cell );\r\n minCellIndex = Math.min( index, minCellIndex );\r\n utils.removeFrom( this.cells, cell );\r\n }, this );\r\n\r\n this.cellChange( minCellIndex, true );\r\n};\r\n\r\n/**\r\n * logic to be run after a cell's size changes\r\n * @param {Element} elem - cell's element\r\n */\r\nproto.cellSizeChange = function( elem ) {\r\n var cell = this.getCell( elem );\r\n if ( !cell ) {\r\n return;\r\n }\r\n cell.getSize();\r\n\r\n var index = this.cells.indexOf( cell );\r\n this.cellChange( index );\r\n};\r\n\r\n/**\r\n * logic any time a cell is changed: added, removed, or size changed\r\n * @param {Integer} changedCellIndex - index of the changed cell, optional\r\n */\r\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\r\n var prevSelectedElem = this.selectedElement;\r\n this._positionCells( changedCellIndex );\r\n this._getWrapShiftCells();\r\n this.setGallerySize();\r\n // update selectedIndex\r\n // try to maintain position & select previous selected element\r\n var cell = this.getCell( prevSelectedElem );\r\n if ( cell ) {\r\n this.selectedIndex = this.getCellSlideIndex( cell );\r\n }\r\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\r\n\r\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\r\n // position slider\r\n this.select( this.selectedIndex );\r\n // do not position slider after lazy load\r\n if ( isPositioningSlider ) {\r\n this.positionSliderAtSelected();\r\n }\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n// lazyload\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/lazyload',[\r\n './flickity',\r\n 'fizzy-ui-utils/utils'\r\n ], function( Flickity, utils ) {\r\n return factory( window, Flickity, utils );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('./flickity'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window,\r\n window.Flickity,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, utils ) {\r\n'use strict';\r\n\r\nFlickity.createMethods.push('_createLazyload');\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createLazyload = function() {\r\n this.on( 'select', this.lazyLoad );\r\n};\r\n\r\nproto.lazyLoad = function() {\r\n var lazyLoad = this.options.lazyLoad;\r\n if ( !lazyLoad ) {\r\n return;\r\n }\r\n // get adjacent cells, use lazyLoad option for adjacent count\r\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\r\n var cellElems = this.getAdjacentCellElements( adjCount );\r\n // get lazy images in those cells\r\n var lazyImages = [];\r\n cellElems.forEach( function( cellElem ) {\r\n var lazyCellImages = getCellLazyImages( cellElem );\r\n lazyImages = lazyImages.concat( lazyCellImages );\r\n });\r\n // load lazy images\r\n lazyImages.forEach( function( img ) {\r\n new LazyLoader( img, this );\r\n }, this );\r\n};\r\n\r\nfunction getCellLazyImages( cellElem ) {\r\n // check if cell element is lazy image\r\n if ( cellElem.nodeName == 'IMG' ) {\r\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\r\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\r\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\r\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\r\n return [ cellElem ];\r\n }\r\n }\r\n // select lazy images in cell\r\n var lazySelector = 'img[data-flickity-lazyload], ' +\r\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\r\n var imgs = cellElem.querySelectorAll( lazySelector );\r\n return utils.makeArray( imgs );\r\n}\r\n\r\n// -------------------------- LazyLoader -------------------------- //\r\n\r\n/**\r\n * class to handle loading images\r\n */\r\nfunction LazyLoader( img, flickity ) {\r\n this.img = img;\r\n this.flickity = flickity;\r\n this.load();\r\n}\r\n\r\nLazyLoader.prototype.handleEvent = utils.handleEvent;\r\n\r\nLazyLoader.prototype.load = function() {\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n // get src & srcset\r\n var src = this.img.getAttribute('data-flickity-lazyload') ||\r\n this.img.getAttribute('data-flickity-lazyload-src');\r\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\r\n // set src & serset\r\n this.img.src = src;\r\n if ( srcset ) {\r\n this.img.setAttribute( 'srcset', srcset );\r\n }\r\n // remove attr\r\n this.img.removeAttribute('data-flickity-lazyload');\r\n this.img.removeAttribute('data-flickity-lazyload-src');\r\n this.img.removeAttribute('data-flickity-lazyload-srcset');\r\n};\r\n\r\nLazyLoader.prototype.onload = function( event ) {\r\n this.complete( event, 'flickity-lazyloaded' );\r\n};\r\n\r\nLazyLoader.prototype.onerror = function( event ) {\r\n this.complete( event, 'flickity-lazyerror' );\r\n};\r\n\r\nLazyLoader.prototype.complete = function( event, className ) {\r\n // unbind events\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n\r\n var cell = this.flickity.getParentCell( this.img );\r\n var cellElem = cell && cell.element;\r\n this.flickity.cellSizeChange( cellElem );\r\n\r\n this.img.classList.add( className );\r\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\r\n};\r\n\r\n// ----- ----- //\r\n\r\nFlickity.LazyLoader = LazyLoader;\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n/*!\r\n * Flickity v2.2.0\r\n * Touch, responsive, flickable carousels\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Flickity Commercial License for commercial use\r\n *\r\n * https://flickity.metafizzy.co\r\n * Copyright 2015-2018 Metafizzy\r\n */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity/js/index',[\r\n './flickity',\r\n './drag',\r\n './prev-next-button',\r\n './page-dots',\r\n './player',\r\n './add-remove-cell',\r\n './lazyload'\r\n ], factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('./flickity'),\r\n require('./drag'),\r\n require('./prev-next-button'),\r\n require('./page-dots'),\r\n require('./player'),\r\n require('./add-remove-cell'),\r\n require('./lazyload')\r\n );\r\n }\r\n\r\n})( window, function factory( Flickity ) {\r\n /*jshint strict: false*/\r\n return Flickity;\r\n});\r\n\r\n/*!\r\n * Flickity asNavFor v2.0.1\r\n * enable asNavFor for Flickity\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true*/\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'flickity-as-nav-for/as-nav-for',[\r\n 'flickity/js/index',\r\n 'fizzy-ui-utils/utils'\r\n ], factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('flickity'),\r\n require('fizzy-ui-utils')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = factory(\r\n window.Flickity,\r\n window.fizzyUIUtils\r\n );\r\n }\r\n\r\n}( window, function factory( Flickity, utils ) {\r\n\r\n\r\n\r\n// -------------------------- asNavFor prototype -------------------------- //\r\n\r\n// Flickity.defaults.asNavFor = null;\r\n\r\nFlickity.createMethods.push('_createAsNavFor');\r\n\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createAsNavFor = function() {\r\n this.on( 'activate', this.activateAsNavFor );\r\n this.on( 'deactivate', this.deactivateAsNavFor );\r\n this.on( 'destroy', this.destroyAsNavFor );\r\n\r\n var asNavForOption = this.options.asNavFor;\r\n if ( !asNavForOption ) {\r\n return;\r\n }\r\n // HACK do async, give time for other flickity to be initalized\r\n var _this = this;\r\n setTimeout( function initNavCompanion() {\r\n _this.setNavCompanion( asNavForOption );\r\n });\r\n};\r\n\r\nproto.setNavCompanion = function( elem ) {\r\n elem = utils.getQueryElement( elem );\r\n var companion = Flickity.data( elem );\r\n // stop if no companion or companion is self\r\n if ( !companion || companion == this ) {\r\n return;\r\n }\r\n\r\n this.navCompanion = companion;\r\n // companion select\r\n var _this = this;\r\n this.onNavCompanionSelect = function() {\r\n _this.navCompanionSelect();\r\n };\r\n companion.on( 'select', this.onNavCompanionSelect );\r\n // click\r\n this.on( 'staticClick', this.onNavStaticClick );\r\n\r\n this.navCompanionSelect( true );\r\n};\r\n\r\nproto.navCompanionSelect = function( isInstant ) {\r\n if ( !this.navCompanion ) {\r\n return;\r\n }\r\n // select slide that matches first cell of slide\r\n var selectedCell = this.navCompanion.selectedCells[0];\r\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\r\n var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\r\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\r\n this.navCompanion.cellAlign ) );\r\n this.selectCell( selectIndex, false, isInstant );\r\n // set nav selected class\r\n this.removeNavSelectedElements();\r\n // stop if companion has more cells than this one\r\n if ( selectIndex >= this.cells.length ) {\r\n return;\r\n }\r\n\r\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\r\n this.navSelectedElements = selectedCells.map( function( cell ) {\r\n return cell.element;\r\n });\r\n this.changeNavSelectedClass('add');\r\n};\r\n\r\nfunction lerp( a, b, t ) {\r\n return ( b - a ) * t + a;\r\n}\r\n\r\nproto.changeNavSelectedClass = function( method ) {\r\n this.navSelectedElements.forEach( function( navElem ) {\r\n navElem.classList[ method ]('is-nav-selected');\r\n });\r\n};\r\n\r\nproto.activateAsNavFor = function() {\r\n this.navCompanionSelect( true );\r\n};\r\n\r\nproto.removeNavSelectedElements = function() {\r\n if ( !this.navSelectedElements ) {\r\n return;\r\n }\r\n this.changeNavSelectedClass('remove');\r\n delete this.navSelectedElements;\r\n};\r\n\r\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\r\n if ( typeof cellIndex == 'number' ) {\r\n this.navCompanion.selectCell( cellIndex );\r\n }\r\n};\r\n\r\nproto.deactivateAsNavFor = function() {\r\n this.removeNavSelectedElements();\r\n};\r\n\r\nproto.destroyAsNavFor = function() {\r\n if ( !this.navCompanion ) {\r\n return;\r\n }\r\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\r\n this.off( 'staticClick', this.onNavStaticClick );\r\n delete this.navCompanion;\r\n};\r\n\r\n// ----- ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n/*!\r\n * imagesLoaded v4.1.4\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n\r\n( function( window, factory ) { 'use strict';\r\n // universal module definition\r\n\r\n /*global define: false, module: false, require: false */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( 'imagesloaded/imagesloaded',[\r\n 'ev-emitter/ev-emitter'\r\n ], function( EvEmitter ) {\r\n return factory( window, EvEmitter );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter')\r\n );\r\n } else {\r\n // browser global\r\n window.imagesLoaded = factory(\r\n window,\r\n window.EvEmitter\r\n );\r\n }\r\n\r\n})( typeof window !== 'undefined' ? window : this,\r\n\r\n// -------------------------- factory -------------------------- //\r\n\r\nfunction factory( window, EvEmitter ) {\r\n\r\n\r\n\r\nvar $ = window.jQuery;\r\nvar console = window.console;\r\n\r\n// -------------------------- helpers -------------------------- //\r\n\r\n// extend objects\r\nfunction extend( a, b ) {\r\n for ( var prop in b ) {\r\n a[ prop ] = b[ prop ];\r\n }\r\n return a;\r\n}\r\n\r\nvar arraySlice = Array.prototype.slice;\r\n\r\n// turn element or nodeList into an array\r\nfunction makeArray( obj ) {\r\n if ( Array.isArray( obj ) ) {\r\n // use object if already an array\r\n return obj;\r\n }\r\n\r\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\r\n if ( isArrayLike ) {\r\n // convert nodeList to array\r\n return arraySlice.call( obj );\r\n }\r\n\r\n // array of single index\r\n return [ obj ];\r\n}\r\n\r\n// -------------------------- imagesLoaded -------------------------- //\r\n\r\n/**\r\n * @param {Array, Element, NodeList, String} elem\r\n * @param {Object or Function} options - if function, use as callback\r\n * @param {Function} onAlways - callback function\r\n */\r\nfunction ImagesLoaded( elem, options, onAlways ) {\r\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\r\n if ( !( this instanceof ImagesLoaded ) ) {\r\n return new ImagesLoaded( elem, options, onAlways );\r\n }\r\n // use elem as selector string\r\n var queryElem = elem;\r\n if ( typeof elem == 'string' ) {\r\n queryElem = document.querySelectorAll( elem );\r\n }\r\n // bail if bad element\r\n if ( !queryElem ) {\r\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\r\n return;\r\n }\r\n\r\n this.elements = makeArray( queryElem );\r\n this.options = extend( {}, this.options );\r\n // shift arguments if no options set\r\n if ( typeof options == 'function' ) {\r\n onAlways = options;\r\n } else {\r\n extend( this.options, options );\r\n }\r\n\r\n if ( onAlways ) {\r\n this.on( 'always', onAlways );\r\n }\r\n\r\n this.getImages();\r\n\r\n if ( $ ) {\r\n // add jQuery Deferred object\r\n this.jqDeferred = new $.Deferred();\r\n }\r\n\r\n // HACK check async to allow time to bind listeners\r\n setTimeout( this.check.bind( this ) );\r\n}\r\n\r\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\r\n\r\nImagesLoaded.prototype.options = {};\r\n\r\nImagesLoaded.prototype.getImages = function() {\r\n this.images = [];\r\n\r\n // filter & find items if we have an item selector\r\n this.elements.forEach( this.addElementImages, this );\r\n};\r\n\r\n/**\r\n * @param {Node} element\r\n */\r\nImagesLoaded.prototype.addElementImages = function( elem ) {\r\n // filter siblings\r\n if ( elem.nodeName == 'IMG' ) {\r\n this.addImage( elem );\r\n }\r\n // get background image on element\r\n if ( this.options.background === true ) {\r\n this.addElementBackgroundImages( elem );\r\n }\r\n\r\n // find children\r\n // no non-element nodes, #143\r\n var nodeType = elem.nodeType;\r\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\r\n return;\r\n }\r\n var childImgs = elem.querySelectorAll('img');\r\n // concat childElems to filterFound array\r\n for ( var i=0; i < childImgs.length; i++ ) {\r\n var img = childImgs[i];\r\n this.addImage( img );\r\n }\r\n\r\n // get child background images\r\n if ( typeof this.options.background == 'string' ) {\r\n var children = elem.querySelectorAll( this.options.background );\r\n for ( i=0; i < children.length; i++ ) {\r\n var child = children[i];\r\n this.addElementBackgroundImages( child );\r\n }\r\n }\r\n};\r\n\r\nvar elementNodeTypes = {\r\n 1: true,\r\n 9: true,\r\n 11: true\r\n};\r\n\r\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\r\n var style = getComputedStyle( elem );\r\n if ( !style ) {\r\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\r\n return;\r\n }\r\n // get url inside url(\"...\")\r\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\r\n var matches = reURL.exec( style.backgroundImage );\r\n while ( matches !== null ) {\r\n var url = matches && matches[2];\r\n if ( url ) {\r\n this.addBackground( url, elem );\r\n }\r\n matches = reURL.exec( style.backgroundImage );\r\n }\r\n};\r\n\r\n/**\r\n * @param {Image} img\r\n */\r\nImagesLoaded.prototype.addImage = function( img ) {\r\n var loadingImage = new LoadingImage( img );\r\n this.images.push( loadingImage );\r\n};\r\n\r\nImagesLoaded.prototype.addBackground = function( url, elem ) {\r\n var background = new Background( url, elem );\r\n this.images.push( background );\r\n};\r\n\r\nImagesLoaded.prototype.check = function() {\r\n var _this = this;\r\n this.progressedCount = 0;\r\n this.hasAnyBroken = false;\r\n // complete if no images\r\n if ( !this.images.length ) {\r\n this.complete();\r\n return;\r\n }\r\n\r\n function onProgress( image, elem, message ) {\r\n // HACK - Chrome triggers event before object properties have changed. #83\r\n setTimeout( function() {\r\n _this.progress( image, elem, message );\r\n });\r\n }\r\n\r\n this.images.forEach( function( loadingImage ) {\r\n loadingImage.once( 'progress', onProgress );\r\n loadingImage.check();\r\n });\r\n};\r\n\r\nImagesLoaded.prototype.progress = function( image, elem, message ) {\r\n this.progressedCount++;\r\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\r\n // progress event\r\n this.emitEvent( 'progress', [ this, image, elem ] );\r\n if ( this.jqDeferred && this.jqDeferred.notify ) {\r\n this.jqDeferred.notify( this, image );\r\n }\r\n // check if completed\r\n if ( this.progressedCount == this.images.length ) {\r\n this.complete();\r\n }\r\n\r\n if ( this.options.debug && console ) {\r\n console.log( 'progress: ' + message, image, elem );\r\n }\r\n};\r\n\r\nImagesLoaded.prototype.complete = function() {\r\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\r\n this.isComplete = true;\r\n this.emitEvent( eventName, [ this ] );\r\n this.emitEvent( 'always', [ this ] );\r\n if ( this.jqDeferred ) {\r\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\r\n this.jqDeferred[ jqMethod ]( this );\r\n }\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nfunction LoadingImage( img ) {\r\n this.img = img;\r\n}\r\n\r\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\r\n\r\nLoadingImage.prototype.check = function() {\r\n // If complete is true and browser supports natural sizes,\r\n // try to check for image status manually.\r\n var isComplete = this.getIsImageComplete();\r\n if ( isComplete ) {\r\n // report based on naturalWidth\r\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\r\n return;\r\n }\r\n\r\n // If none of the checks above matched, simulate loading on detached element.\r\n this.proxyImage = new Image();\r\n this.proxyImage.addEventListener( 'load', this );\r\n this.proxyImage.addEventListener( 'error', this );\r\n // bind to image as well for Firefox. #191\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n this.proxyImage.src = this.img.src;\r\n};\r\n\r\nLoadingImage.prototype.getIsImageComplete = function() {\r\n // check for non-zero, non-undefined naturalWidth\r\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\r\n return this.img.complete && this.img.naturalWidth;\r\n};\r\n\r\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\r\n this.isLoaded = isLoaded;\r\n this.emitEvent( 'progress', [ this, this.img, message ] );\r\n};\r\n\r\n// ----- events ----- //\r\n\r\n// trigger specified handler for event type\r\nLoadingImage.prototype.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\nLoadingImage.prototype.onload = function() {\r\n this.confirm( true, 'onload' );\r\n this.unbindEvents();\r\n};\r\n\r\nLoadingImage.prototype.onerror = function() {\r\n this.confirm( false, 'onerror' );\r\n this.unbindEvents();\r\n};\r\n\r\nLoadingImage.prototype.unbindEvents = function() {\r\n this.proxyImage.removeEventListener( 'load', this );\r\n this.proxyImage.removeEventListener( 'error', this );\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n};\r\n\r\n// -------------------------- Background -------------------------- //\r\n\r\nfunction Background( url, element ) {\r\n this.url = url;\r\n this.element = element;\r\n this.img = new Image();\r\n}\r\n\r\n// inherit LoadingImage prototype\r\nBackground.prototype = Object.create( LoadingImage.prototype );\r\n\r\nBackground.prototype.check = function() {\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n this.img.src = this.url;\r\n // check if image is already complete\r\n var isComplete = this.getIsImageComplete();\r\n if ( isComplete ) {\r\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\r\n this.unbindEvents();\r\n }\r\n};\r\n\r\nBackground.prototype.unbindEvents = function() {\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n};\r\n\r\nBackground.prototype.confirm = function( isLoaded, message ) {\r\n this.isLoaded = isLoaded;\r\n this.emitEvent( 'progress', [ this, this.element, message ] );\r\n};\r\n\r\n// -------------------------- jQuery -------------------------- //\r\n\r\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\r\n jQuery = jQuery || window.jQuery;\r\n if ( !jQuery ) {\r\n return;\r\n }\r\n // set local variable\r\n $ = jQuery;\r\n // $().imagesLoaded()\r\n $.fn.imagesLoaded = function( options, callback ) {\r\n var instance = new ImagesLoaded( this, options, callback );\r\n return instance.jqDeferred.promise( $(this) );\r\n };\r\n};\r\n// try making plugin\r\nImagesLoaded.makeJQueryPlugin();\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nreturn ImagesLoaded;\r\n\r\n});\r\n\r\n/*!\r\n * Flickity imagesLoaded v2.0.0\r\n * enables imagesLoaded option for Flickity\r\n */\r\n\r\n/*jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( [\r\n 'flickity/js/index',\r\n 'imagesloaded/imagesloaded'\r\n ], function( Flickity, imagesLoaded ) {\r\n return factory( window, Flickity, imagesLoaded );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('flickity'),\r\n require('imagesloaded')\r\n );\r\n } else {\r\n // browser global\r\n window.Flickity = factory(\r\n window,\r\n window.Flickity,\r\n window.imagesLoaded\r\n );\r\n }\r\n\r\n}( window, function factory( window, Flickity, imagesLoaded ) {\r\n'use strict';\r\n\r\nFlickity.createMethods.push('_createImagesLoaded');\r\n\r\nvar proto = Flickity.prototype;\r\n\r\nproto._createImagesLoaded = function() {\r\n this.on( 'activate', this.imagesLoaded );\r\n};\r\n\r\nproto.imagesLoaded = function() {\r\n if ( !this.options.imagesLoaded ) {\r\n return;\r\n }\r\n var _this = this;\r\n function onImagesLoadedProgress( instance, image ) {\r\n var cell = _this.getParentCell( image.img );\r\n _this.cellSizeChange( cell && cell.element );\r\n if ( !_this.options.freeScroll ) {\r\n _this.positionSliderAtSelected();\r\n }\r\n }\r\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\r\n};\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\r\n","/*!\r\n * Isotope PACKAGED v3.0.6\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Isotope Commercial License for commercial use\r\n *\r\n * https://isotope.metafizzy.co\r\n * Copyright 2010-2018 Metafizzy\r\n */\r\n\r\n/**\r\n * Bridget makes jQuery widgets\r\n * v2.0.1\r\n * MIT license\r\n */\r\n\r\n/* jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /*jshint strict: false */ /* globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('jquery-bridget/jquery-bridget', ['jquery'], function (jQuery) {\r\n return factory(window, jQuery);\r\n });\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('jquery')\r\n );\r\n } else {\r\n // browser global\r\n window.jQueryBridget = factory(\r\n window,\r\n window.jQuery\r\n );\r\n }\r\n\r\n}(window, function factory(window, jQuery) {\r\n 'use strict';\r\n\r\n // ----- utils ----- //\r\n\r\n var arraySlice = Array.prototype.slice;\r\n\r\n // helper function for logging errors\r\n // $.error breaks jQuery chaining\r\n var console = window.console;\r\n var logError = typeof console == 'undefined' ? function () { } :\r\n function (message) {\r\n console.error(message);\r\n };\r\n\r\n // ----- jQueryBridget ----- //\r\n\r\n function jQueryBridget(namespace, PluginClass, $) {\r\n $ = $ || jQuery || window.jQuery;\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // add option method -> $().plugin('option', {...})\r\n if (!PluginClass.prototype.option) {\r\n // option setter\r\n PluginClass.prototype.option = function (opts) {\r\n // bail out if not an object\r\n if (!$.isPlainObject(opts)) {\r\n return;\r\n }\r\n this.options = $.extend(true, this.options, opts);\r\n };\r\n }\r\n\r\n // make jQuery plugin\r\n $.fn[namespace] = function (arg0 /*, arg1 */) {\r\n if (typeof arg0 == 'string') {\r\n // method call $().plugin( 'methodName', { options } )\r\n // shift arguments by 1\r\n var args = arraySlice.call(arguments, 1);\r\n return methodCall(this, arg0, args);\r\n }\r\n // just $().plugin({ options })\r\n plainCall(this, arg0);\r\n return this;\r\n };\r\n\r\n // $().plugin('methodName')\r\n function methodCall($elems, methodName, args) {\r\n var returnValue;\r\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\r\n\r\n $elems.each(function (i, elem) {\r\n // get instance\r\n var instance = $.data(elem, namespace);\r\n if (!instance) {\r\n logError(namespace + ' not initialized. Cannot call methods, i.e. ' +\r\n pluginMethodStr);\r\n return;\r\n }\r\n\r\n var method = instance[methodName];\r\n if (!method || methodName.charAt(0) == '_') {\r\n logError(pluginMethodStr + ' is not a valid method');\r\n return;\r\n }\r\n\r\n // apply method, get return value\r\n var value = method.apply(instance, args);\r\n // set return value if value is returned, use only first value\r\n returnValue = returnValue === undefined ? value : returnValue;\r\n });\r\n\r\n return returnValue !== undefined ? returnValue : $elems;\r\n }\r\n\r\n function plainCall($elems, options) {\r\n $elems.each(function (i, elem) {\r\n var instance = $.data(elem, namespace);\r\n if (instance) {\r\n // set options & init\r\n instance.option(options);\r\n instance._init();\r\n } else {\r\n // initialize new instance\r\n instance = new PluginClass(elem, options);\r\n $.data(elem, namespace, instance);\r\n }\r\n });\r\n }\r\n\r\n updateJQuery($);\r\n\r\n }\r\n\r\n // ----- updateJQuery ----- //\r\n\r\n // set $.bridget for v1 backwards compatibility\r\n function updateJQuery($) {\r\n if (!$ || ($ && $.bridget)) {\r\n return;\r\n }\r\n $.bridget = jQueryBridget;\r\n }\r\n\r\n updateJQuery(jQuery || window.jQuery);\r\n\r\n // ----- ----- //\r\n\r\n return jQueryBridget;\r\n\r\n}));\r\n\r\n/**\r\n * EvEmitter v1.1.0\r\n * Lil' event emitter\r\n * MIT License\r\n */\r\n\r\n/* jshint unused: true, undef: true, strict: true */\r\n\r\n(function (global, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /* globals define, module, window */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD - RequireJS\r\n define('ev-emitter/ev-emitter', factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS - Browserify, Webpack\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n global.EvEmitter = factory();\r\n }\r\n\r\n}(typeof window != 'undefined' ? window : this, function () {\r\n\r\n\r\n\r\n function EvEmitter() { }\r\n\r\n var proto = EvEmitter.prototype;\r\n\r\n proto.on = function (eventName, listener) {\r\n if (!eventName || !listener) {\r\n return;\r\n }\r\n // set events hash\r\n var events = this._events = this._events || {};\r\n // set listeners array\r\n var listeners = events[eventName] = events[eventName] || [];\r\n // only add once\r\n if (listeners.indexOf(listener) == -1) {\r\n listeners.push(listener);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n proto.once = function (eventName, listener) {\r\n if (!eventName || !listener) {\r\n return;\r\n }\r\n // add event\r\n this.on(eventName, listener);\r\n // set once flag\r\n // set onceEvents hash\r\n var onceEvents = this._onceEvents = this._onceEvents || {};\r\n // set onceListeners object\r\n var onceListeners = onceEvents[eventName] = onceEvents[eventName] || {};\r\n // set flag\r\n onceListeners[listener] = true;\r\n\r\n return this;\r\n };\r\n\r\n proto.off = function (eventName, listener) {\r\n var listeners = this._events && this._events[eventName];\r\n if (!listeners || !listeners.length) {\r\n return;\r\n }\r\n var index = listeners.indexOf(listener);\r\n if (index != -1) {\r\n listeners.splice(index, 1);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n proto.emitEvent = function (eventName, args) {\r\n var listeners = this._events && this._events[eventName];\r\n if (!listeners || !listeners.length) {\r\n return;\r\n }\r\n // copy over to avoid interference if .off() in listener\r\n listeners = listeners.slice(0);\r\n args = args || [];\r\n // once stuff\r\n var onceListeners = this._onceEvents && this._onceEvents[eventName];\r\n\r\n for (var i = 0; i < listeners.length; i++) {\r\n var listener = listeners[i]\r\n var isOnce = onceListeners && onceListeners[listener];\r\n if (isOnce) {\r\n // remove listener\r\n // remove before trigger to prevent recursion\r\n this.off(eventName, listener);\r\n // unset once flag\r\n delete onceListeners[listener];\r\n }\r\n // trigger listener\r\n listener.apply(this, args);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n proto.allOff = function () {\r\n delete this._events;\r\n delete this._onceEvents;\r\n };\r\n\r\n return EvEmitter;\r\n\r\n}));\r\n\r\n/*!\r\n * getSize v2.0.3\r\n * measure size of elements\r\n * MIT license\r\n */\r\n\r\n/* jshint browser: true, strict: true, undef: true, unused: true */\r\n/* globals console: false */\r\n\r\n(function (window, factory) {\r\n /* jshint strict: false */ /* globals define, module */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('get-size/get-size', factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.getSize = factory();\r\n }\r\n\r\n})(window, function factory() {\r\n 'use strict';\r\n\r\n // -------------------------- helpers -------------------------- //\r\n\r\n // get a number from a string, not a percentage\r\n function getStyleSize(value) {\r\n var num = parseFloat(value);\r\n // not a percent like '100%', and a number\r\n var isValid = value.indexOf('%') == -1 && !isNaN(num);\r\n return isValid && num;\r\n }\r\n\r\n function noop() { }\r\n\r\n var logError = typeof console == 'undefined' ? noop :\r\n function (message) {\r\n console.error(message);\r\n };\r\n\r\n // -------------------------- measurements -------------------------- //\r\n\r\n var measurements = [\r\n 'paddingLeft',\r\n 'paddingRight',\r\n 'paddingTop',\r\n 'paddingBottom',\r\n 'marginLeft',\r\n 'marginRight',\r\n 'marginTop',\r\n 'marginBottom',\r\n 'borderLeftWidth',\r\n 'borderRightWidth',\r\n 'borderTopWidth',\r\n 'borderBottomWidth'\r\n ];\r\n\r\n var measurementsLength = measurements.length;\r\n\r\n function getZeroSize() {\r\n var size = {\r\n width: 0,\r\n height: 0,\r\n innerWidth: 0,\r\n innerHeight: 0,\r\n outerWidth: 0,\r\n outerHeight: 0\r\n };\r\n for (var i = 0; i < measurementsLength; i++) {\r\n var measurement = measurements[i];\r\n size[measurement] = 0;\r\n }\r\n return size;\r\n }\r\n\r\n // -------------------------- getStyle -------------------------- //\r\n\r\n /**\r\n * getStyle, get style of element, check for Firefox bug\r\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\r\n */\r\n function getStyle(elem) {\r\n var style = getComputedStyle(elem);\r\n if (!style) {\r\n logError('Style returned ' + style +\r\n '. Are you running this code in a hidden iframe on Firefox? ' +\r\n 'See https://bit.ly/getsizebug1');\r\n }\r\n return style;\r\n }\r\n\r\n // -------------------------- setup -------------------------- //\r\n\r\n var isSetup = false;\r\n\r\n var isBoxSizeOuter;\r\n\r\n /**\r\n * setup\r\n * check isBoxSizerOuter\r\n * do on first getSize() rather than on page load for Firefox bug\r\n */\r\n function setup() {\r\n // setup once\r\n if (isSetup) {\r\n return;\r\n }\r\n isSetup = true;\r\n\r\n // -------------------------- box sizing -------------------------- //\r\n\r\n /**\r\n * Chrome & Safari measure the outer-width on style.width on border-box elems\r\n * IE11 & Firefox<29 measures the inner-width\r\n */\r\n var div = document.createElement('div');\r\n div.style.width = '200px';\r\n div.style.padding = '1px 2px 3px 4px';\r\n div.style.borderStyle = 'solid';\r\n div.style.borderWidth = '1px 2px 3px 4px';\r\n div.style.boxSizing = 'border-box';\r\n\r\n var body = document.body || document.documentElement;\r\n body.appendChild(div);\r\n var style = getStyle(div);\r\n // round value for browser zoom. desandro/masonry#928\r\n isBoxSizeOuter = Math.round(getStyleSize(style.width)) == 200;\r\n getSize.isBoxSizeOuter = isBoxSizeOuter;\r\n\r\n body.removeChild(div);\r\n }\r\n\r\n // -------------------------- getSize -------------------------- //\r\n\r\n function getSize(elem) {\r\n setup();\r\n\r\n // use querySeletor if elem is string\r\n if (typeof elem == 'string') {\r\n elem = document.querySelector(elem);\r\n }\r\n\r\n // do not proceed on non-objects\r\n if (!elem || typeof elem != 'object' || !elem.nodeType) {\r\n return;\r\n }\r\n\r\n var style = getStyle(elem);\r\n\r\n // if hidden, everything is 0\r\n if (style.display == 'none') {\r\n return getZeroSize();\r\n }\r\n\r\n var size = {};\r\n size.width = elem.offsetWidth;\r\n size.height = elem.offsetHeight;\r\n\r\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\r\n\r\n // get all measurements\r\n for (var i = 0; i < measurementsLength; i++) {\r\n var measurement = measurements[i];\r\n var value = style[measurement];\r\n var num = parseFloat(value);\r\n // any 'auto', 'medium' value will be 0\r\n size[measurement] = !isNaN(num) ? num : 0;\r\n }\r\n\r\n var paddingWidth = size.paddingLeft + size.paddingRight;\r\n var paddingHeight = size.paddingTop + size.paddingBottom;\r\n var marginWidth = size.marginLeft + size.marginRight;\r\n var marginHeight = size.marginTop + size.marginBottom;\r\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\r\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\r\n\r\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\r\n\r\n // overwrite width and height if we can get it from style\r\n var styleWidth = getStyleSize(style.width);\r\n if (styleWidth !== false) {\r\n size.width = styleWidth +\r\n // add padding and border unless it's already including it\r\n (isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth);\r\n }\r\n\r\n var styleHeight = getStyleSize(style.height);\r\n if (styleHeight !== false) {\r\n size.height = styleHeight +\r\n // add padding and border unless it's already including it\r\n (isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight);\r\n }\r\n\r\n size.innerWidth = size.width - (paddingWidth + borderWidth);\r\n size.innerHeight = size.height - (paddingHeight + borderHeight);\r\n\r\n size.outerWidth = size.width + marginWidth;\r\n size.outerHeight = size.height + marginHeight;\r\n\r\n return size;\r\n }\r\n\r\n return getSize;\r\n\r\n});\r\n\r\n/**\r\n * matchesSelector v2.0.2\r\n * matchesSelector( element, '.selector' )\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, strict: true, undef: true, unused: true */\r\n\r\n(function (window, factory) {\r\n /*global define: false, module: false */\r\n 'use strict';\r\n // universal module definition\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('desandro-matches-selector/matches-selector', factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // browser global\r\n window.matchesSelector = factory();\r\n }\r\n\r\n}(window, function factory() {\r\n 'use strict';\r\n\r\n var matchesMethod = (function () {\r\n var ElemProto = window.Element.prototype;\r\n // check for the standard method name first\r\n if (ElemProto.matches) {\r\n return 'matches';\r\n }\r\n // check un-prefixed\r\n if (ElemProto.matchesSelector) {\r\n return 'matchesSelector';\r\n }\r\n // check vendor prefixes\r\n var prefixes = ['webkit', 'moz', 'ms', 'o'];\r\n\r\n for (var i = 0; i < prefixes.length; i++) {\r\n var prefix = prefixes[i];\r\n var method = prefix + 'MatchesSelector';\r\n if (ElemProto[method]) {\r\n return method;\r\n }\r\n }\r\n })();\r\n\r\n return function matchesSelector(elem, selector) {\r\n return elem[matchesMethod](selector);\r\n };\r\n\r\n}));\r\n\r\n/**\r\n * Fizzy UI utils v2.0.7\r\n * MIT license\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('fizzy-ui-utils/utils', [\r\n 'desandro-matches-selector/matches-selector'\r\n ], function (matchesSelector) {\r\n return factory(window, matchesSelector);\r\n });\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('desandro-matches-selector')\r\n );\r\n } else {\r\n // browser global\r\n window.fizzyUIUtils = factory(\r\n window,\r\n window.matchesSelector\r\n );\r\n }\r\n\r\n}(window, function factory(window, matchesSelector) {\r\n\r\n\r\n\r\n var utils = {};\r\n\r\n // ----- extend ----- //\r\n\r\n // extends objects\r\n utils.extend = function (a, b) {\r\n for (var prop in b) {\r\n a[prop] = b[prop];\r\n }\r\n return a;\r\n };\r\n\r\n // ----- modulo ----- //\r\n\r\n utils.modulo = function (num, div) {\r\n return ((num % div) + div) % div;\r\n };\r\n\r\n // ----- makeArray ----- //\r\n\r\n var arraySlice = Array.prototype.slice;\r\n\r\n // turn element or nodeList into an array\r\n utils.makeArray = function (obj) {\r\n if (Array.isArray(obj)) {\r\n // use object if already an array\r\n return obj;\r\n }\r\n // return empty array if undefined or null. #6\r\n if (obj === null || obj === undefined) {\r\n return [];\r\n }\r\n\r\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\r\n if (isArrayLike) {\r\n // convert nodeList to array\r\n return arraySlice.call(obj);\r\n }\r\n\r\n // array of single index\r\n return [obj];\r\n };\r\n\r\n // ----- removeFrom ----- //\r\n\r\n utils.removeFrom = function (ary, obj) {\r\n var index = ary.indexOf(obj);\r\n if (index != -1) {\r\n ary.splice(index, 1);\r\n }\r\n };\r\n\r\n // ----- getParent ----- //\r\n\r\n utils.getParent = function (elem, selector) {\r\n while (elem.parentNode && elem != document.body) {\r\n elem = elem.parentNode;\r\n if (matchesSelector(elem, selector)) {\r\n return elem;\r\n }\r\n }\r\n };\r\n\r\n // ----- getQueryElement ----- //\r\n\r\n // use element as selector string\r\n utils.getQueryElement = function (elem) {\r\n if (typeof elem == 'string') {\r\n return document.querySelector(elem);\r\n }\r\n return elem;\r\n };\r\n\r\n // ----- handleEvent ----- //\r\n\r\n // enable .ontype to trigger from .addEventListener( elem, 'type' )\r\n utils.handleEvent = function (event) {\r\n var method = 'on' + event.type;\r\n if (this[method]) {\r\n this[method](event);\r\n }\r\n };\r\n\r\n // ----- filterFindElements ----- //\r\n\r\n utils.filterFindElements = function (elems, selector) {\r\n // make array of elems\r\n elems = utils.makeArray(elems);\r\n var ffElems = [];\r\n\r\n elems.forEach(function (elem) {\r\n // check that elem is an actual element\r\n if (!(elem instanceof HTMLElement)) {\r\n return;\r\n }\r\n // add elem if no selector\r\n if (!selector) {\r\n ffElems.push(elem);\r\n return;\r\n }\r\n // filter & find items if we have a selector\r\n // filter\r\n if (matchesSelector(elem, selector)) {\r\n ffElems.push(elem);\r\n }\r\n // find children\r\n var childElems = elem.querySelectorAll(selector);\r\n // concat childElems to filterFound array\r\n for (var i = 0; i < childElems.length; i++) {\r\n ffElems.push(childElems[i]);\r\n }\r\n });\r\n\r\n return ffElems;\r\n };\r\n\r\n // ----- debounceMethod ----- //\r\n\r\n utils.debounceMethod = function (_class, methodName, threshold) {\r\n threshold = threshold || 100;\r\n // original method\r\n var method = _class.prototype[methodName];\r\n var timeoutName = methodName + 'Timeout';\r\n\r\n _class.prototype[methodName] = function () {\r\n var timeout = this[timeoutName];\r\n clearTimeout(timeout);\r\n\r\n var args = arguments;\r\n var _this = this;\r\n this[timeoutName] = setTimeout(function () {\r\n method.apply(_this, args);\r\n delete _this[timeoutName];\r\n }, threshold);\r\n };\r\n };\r\n\r\n // ----- docReady ----- //\r\n\r\n utils.docReady = function (callback) {\r\n var readyState = document.readyState;\r\n if (readyState == 'complete' || readyState == 'interactive') {\r\n // do async to allow for other scripts to run. metafizzy/flickity#441\r\n setTimeout(callback);\r\n } else {\r\n document.addEventListener('DOMContentLoaded', callback);\r\n }\r\n };\r\n\r\n // ----- htmlInit ----- //\r\n\r\n // http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\r\n utils.toDashed = function (str) {\r\n return str.replace(/(.)([A-Z])/g, function (match, $1, $2) {\r\n return $1 + '-' + $2;\r\n }).toLowerCase();\r\n };\r\n\r\n var console = window.console;\r\n /**\r\n * allow user to initialize classes via [data-namespace] or .js-namespace class\r\n * htmlInit( Widget, 'widgetName' )\r\n * options are parsed from data-namespace-options\r\n */\r\n utils.htmlInit = function (WidgetClass, namespace) {\r\n utils.docReady(function () {\r\n var dashedNamespace = utils.toDashed(namespace);\r\n var dataAttr = 'data-' + dashedNamespace;\r\n var dataAttrElems = document.querySelectorAll('[' + dataAttr + ']');\r\n var jsDashElems = document.querySelectorAll('.js-' + dashedNamespace);\r\n var elems = utils.makeArray(dataAttrElems)\r\n .concat(utils.makeArray(jsDashElems));\r\n var dataOptionsAttr = dataAttr + '-options';\r\n var jQuery = window.jQuery;\r\n\r\n elems.forEach(function (elem) {\r\n var attr = elem.getAttribute(dataAttr) ||\r\n elem.getAttribute(dataOptionsAttr);\r\n var options;\r\n try {\r\n options = attr && JSON.parse(attr);\r\n } catch (error) {\r\n // log error, do not initialize\r\n if (console) {\r\n console.error('Error parsing ' + dataAttr + ' on ' + elem.className +\r\n ': ' + error);\r\n }\r\n return;\r\n }\r\n // initialize\r\n var instance = new WidgetClass(elem, options);\r\n // make available via $().data('namespace')\r\n if (jQuery) {\r\n jQuery.data(elem, namespace, instance);\r\n }\r\n });\r\n\r\n });\r\n };\r\n\r\n // ----- ----- //\r\n\r\n return utils;\r\n\r\n}));\r\n\r\n/**\r\n * Outlayer Item\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /* globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD - RequireJS\r\n define('outlayer/item', [\r\n 'ev-emitter/ev-emitter',\r\n 'get-size/get-size'\r\n ],\r\n factory\r\n );\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS - Browserify, Webpack\r\n module.exports = factory(\r\n require('ev-emitter'),\r\n require('get-size')\r\n );\r\n } else {\r\n // browser global\r\n window.Outlayer = {};\r\n window.Outlayer.Item = factory(\r\n window.EvEmitter,\r\n window.getSize\r\n );\r\n }\r\n\r\n}(window, function factory(EvEmitter, getSize) {\r\n 'use strict';\r\n\r\n // ----- helpers ----- //\r\n\r\n function isEmptyObj(obj) {\r\n for (var prop in obj) {\r\n return false;\r\n }\r\n prop = null;\r\n return true;\r\n }\r\n\r\n // -------------------------- CSS3 support -------------------------- //\r\n\r\n\r\n var docElemStyle = document.documentElement.style;\r\n\r\n var transitionProperty = typeof docElemStyle.transition == 'string' ?\r\n 'transition' : 'WebkitTransition';\r\n var transformProperty = typeof docElemStyle.transform == 'string' ?\r\n 'transform' : 'WebkitTransform';\r\n\r\n var transitionEndEvent = {\r\n WebkitTransition: 'webkitTransitionEnd',\r\n transition: 'transitionend'\r\n }[transitionProperty];\r\n\r\n // cache all vendor properties that could have vendor prefix\r\n var vendorProperties = {\r\n transform: transformProperty,\r\n transition: transitionProperty,\r\n transitionDuration: transitionProperty + 'Duration',\r\n transitionProperty: transitionProperty + 'Property',\r\n transitionDelay: transitionProperty + 'Delay'\r\n };\r\n\r\n // -------------------------- Item -------------------------- //\r\n\r\n function Item(element, layout) {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n this.element = element;\r\n // parent layout class, i.e. Masonry, Isotope, or Packery\r\n this.layout = layout;\r\n this.position = {\r\n x: 0,\r\n y: 0\r\n };\r\n\r\n this._create();\r\n }\r\n\r\n // inherit EvEmitter\r\n var proto = Item.prototype = Object.create(EvEmitter.prototype);\r\n proto.constructor = Item;\r\n\r\n proto._create = function () {\r\n // transition objects\r\n this._transn = {\r\n ingProperties: {},\r\n clean: {},\r\n onEnd: {}\r\n };\r\n\r\n this.css({\r\n position: 'absolute'\r\n });\r\n };\r\n\r\n // trigger specified handler for event type\r\n proto.handleEvent = function (event) {\r\n var method = 'on' + event.type;\r\n if (this[method]) {\r\n this[method](event);\r\n }\r\n };\r\n\r\n proto.getSize = function () {\r\n this.size = getSize(this.element);\r\n };\r\n\r\n /**\r\n * apply CSS styles to element\r\n * @param {Object} style\r\n */\r\n proto.css = function (style) {\r\n var elemStyle = this.element.style;\r\n\r\n for (var prop in style) {\r\n // use vendor property if available\r\n var supportedProp = vendorProperties[prop] || prop;\r\n elemStyle[supportedProp] = style[prop];\r\n }\r\n };\r\n\r\n // measure position, and sets it\r\n proto.getPosition = function () {\r\n var style = getComputedStyle(this.element);\r\n var isOriginLeft = this.layout._getOption('originLeft');\r\n var isOriginTop = this.layout._getOption('originTop');\r\n var xValue = style[isOriginLeft ? 'left' : 'right'];\r\n var yValue = style[isOriginTop ? 'top' : 'bottom'];\r\n var x = parseFloat(xValue);\r\n var y = parseFloat(yValue);\r\n // convert percent to pixels\r\n var layoutSize = this.layout.size;\r\n if (xValue.indexOf('%') != -1) {\r\n x = (x / 100) * layoutSize.width;\r\n }\r\n if (yValue.indexOf('%') != -1) {\r\n y = (y / 100) * layoutSize.height;\r\n }\r\n // clean up 'auto' or other non-integer values\r\n x = isNaN(x) ? 0 : x;\r\n y = isNaN(y) ? 0 : y;\r\n // remove padding from measurement\r\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\r\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\r\n\r\n this.position.x = x;\r\n this.position.y = y;\r\n };\r\n\r\n // set settled position, apply padding\r\n proto.layoutPosition = function () {\r\n var layoutSize = this.layout.size;\r\n var style = {};\r\n var isOriginLeft = this.layout._getOption('originLeft');\r\n var isOriginTop = this.layout._getOption('originTop');\r\n\r\n // x\r\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\r\n var xProperty = isOriginLeft ? 'left' : 'right';\r\n var xResetProperty = isOriginLeft ? 'right' : 'left';\r\n\r\n var x = this.position.x + layoutSize[xPadding];\r\n // set in percentage or pixels\r\n style[xProperty] = this.getXValue(x);\r\n // reset other property\r\n style[xResetProperty] = '';\r\n\r\n // y\r\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\r\n var yProperty = isOriginTop ? 'top' : 'bottom';\r\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\r\n\r\n var y = this.position.y + layoutSize[yPadding];\r\n // set in percentage or pixels\r\n style[yProperty] = this.getYValue(y);\r\n // reset other property\r\n style[yResetProperty] = '';\r\n\r\n this.css(style);\r\n this.emitEvent('layout', [this]);\r\n };\r\n\r\n proto.getXValue = function (x) {\r\n var isHorizontal = this.layout._getOption('horizontal');\r\n return this.layout.options.percentPosition && !isHorizontal ?\r\n ((x / this.layout.size.width) * 100) + '%' : x + 'px';\r\n };\r\n\r\n proto.getYValue = function (y) {\r\n var isHorizontal = this.layout._getOption('horizontal');\r\n return this.layout.options.percentPosition && isHorizontal ?\r\n ((y / this.layout.size.height) * 100) + '%' : y + 'px';\r\n };\r\n\r\n proto._transitionTo = function (x, y) {\r\n this.getPosition();\r\n // get current x & y from top/left\r\n var curX = this.position.x;\r\n var curY = this.position.y;\r\n\r\n var didNotMove = x == this.position.x && y == this.position.y;\r\n\r\n // save end position\r\n this.setPosition(x, y);\r\n\r\n // if did not move and not transitioning, just go to layout\r\n if (didNotMove && !this.isTransitioning) {\r\n this.layoutPosition();\r\n return;\r\n }\r\n\r\n var transX = x - curX;\r\n var transY = y - curY;\r\n var transitionStyle = {};\r\n transitionStyle.transform = this.getTranslate(transX, transY);\r\n\r\n this.transition({\r\n to: transitionStyle,\r\n onTransitionEnd: {\r\n transform: this.layoutPosition\r\n },\r\n isCleaning: true\r\n });\r\n };\r\n\r\n proto.getTranslate = function (x, y) {\r\n // flip cooridinates if origin on right or bottom\r\n var isOriginLeft = this.layout._getOption('originLeft');\r\n var isOriginTop = this.layout._getOption('originTop');\r\n x = isOriginLeft ? x : -x;\r\n y = isOriginTop ? y : -y;\r\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\r\n };\r\n\r\n // non transition + transform support\r\n proto.goTo = function (x, y) {\r\n this.setPosition(x, y);\r\n this.layoutPosition();\r\n };\r\n\r\n proto.moveTo = proto._transitionTo;\r\n\r\n proto.setPosition = function (x, y) {\r\n this.position.x = parseFloat(x);\r\n this.position.y = parseFloat(y);\r\n };\r\n\r\n // ----- transition ----- //\r\n\r\n /**\r\n * @param {Object} style - CSS\r\n * @param {Function} onTransitionEnd\r\n */\r\n\r\n // non transition, just trigger callback\r\n proto._nonTransition = function (args) {\r\n this.css(args.to);\r\n if (args.isCleaning) {\r\n this._removeStyles(args.to);\r\n }\r\n for (var prop in args.onTransitionEnd) {\r\n args.onTransitionEnd[prop].call(this);\r\n }\r\n };\r\n\r\n /**\r\n * proper transition\r\n * @param {Object} args - arguments\r\n * @param {Object} to - style to transition to\r\n * @param {Object} from - style to start transition from\r\n * @param {Boolean} isCleaning - removes transition styles after transition\r\n * @param {Function} onTransitionEnd - callback\r\n */\r\n proto.transition = function (args) {\r\n // redirect to nonTransition if no transition duration\r\n if (!parseFloat(this.layout.options.transitionDuration)) {\r\n this._nonTransition(args);\r\n return;\r\n }\r\n\r\n var _transition = this._transn;\r\n // keep track of onTransitionEnd callback by css property\r\n for (var prop in args.onTransitionEnd) {\r\n _transition.onEnd[prop] = args.onTransitionEnd[prop];\r\n }\r\n // keep track of properties that are transitioning\r\n for (prop in args.to) {\r\n _transition.ingProperties[prop] = true;\r\n // keep track of properties to clean up when transition is done\r\n if (args.isCleaning) {\r\n _transition.clean[prop] = true;\r\n }\r\n }\r\n\r\n // set from styles\r\n if (args.from) {\r\n this.css(args.from);\r\n // force redraw. http://blog.alexmaccaw.com/css-transitions\r\n var h = this.element.offsetHeight;\r\n // hack for JSHint to hush about unused var\r\n h = null;\r\n }\r\n // enable transition\r\n this.enableTransition(args.to);\r\n // set styles that are transitioning\r\n this.css(args.to);\r\n\r\n this.isTransitioning = true;\r\n\r\n };\r\n\r\n // dash before all cap letters, including first for\r\n // WebkitTransform => -webkit-transform\r\n function toDashedAll(str) {\r\n return str.replace(/([A-Z])/g, function ($1) {\r\n return '-' + $1.toLowerCase();\r\n });\r\n }\r\n\r\n var transitionProps = 'opacity,' + toDashedAll(transformProperty);\r\n\r\n proto.enableTransition = function (/* style */) {\r\n // HACK changing transitionProperty during a transition\r\n // will cause transition to jump\r\n if (this.isTransitioning) {\r\n return;\r\n }\r\n\r\n // make `transition: foo, bar, baz` from style object\r\n // HACK un-comment this when enableTransition can work\r\n // while a transition is happening\r\n // var transitionValues = [];\r\n // for ( var prop in style ) {\r\n // // dash-ify camelCased properties like WebkitTransition\r\n // prop = vendorProperties[ prop ] || prop;\r\n // transitionValues.push( toDashedAll( prop ) );\r\n // }\r\n // munge number to millisecond, to match stagger\r\n var duration = this.layout.options.transitionDuration;\r\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\r\n // enable transition styles\r\n this.css({\r\n transitionProperty: transitionProps,\r\n transitionDuration: duration,\r\n transitionDelay: this.staggerDelay || 0\r\n });\r\n // listen for transition end event\r\n this.element.addEventListener(transitionEndEvent, this, false);\r\n };\r\n\r\n // ----- events ----- //\r\n\r\n proto.onwebkitTransitionEnd = function (event) {\r\n this.ontransitionend(event);\r\n };\r\n\r\n proto.onotransitionend = function (event) {\r\n this.ontransitionend(event);\r\n };\r\n\r\n // properties that I munge to make my life easier\r\n var dashedVendorProperties = {\r\n '-webkit-transform': 'transform'\r\n };\r\n\r\n proto.ontransitionend = function (event) {\r\n // disregard bubbled events from children\r\n if (event.target !== this.element) {\r\n return;\r\n }\r\n var _transition = this._transn;\r\n // get property name of transitioned property, convert to prefix-free\r\n var propertyName = dashedVendorProperties[event.propertyName] || event.propertyName;\r\n\r\n // remove property that has completed transitioning\r\n delete _transition.ingProperties[propertyName];\r\n // check if any properties are still transitioning\r\n if (isEmptyObj(_transition.ingProperties)) {\r\n // all properties have completed transitioning\r\n this.disableTransition();\r\n }\r\n // clean style\r\n if (propertyName in _transition.clean) {\r\n // clean up style\r\n this.element.style[event.propertyName] = '';\r\n delete _transition.clean[propertyName];\r\n }\r\n // trigger onTransitionEnd callback\r\n if (propertyName in _transition.onEnd) {\r\n var onTransitionEnd = _transition.onEnd[propertyName];\r\n onTransitionEnd.call(this);\r\n delete _transition.onEnd[propertyName];\r\n }\r\n\r\n this.emitEvent('transitionEnd', [this]);\r\n };\r\n\r\n proto.disableTransition = function () {\r\n this.removeTransitionStyles();\r\n this.element.removeEventListener(transitionEndEvent, this, false);\r\n this.isTransitioning = false;\r\n };\r\n\r\n /**\r\n * removes style property from element\r\n * @param {Object} style\r\n **/\r\n proto._removeStyles = function (style) {\r\n // clean up transition styles\r\n var cleanStyle = {};\r\n for (var prop in style) {\r\n cleanStyle[prop] = '';\r\n }\r\n this.css(cleanStyle);\r\n };\r\n\r\n var cleanTransitionStyle = {\r\n transitionProperty: '',\r\n transitionDuration: '',\r\n transitionDelay: ''\r\n };\r\n\r\n proto.removeTransitionStyles = function () {\r\n // remove transition\r\n this.css(cleanTransitionStyle);\r\n };\r\n\r\n // ----- stagger ----- //\r\n\r\n proto.stagger = function (delay) {\r\n delay = isNaN(delay) ? 0 : delay;\r\n this.staggerDelay = delay + 'ms';\r\n };\r\n\r\n // ----- show/hide/remove ----- //\r\n\r\n // remove element from DOM\r\n proto.removeElem = function () {\r\n this.element.parentNode.removeChild(this.element);\r\n // remove display: none\r\n this.css({ display: '' });\r\n this.emitEvent('remove', [this]);\r\n };\r\n\r\n proto.remove = function () {\r\n // just remove element if no transition support or no transition\r\n if (!transitionProperty || !parseFloat(this.layout.options.transitionDuration)) {\r\n this.removeElem();\r\n return;\r\n }\r\n\r\n // start transition\r\n this.once('transitionEnd', function () {\r\n this.removeElem();\r\n });\r\n this.hide();\r\n };\r\n\r\n proto.reveal = function () {\r\n delete this.isHidden;\r\n // remove display: none\r\n this.css({ display: '' });\r\n\r\n var options = this.layout.options;\r\n\r\n var onTransitionEnd = {};\r\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\r\n onTransitionEnd[transitionEndProperty] = this.onRevealTransitionEnd;\r\n\r\n this.transition({\r\n from: options.hiddenStyle,\r\n to: options.visibleStyle,\r\n isCleaning: true,\r\n onTransitionEnd: onTransitionEnd\r\n });\r\n };\r\n\r\n proto.onRevealTransitionEnd = function () {\r\n // check if still visible\r\n // during transition, item may have been hidden\r\n if (!this.isHidden) {\r\n this.emitEvent('reveal');\r\n }\r\n };\r\n\r\n /**\r\n * get style property use for hide/reveal transition end\r\n * @param {String} styleProperty - hiddenStyle/visibleStyle\r\n * @returns {String}\r\n */\r\n proto.getHideRevealTransitionEndProperty = function (styleProperty) {\r\n var optionStyle = this.layout.options[styleProperty];\r\n // use opacity\r\n if (optionStyle.opacity) {\r\n return 'opacity';\r\n }\r\n // get first property\r\n for (var prop in optionStyle) {\r\n return prop;\r\n }\r\n };\r\n\r\n proto.hide = function () {\r\n // set flag\r\n this.isHidden = true;\r\n // remove display: none\r\n this.css({ display: '' });\r\n\r\n var options = this.layout.options;\r\n\r\n var onTransitionEnd = {};\r\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\r\n onTransitionEnd[transitionEndProperty] = this.onHideTransitionEnd;\r\n\r\n this.transition({\r\n from: options.visibleStyle,\r\n to: options.hiddenStyle,\r\n // keep hidden stuff hidden\r\n isCleaning: true,\r\n onTransitionEnd: onTransitionEnd\r\n });\r\n };\r\n\r\n proto.onHideTransitionEnd = function () {\r\n // check if still hidden\r\n // during transition, item may have been un-hidden\r\n if (this.isHidden) {\r\n this.css({ display: 'none' });\r\n this.emitEvent('hide');\r\n }\r\n };\r\n\r\n proto.destroy = function () {\r\n this.css({\r\n position: '',\r\n left: '',\r\n right: '',\r\n top: '',\r\n bottom: '',\r\n transition: '',\r\n transform: ''\r\n });\r\n };\r\n\r\n return Item;\r\n\r\n}));\r\n\r\n/*!\r\n * Outlayer v2.1.1\r\n * the brains and guts of a layout library\r\n * MIT license\r\n */\r\n\r\n(function (window, factory) {\r\n 'use strict';\r\n // universal module definition\r\n /* jshint strict: false */ /* globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD - RequireJS\r\n define('outlayer/outlayer', [\r\n 'ev-emitter/ev-emitter',\r\n 'get-size/get-size',\r\n 'fizzy-ui-utils/utils',\r\n './item'\r\n ],\r\n function (EvEmitter, getSize, utils, Item) {\r\n return factory(window, EvEmitter, getSize, utils, Item);\r\n }\r\n );\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS - Browserify, Webpack\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter'),\r\n require('get-size'),\r\n require('fizzy-ui-utils'),\r\n require('./item')\r\n );\r\n } else {\r\n // browser global\r\n window.Outlayer = factory(\r\n window,\r\n window.EvEmitter,\r\n window.getSize,\r\n window.fizzyUIUtils,\r\n window.Outlayer.Item\r\n );\r\n }\r\n\r\n}(window, function factory(window, EvEmitter, getSize, utils, Item) {\r\n 'use strict';\r\n\r\n // ----- vars ----- //\r\n\r\n var console = window.console;\r\n var jQuery = window.jQuery;\r\n var noop = function () { };\r\n\r\n // -------------------------- Outlayer -------------------------- //\r\n\r\n // globally unique identifiers\r\n var GUID = 0;\r\n // internal store of all Outlayer intances\r\n var instances = {};\r\n\r\n\r\n /**\r\n * @param {Element, String} element\r\n * @param {Object} options\r\n * @constructor\r\n */\r\n function Outlayer(element, options) {\r\n var queryElement = utils.getQueryElement(element);\r\n if (!queryElement) {\r\n if (console) {\r\n console.error('Bad element for ' + this.constructor.namespace +\r\n ': ' + (queryElement || element));\r\n }\r\n return;\r\n }\r\n this.element = queryElement;\r\n // add jQuery\r\n if (jQuery) {\r\n this.$element = jQuery(this.element);\r\n }\r\n\r\n // options\r\n this.options = utils.extend({}, this.constructor.defaults);\r\n this.option(options);\r\n\r\n // add id for Outlayer.getFromElement\r\n var id = ++GUID;\r\n this.element.outlayerGUID = id; // expando\r\n instances[id] = this; // associate via id\r\n\r\n // kick it off\r\n this._create();\r\n\r\n var isInitLayout = this._getOption('initLayout');\r\n if (isInitLayout) {\r\n this.layout();\r\n }\r\n }\r\n\r\n // settings are for internal use only\r\n Outlayer.namespace = 'outlayer';\r\n Outlayer.Item = Item;\r\n\r\n // default options\r\n Outlayer.defaults = {\r\n containerStyle: {\r\n position: 'relative'\r\n },\r\n initLayout: true,\r\n originLeft: true,\r\n originTop: true,\r\n resize: true,\r\n resizeContainer: true,\r\n // item options\r\n transitionDuration: '0.4s',\r\n hiddenStyle: {\r\n opacity: 0,\r\n transform: 'scale(0.001)'\r\n },\r\n visibleStyle: {\r\n opacity: 1,\r\n transform: 'scale(1)'\r\n }\r\n };\r\n\r\n var proto = Outlayer.prototype;\r\n // inherit EvEmitter\r\n utils.extend(proto, EvEmitter.prototype);\r\n\r\n /**\r\n * set options\r\n * @param {Object} opts\r\n */\r\n proto.option = function (opts) {\r\n utils.extend(this.options, opts);\r\n };\r\n\r\n /**\r\n * get backwards compatible option value, check old name\r\n */\r\n proto._getOption = function (option) {\r\n var oldOption = this.constructor.compatOptions[option];\r\n return oldOption && this.options[oldOption] !== undefined ?\r\n this.options[oldOption] : this.options[option];\r\n };\r\n\r\n Outlayer.compatOptions = {\r\n // currentName: oldName\r\n initLayout: 'isInitLayout',\r\n horizontal: 'isHorizontal',\r\n layoutInstant: 'isLayoutInstant',\r\n originLeft: 'isOriginLeft',\r\n originTop: 'isOriginTop',\r\n resize: 'isResizeBound',\r\n resizeContainer: 'isResizingContainer'\r\n };\r\n\r\n proto._create = function () {\r\n // get items from children\r\n this.reloadItems();\r\n // elements that affect layout, but are not laid out\r\n this.stamps = [];\r\n this.stamp(this.options.stamp);\r\n // set container style\r\n utils.extend(this.element.style, this.options.containerStyle);\r\n\r\n // bind resize method\r\n var canBindResize = this._getOption('resize');\r\n if (canBindResize) {\r\n this.bindResize();\r\n }\r\n };\r\n\r\n // goes through all children again and gets bricks in proper order\r\n proto.reloadItems = function () {\r\n // collection of item elements\r\n this.items = this._itemize(this.element.children);\r\n };\r\n\r\n\r\n /**\r\n * turn elements into Outlayer.Items to be used in layout\r\n * @param {Array or NodeList or HTMLElement} elems\r\n * @returns {Array} items - collection of new Outlayer Items\r\n */\r\n proto._itemize = function (elems) {\r\n\r\n var itemElems = this._filterFindItemElements(elems);\r\n var Item = this.constructor.Item;\r\n\r\n // create new Outlayer Items for collection\r\n var items = [];\r\n for (var i = 0; i < itemElems.length; i++) {\r\n var elem = itemElems[i];\r\n var item = new Item(elem, this);\r\n items.push(item);\r\n }\r\n\r\n return items;\r\n };\r\n\r\n /**\r\n * get item elements to be used in layout\r\n * @param {Array or NodeList or HTMLElement} elems\r\n * @returns {Array} items - item elements\r\n */\r\n proto._filterFindItemElements = function (elems) {\r\n return utils.filterFindElements(elems, this.options.itemSelector);\r\n };\r\n\r\n /**\r\n * getter method for getting item elements\r\n * @returns {Array} elems - collection of item elements\r\n */\r\n proto.getItemElements = function () {\r\n return this.items.map(function (item) {\r\n return item.element;\r\n });\r\n };\r\n\r\n // ----- init & layout ----- //\r\n\r\n /**\r\n * lays out all items\r\n */\r\n proto.layout = function () {\r\n this._resetLayout();\r\n this._manageStamps();\r\n\r\n // don't animate first layout\r\n var layoutInstant = this._getOption('layoutInstant');\r\n var isInstant = layoutInstant !== undefined ?\r\n layoutInstant : !this._isLayoutInited;\r\n this.layoutItems(this.items, isInstant);\r\n\r\n // flag for initalized\r\n this._isLayoutInited = true;\r\n };\r\n\r\n // _init is alias for layout\r\n proto._init = proto.layout;\r\n\r\n /**\r\n * logic before any new layout\r\n */\r\n proto._resetLayout = function () {\r\n this.getSize();\r\n };\r\n\r\n\r\n proto.getSize = function () {\r\n this.size = getSize(this.element);\r\n };\r\n\r\n /**\r\n * get measurement from option, for columnWidth, rowHeight, gutter\r\n * if option is String -> get element from selector string, & get size of element\r\n * if option is Element -> get size of element\r\n * else use option as a number\r\n *\r\n * @param {String} measurement\r\n * @param {String} size - width or height\r\n * @private\r\n */\r\n proto._getMeasurement = function (measurement, size) {\r\n var option = this.options[measurement];\r\n var elem;\r\n if (!option) {\r\n // default to 0\r\n this[measurement] = 0;\r\n } else {\r\n // use option as an element\r\n if (typeof option == 'string') {\r\n elem = this.element.querySelector(option);\r\n } else if (option instanceof HTMLElement) {\r\n elem = option;\r\n }\r\n // use size of element, if element\r\n this[measurement] = elem ? getSize(elem)[size] : option;\r\n }\r\n };\r\n\r\n /**\r\n * layout a collection of item elements\r\n * @api public\r\n */\r\n proto.layoutItems = function (items, isInstant) {\r\n items = this._getItemsForLayout(items);\r\n\r\n this._layoutItems(items, isInstant);\r\n\r\n this._postLayout();\r\n };\r\n\r\n /**\r\n * get the items to be laid out\r\n * you may want to skip over some items\r\n * @param {Array} items\r\n * @returns {Array} items\r\n */\r\n proto._getItemsForLayout = function (items) {\r\n return items.filter(function (item) {\r\n return !item.isIgnored;\r\n });\r\n };\r\n\r\n /**\r\n * layout items\r\n * @param {Array} items\r\n * @param {Boolean} isInstant\r\n */\r\n proto._layoutItems = function (items, isInstant) {\r\n this._emitCompleteOnItems('layout', items);\r\n\r\n if (!items || !items.length) {\r\n // no items, emit event with empty array\r\n return;\r\n }\r\n\r\n var queue = [];\r\n\r\n items.forEach(function (item) {\r\n // get x/y object from method\r\n var position = this._getItemLayoutPosition(item);\r\n // enqueue\r\n position.item = item;\r\n position.isInstant = isInstant || item.isLayoutInstant;\r\n queue.push(position);\r\n }, this);\r\n\r\n this._processLayoutQueue(queue);\r\n };\r\n\r\n /**\r\n * get item layout position\r\n * @param {Outlayer.Item} item\r\n * @returns {Object} x and y position\r\n */\r\n proto._getItemLayoutPosition = function ( /* item */) {\r\n return {\r\n x: 0,\r\n y: 0\r\n };\r\n };\r\n\r\n /**\r\n * iterate over array and position each item\r\n * Reason being - separating this logic prevents 'layout invalidation'\r\n * thx @paul_irish\r\n * @param {Array} queue\r\n */\r\n proto._processLayoutQueue = function (queue) {\r\n this.updateStagger();\r\n queue.forEach(function (obj, i) {\r\n this._positionItem(obj.item, obj.x, obj.y, obj.isInstant, i);\r\n }, this);\r\n };\r\n\r\n // set stagger from option in milliseconds number\r\n proto.updateStagger = function () {\r\n var stagger = this.options.stagger;\r\n if (stagger === null || stagger === undefined) {\r\n this.stagger = 0;\r\n return;\r\n }\r\n this.stagger = getMilliseconds(stagger);\r\n return this.stagger;\r\n };\r\n\r\n /**\r\n * Sets position of item in DOM\r\n * @param {Outlayer.Item} item\r\n * @param {Number} x - horizontal position\r\n * @param {Number} y - vertical position\r\n * @param {Boolean} isInstant - disables transitions\r\n */\r\n proto._positionItem = function (item, x, y, isInstant, i) {\r\n if (isInstant) {\r\n // if not transition, just set CSS\r\n item.goTo(x, y);\r\n } else {\r\n item.stagger(i * this.stagger);\r\n item.moveTo(x, y);\r\n }\r\n };\r\n\r\n /**\r\n * Any logic you want to do after each layout,\r\n * i.e. size the container\r\n */\r\n proto._postLayout = function () {\r\n this.resizeContainer();\r\n };\r\n\r\n proto.resizeContainer = function () {\r\n var isResizingContainer = this._getOption('resizeContainer');\r\n if (!isResizingContainer) {\r\n return;\r\n }\r\n var size = this._getContainerSize();\r\n if (size) {\r\n this._setContainerMeasure(size.width, true);\r\n this._setContainerMeasure(size.height, false);\r\n }\r\n };\r\n\r\n /**\r\n * Sets width or height of container if returned\r\n * @returns {Object} size\r\n * @param {Number} width\r\n * @param {Number} height\r\n */\r\n proto._getContainerSize = noop;\r\n\r\n /**\r\n * @param {Number} measure - size of width or height\r\n * @param {Boolean} isWidth\r\n */\r\n proto._setContainerMeasure = function (measure, isWidth) {\r\n if (measure === undefined) {\r\n return;\r\n }\r\n\r\n var elemSize = this.size;\r\n // add padding and border width if border box\r\n if (elemSize.isBorderBox) {\r\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\r\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\r\n elemSize.paddingBottom + elemSize.paddingTop +\r\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\r\n }\r\n\r\n measure = Math.max(measure, 0);\r\n this.element.style[isWidth ? 'width' : 'height'] = measure + 'px';\r\n };\r\n\r\n /**\r\n * emit eventComplete on a collection of items events\r\n * @param {String} eventName\r\n * @param {Array} items - Outlayer.Items\r\n */\r\n proto._emitCompleteOnItems = function (eventName, items) {\r\n var _this = this;\r\n function onComplete() {\r\n _this.dispatchEvent(eventName + 'Complete', null, [items]);\r\n }\r\n\r\n var count = items.length;\r\n if (!items || !count) {\r\n onComplete();\r\n return;\r\n }\r\n\r\n var doneCount = 0;\r\n function tick() {\r\n doneCount++;\r\n if (doneCount == count) {\r\n onComplete();\r\n }\r\n }\r\n\r\n // bind callback\r\n items.forEach(function (item) {\r\n item.once(eventName, tick);\r\n });\r\n };\r\n\r\n /**\r\n * emits events via EvEmitter and jQuery events\r\n * @param {String} type - name of event\r\n * @param {Event} event - original event\r\n * @param {Array} args - extra arguments\r\n */\r\n proto.dispatchEvent = function (type, event, args) {\r\n // add original event to arguments\r\n var emitArgs = event ? [event].concat(args) : args;\r\n this.emitEvent(type, emitArgs);\r\n\r\n if (jQuery) {\r\n // set this.$element\r\n this.$element = this.$element || jQuery(this.element);\r\n if (event) {\r\n // create jQuery event\r\n var $event = jQuery.Event(event);\r\n $event.type = type;\r\n this.$element.trigger($event, args);\r\n } else {\r\n // just trigger with type if no event available\r\n this.$element.trigger(type, args);\r\n }\r\n }\r\n };\r\n\r\n // -------------------------- ignore & stamps -------------------------- //\r\n\r\n\r\n /**\r\n * keep item in collection, but do not lay it out\r\n * ignored items do not get skipped in layout\r\n * @param {Element} elem\r\n */\r\n proto.ignore = function (elem) {\r\n var item = this.getItem(elem);\r\n if (item) {\r\n item.isIgnored = true;\r\n }\r\n };\r\n\r\n /**\r\n * return item to layout collection\r\n * @param {Element} elem\r\n */\r\n proto.unignore = function (elem) {\r\n var item = this.getItem(elem);\r\n if (item) {\r\n delete item.isIgnored;\r\n }\r\n };\r\n\r\n /**\r\n * adds elements to stamps\r\n * @param {NodeList, Array, Element, or String} elems\r\n */\r\n proto.stamp = function (elems) {\r\n elems = this._find(elems);\r\n if (!elems) {\r\n return;\r\n }\r\n\r\n this.stamps = this.stamps.concat(elems);\r\n // ignore\r\n elems.forEach(this.ignore, this);\r\n };\r\n\r\n /**\r\n * removes elements to stamps\r\n * @param {NodeList, Array, or Element} elems\r\n */\r\n proto.unstamp = function (elems) {\r\n elems = this._find(elems);\r\n if (!elems) {\r\n return;\r\n }\r\n\r\n elems.forEach(function (elem) {\r\n // filter out removed stamp elements\r\n utils.removeFrom(this.stamps, elem);\r\n this.unignore(elem);\r\n }, this);\r\n };\r\n\r\n /**\r\n * finds child elements\r\n * @param {NodeList, Array, Element, or String} elems\r\n * @returns {Array} elems\r\n */\r\n proto._find = function (elems) {\r\n if (!elems) {\r\n return;\r\n }\r\n // if string, use argument as selector string\r\n if (typeof elems == 'string') {\r\n elems = this.element.querySelectorAll(elems);\r\n }\r\n elems = utils.makeArray(elems);\r\n return elems;\r\n };\r\n\r\n proto._manageStamps = function () {\r\n if (!this.stamps || !this.stamps.length) {\r\n return;\r\n }\r\n\r\n this._getBoundingRect();\r\n\r\n this.stamps.forEach(this._manageStamp, this);\r\n };\r\n\r\n // update boundingLeft / Top\r\n proto._getBoundingRect = function () {\r\n // get bounding rect for container element\r\n var boundingRect = this.element.getBoundingClientRect();\r\n var size = this.size;\r\n this._boundingRect = {\r\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\r\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\r\n right: boundingRect.right - (size.paddingRight + size.borderRightWidth),\r\n bottom: boundingRect.bottom - (size.paddingBottom + size.borderBottomWidth)\r\n };\r\n };\r\n\r\n /**\r\n * @param {Element} stamp\r\n **/\r\n proto._manageStamp = noop;\r\n\r\n /**\r\n * get x/y position of element relative to container element\r\n * @param {Element} elem\r\n * @returns {Object} offset - has left, top, right, bottom\r\n */\r\n proto._getElementOffset = function (elem) {\r\n var boundingRect = elem.getBoundingClientRect();\r\n var thisRect = this._boundingRect;\r\n var size = getSize(elem);\r\n var offset = {\r\n left: boundingRect.left - thisRect.left - size.marginLeft,\r\n top: boundingRect.top - thisRect.top - size.marginTop,\r\n right: thisRect.right - boundingRect.right - size.marginRight,\r\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\r\n };\r\n return offset;\r\n };\r\n\r\n // -------------------------- resize -------------------------- //\r\n\r\n // enable event handlers for listeners\r\n // i.e. resize -> onresize\r\n proto.handleEvent = utils.handleEvent;\r\n\r\n /**\r\n * Bind layout to window resizing\r\n */\r\n proto.bindResize = function () {\r\n window.addEventListener('resize', this);\r\n this.isResizeBound = true;\r\n };\r\n\r\n /**\r\n * Unbind layout to window resizing\r\n */\r\n proto.unbindResize = function () {\r\n window.removeEventListener('resize', this);\r\n this.isResizeBound = false;\r\n };\r\n\r\n proto.onresize = function () {\r\n this.resize();\r\n };\r\n\r\n utils.debounceMethod(Outlayer, 'onresize', 100);\r\n\r\n proto.resize = function () {\r\n // don't trigger if size did not change\r\n // or if resize was unbound. See #9\r\n if (!this.isResizeBound || !this.needsResizeLayout()) {\r\n return;\r\n }\r\n\r\n this.layout();\r\n };\r\n\r\n /**\r\n * check if layout is needed post layout\r\n * @returns Boolean\r\n */\r\n proto.needsResizeLayout = function () {\r\n var size = getSize(this.element);\r\n // check that this.size and size are there\r\n // IE8 triggers resize on body size change, so they might not be\r\n var hasSizes = this.size && size;\r\n return hasSizes && size.innerWidth !== this.size.innerWidth;\r\n };\r\n\r\n // -------------------------- methods -------------------------- //\r\n\r\n /**\r\n * add items to Outlayer instance\r\n * @param {Array or NodeList or Element} elems\r\n * @returns {Array} items - Outlayer.Items\r\n **/\r\n proto.addItems = function (elems) {\r\n var items = this._itemize(elems);\r\n // add items to collection\r\n if (items.length) {\r\n this.items = this.items.concat(items);\r\n }\r\n return items;\r\n };\r\n\r\n /**\r\n * Layout newly-appended item elements\r\n * @param {Array or NodeList or Element} elems\r\n */\r\n proto.appended = function (elems) {\r\n var items = this.addItems(elems);\r\n if (!items.length) {\r\n return;\r\n }\r\n // layout and reveal just the new items\r\n this.layoutItems(items, true);\r\n this.reveal(items);\r\n };\r\n\r\n /**\r\n * Layout prepended elements\r\n * @param {Array or NodeList or Element} elems\r\n */\r\n proto.prepended = function (elems) {\r\n var items = this._itemize(elems);\r\n if (!items.length) {\r\n return;\r\n }\r\n // add items to beginning of collection\r\n var previousItems = this.items.slice(0);\r\n this.items = items.concat(previousItems);\r\n // start new layout\r\n this._resetLayout();\r\n this._manageStamps();\r\n // layout new stuff without transition\r\n this.layoutItems(items, true);\r\n this.reveal(items);\r\n // layout previous items\r\n this.layoutItems(previousItems);\r\n };\r\n\r\n /**\r\n * reveal a collection of items\r\n * @param {Array of Outlayer.Items} items\r\n */\r\n proto.reveal = function (items) {\r\n this._emitCompleteOnItems('reveal', items);\r\n if (!items || !items.length) {\r\n return;\r\n }\r\n var stagger = this.updateStagger();\r\n items.forEach(function (item, i) {\r\n item.stagger(i * stagger);\r\n item.reveal();\r\n });\r\n };\r\n\r\n /**\r\n * hide a collection of items\r\n * @param {Array of Outlayer.Items} items\r\n */\r\n proto.hide = function (items) {\r\n this._emitCompleteOnItems('hide', items);\r\n if (!items || !items.length) {\r\n return;\r\n }\r\n var stagger = this.updateStagger();\r\n items.forEach(function (item, i) {\r\n item.stagger(i * stagger);\r\n item.hide();\r\n });\r\n };\r\n\r\n /**\r\n * reveal item elements\r\n * @param {Array}, {Element}, {NodeList} items\r\n */\r\n proto.revealItemElements = function (elems) {\r\n var items = this.getItems(elems);\r\n this.reveal(items);\r\n };\r\n\r\n /**\r\n * hide item elements\r\n * @param {Array}, {Element}, {NodeList} items\r\n */\r\n proto.hideItemElements = function (elems) {\r\n var items = this.getItems(elems);\r\n this.hide(items);\r\n };\r\n\r\n /**\r\n * get Outlayer.Item, given an Element\r\n * @param {Element} elem\r\n * @param {Function} callback\r\n * @returns {Outlayer.Item} item\r\n */\r\n proto.getItem = function (elem) {\r\n // loop through items to get the one that matches\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n if (item.element == elem) {\r\n // return item\r\n return item;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * get collection of Outlayer.Items, given Elements\r\n * @param {Array} elems\r\n * @returns {Array} items - Outlayer.Items\r\n */\r\n proto.getItems = function (elems) {\r\n elems = utils.makeArray(elems);\r\n var items = [];\r\n elems.forEach(function (elem) {\r\n var item = this.getItem(elem);\r\n if (item) {\r\n items.push(item);\r\n }\r\n }, this);\r\n\r\n return items;\r\n };\r\n\r\n /**\r\n * remove element(s) from instance and DOM\r\n * @param {Array or NodeList or Element} elems\r\n */\r\n proto.remove = function (elems) {\r\n var removeItems = this.getItems(elems);\r\n\r\n this._emitCompleteOnItems('remove', removeItems);\r\n\r\n // bail if no items to remove\r\n if (!removeItems || !removeItems.length) {\r\n return;\r\n }\r\n\r\n removeItems.forEach(function (item) {\r\n item.remove();\r\n // remove item from collection\r\n utils.removeFrom(this.items, item);\r\n }, this);\r\n };\r\n\r\n // ----- destroy ----- //\r\n\r\n // remove and disable Outlayer instance\r\n proto.destroy = function () {\r\n // clean up dynamic styles\r\n var style = this.element.style;\r\n style.height = '';\r\n style.position = '';\r\n style.width = '';\r\n // destroy items\r\n this.items.forEach(function (item) {\r\n item.destroy();\r\n });\r\n\r\n this.unbindResize();\r\n\r\n var id = this.element.outlayerGUID;\r\n delete instances[id]; // remove reference to instance by id\r\n delete this.element.outlayerGUID;\r\n // remove data for jQuery\r\n if (jQuery) {\r\n jQuery.removeData(this.element, this.constructor.namespace);\r\n }\r\n\r\n };\r\n\r\n // -------------------------- data -------------------------- //\r\n\r\n /**\r\n * get Outlayer instance from element\r\n * @param {Element} elem\r\n * @returns {Outlayer}\r\n */\r\n Outlayer.data = function (elem) {\r\n elem = utils.getQueryElement(elem);\r\n var id = elem && elem.outlayerGUID;\r\n return id && instances[id];\r\n };\r\n\r\n\r\n // -------------------------- create Outlayer class -------------------------- //\r\n\r\n /**\r\n * create a layout class\r\n * @param {String} namespace\r\n */\r\n Outlayer.create = function (namespace, options) {\r\n // sub-class Outlayer\r\n var Layout = subclass(Outlayer);\r\n // apply new options and compatOptions\r\n Layout.defaults = utils.extend({}, Outlayer.defaults);\r\n utils.extend(Layout.defaults, options);\r\n Layout.compatOptions = utils.extend({}, Outlayer.compatOptions);\r\n\r\n Layout.namespace = namespace;\r\n\r\n Layout.data = Outlayer.data;\r\n\r\n // sub-class Item\r\n Layout.Item = subclass(Item);\r\n\r\n // -------------------------- declarative -------------------------- //\r\n\r\n utils.htmlInit(Layout, namespace);\r\n\r\n // -------------------------- jQuery bridge -------------------------- //\r\n\r\n // make into jQuery plugin\r\n if (jQuery && jQuery.bridget) {\r\n jQuery.bridget(namespace, Layout);\r\n }\r\n\r\n return Layout;\r\n };\r\n\r\n function subclass(Parent) {\r\n function SubClass() {\r\n Parent.apply(this, arguments);\r\n }\r\n\r\n SubClass.prototype = Object.create(Parent.prototype);\r\n SubClass.prototype.constructor = SubClass;\r\n\r\n return SubClass;\r\n }\r\n\r\n // ----- helpers ----- //\r\n\r\n // how many milliseconds are in each unit\r\n var msUnits = {\r\n ms: 1,\r\n s: 1000\r\n };\r\n\r\n // munge time-like parameter into millisecond number\r\n // '0.4s' -> 40\r\n function getMilliseconds(time) {\r\n if (typeof time == 'number') {\r\n return time;\r\n }\r\n var matches = time.match(/(^\\d*\\.?\\d*)(\\w*)/);\r\n var num = matches && matches[1];\r\n var unit = matches && matches[2];\r\n if (!num.length) {\r\n return 0;\r\n }\r\n num = parseFloat(num);\r\n var mult = msUnits[unit] || 1;\r\n return num * mult;\r\n }\r\n\r\n // ----- fin ----- //\r\n\r\n // back in global\r\n Outlayer.Item = Item;\r\n\r\n return Outlayer;\r\n\r\n}));\r\n\r\n/**\r\n * Isotope Item\r\n**/\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('isotope-layout/js/item', [\r\n 'outlayer/outlayer'\r\n ],\r\n factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('outlayer')\r\n );\r\n } else {\r\n // browser global\r\n window.Isotope = window.Isotope || {};\r\n window.Isotope.Item = factory(\r\n window.Outlayer\r\n );\r\n }\r\n\r\n}(window, function factory(Outlayer) {\r\n 'use strict';\r\n\r\n // -------------------------- Item -------------------------- //\r\n\r\n // sub-class Outlayer Item\r\n function Item() {\r\n Outlayer.Item.apply(this, arguments);\r\n }\r\n\r\n var proto = Item.prototype = Object.create(Outlayer.Item.prototype);\r\n\r\n var _create = proto._create;\r\n proto._create = function () {\r\n // assign id, used for original-order sorting\r\n this.id = this.layout.itemGUID++;\r\n _create.call(this);\r\n this.sortData = {};\r\n };\r\n\r\n proto.updateSortData = function () {\r\n if (this.isIgnored) {\r\n return;\r\n }\r\n // default sorters\r\n this.sortData.id = this.id;\r\n // for backward compatibility\r\n this.sortData['original-order'] = this.id;\r\n this.sortData.random = Math.random();\r\n // go thru getSortData obj and apply the sorters\r\n var getSortData = this.layout.options.getSortData;\r\n var sorters = this.layout._sorters;\r\n for (var key in getSortData) {\r\n var sorter = sorters[key];\r\n this.sortData[key] = sorter(this.element, this);\r\n }\r\n };\r\n\r\n var _destroy = proto.destroy;\r\n proto.destroy = function () {\r\n // call super\r\n _destroy.apply(this, arguments);\r\n // reset display, #741\r\n this.css({\r\n display: ''\r\n });\r\n };\r\n\r\n return Item;\r\n\r\n}));\r\n\r\n/**\r\n * Isotope LayoutMode\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('isotope-layout/js/layout-mode', [\r\n 'get-size/get-size',\r\n 'outlayer/outlayer'\r\n ],\r\n factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('get-size'),\r\n require('outlayer')\r\n );\r\n } else {\r\n // browser global\r\n window.Isotope = window.Isotope || {};\r\n window.Isotope.LayoutMode = factory(\r\n window.getSize,\r\n window.Outlayer\r\n );\r\n }\r\n\r\n}(window, function factory(getSize, Outlayer) {\r\n 'use strict';\r\n\r\n // layout mode class\r\n function LayoutMode(isotope) {\r\n this.isotope = isotope;\r\n // link properties\r\n if (isotope) {\r\n this.options = isotope.options[this.namespace];\r\n this.element = isotope.element;\r\n this.items = isotope.filteredItems;\r\n this.size = isotope.size;\r\n }\r\n }\r\n\r\n var proto = LayoutMode.prototype;\r\n\r\n /**\r\n * some methods should just defer to default Outlayer method\r\n * and reference the Isotope instance as `this`\r\n **/\r\n var facadeMethods = [\r\n '_resetLayout',\r\n '_getItemLayoutPosition',\r\n '_manageStamp',\r\n '_getContainerSize',\r\n '_getElementOffset',\r\n 'needsResizeLayout',\r\n '_getOption'\r\n ];\r\n\r\n facadeMethods.forEach(function (methodName) {\r\n proto[methodName] = function () {\r\n return Outlayer.prototype[methodName].apply(this.isotope, arguments);\r\n };\r\n });\r\n\r\n // ----- ----- //\r\n\r\n // for horizontal layout modes, check vertical size\r\n proto.needsVerticalResizeLayout = function () {\r\n // don't trigger if size did not change\r\n var size = getSize(this.isotope.element);\r\n // check that this.size and size are there\r\n // IE8 triggers resize on body size change, so they might not be\r\n var hasSizes = this.isotope.size && size;\r\n return hasSizes && size.innerHeight != this.isotope.size.innerHeight;\r\n };\r\n\r\n // ----- measurements ----- //\r\n\r\n proto._getMeasurement = function () {\r\n this.isotope._getMeasurement.apply(this, arguments);\r\n };\r\n\r\n proto.getColumnWidth = function () {\r\n this.getSegmentSize('column', 'Width');\r\n };\r\n\r\n proto.getRowHeight = function () {\r\n this.getSegmentSize('row', 'Height');\r\n };\r\n\r\n /**\r\n * get columnWidth or rowHeight\r\n * segment: 'column' or 'row'\r\n * size 'Width' or 'Height'\r\n **/\r\n proto.getSegmentSize = function (segment, size) {\r\n var segmentName = segment + size;\r\n var outerSize = 'outer' + size;\r\n // columnWidth / outerWidth // rowHeight / outerHeight\r\n this._getMeasurement(segmentName, outerSize);\r\n // got rowHeight or columnWidth, we can chill\r\n if (this[segmentName]) {\r\n return;\r\n }\r\n // fall back to item of first element\r\n var firstItemSize = this.getFirstItemSize();\r\n this[segmentName] = firstItemSize && firstItemSize[outerSize] ||\r\n // or size of container\r\n this.isotope.size['inner' + size];\r\n };\r\n\r\n proto.getFirstItemSize = function () {\r\n var firstItem = this.isotope.filteredItems[0];\r\n return firstItem && firstItem.element && getSize(firstItem.element);\r\n };\r\n\r\n // ----- methods that should reference isotope ----- //\r\n\r\n proto.layout = function () {\r\n this.isotope.layout.apply(this.isotope, arguments);\r\n };\r\n\r\n proto.getSize = function () {\r\n this.isotope.getSize();\r\n this.size = this.isotope.size;\r\n };\r\n\r\n // -------------------------- create -------------------------- //\r\n\r\n LayoutMode.modes = {};\r\n\r\n LayoutMode.create = function (namespace, options) {\r\n\r\n function Mode() {\r\n LayoutMode.apply(this, arguments);\r\n }\r\n\r\n Mode.prototype = Object.create(proto);\r\n Mode.prototype.constructor = Mode;\r\n\r\n // default options\r\n if (options) {\r\n Mode.options = options;\r\n }\r\n\r\n Mode.prototype.namespace = namespace;\r\n // register in Isotope\r\n LayoutMode.modes[namespace] = Mode;\r\n\r\n return Mode;\r\n };\r\n\r\n return LayoutMode;\r\n\r\n}));\r\n\r\n/*!\r\n * Masonry v4.2.1\r\n * Cascading grid layout library\r\n * https://masonry.desandro.com\r\n * MIT License\r\n * by David DeSandro\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('masonry-layout/masonry', [\r\n 'outlayer/outlayer',\r\n 'get-size/get-size'\r\n ],\r\n factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('outlayer'),\r\n require('get-size')\r\n );\r\n } else {\r\n // browser global\r\n window.Masonry = factory(\r\n window.Outlayer,\r\n window.getSize\r\n );\r\n }\r\n\r\n}(window, function factory(Outlayer, getSize) {\r\n\r\n\r\n\r\n // -------------------------- masonryDefinition -------------------------- //\r\n\r\n // create an Outlayer layout class\r\n var Masonry = Outlayer.create('masonry');\r\n // isFitWidth -> fitWidth\r\n Masonry.compatOptions.fitWidth = 'isFitWidth';\r\n\r\n var proto = Masonry.prototype;\r\n\r\n proto._resetLayout = function () {\r\n this.getSize();\r\n this._getMeasurement('columnWidth', 'outerWidth');\r\n this._getMeasurement('gutter', 'outerWidth');\r\n this.measureColumns();\r\n\r\n // reset column Y\r\n this.colYs = [];\r\n for (var i = 0; i < this.cols; i++) {\r\n this.colYs.push(0);\r\n }\r\n\r\n this.maxY = 0;\r\n this.horizontalColIndex = 0;\r\n };\r\n\r\n proto.measureColumns = function () {\r\n this.getContainerWidth();\r\n // if columnWidth is 0, default to outerWidth of first item\r\n if (!this.columnWidth) {\r\n var firstItem = this.items[0];\r\n var firstItemElem = firstItem && firstItem.element;\r\n // columnWidth fall back to item of first element\r\n this.columnWidth = firstItemElem && getSize(firstItemElem).outerWidth ||\r\n // if first elem has no width, default to size of container\r\n this.containerWidth;\r\n }\r\n\r\n var columnWidth = this.columnWidth += this.gutter;\r\n\r\n // calculate columns\r\n var containerWidth = this.containerWidth + this.gutter;\r\n var cols = containerWidth / columnWidth;\r\n // fix rounding errors, typically with gutters\r\n var excess = columnWidth - containerWidth % columnWidth;\r\n // if overshoot is less than a pixel, round up, otherwise floor it\r\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\r\n cols = Math[mathMethod](cols);\r\n this.cols = Math.max(cols, 1);\r\n };\r\n\r\n proto.getContainerWidth = function () {\r\n // container is parent if fit width\r\n var isFitWidth = this._getOption('fitWidth');\r\n var container = isFitWidth ? this.element.parentNode : this.element;\r\n // check that this.size and size are there\r\n // IE8 triggers resize on body size change, so they might not be\r\n var size = getSize(container);\r\n this.containerWidth = size && size.innerWidth;\r\n };\r\n\r\n proto._getItemLayoutPosition = function (item) {\r\n item.getSize();\r\n // how many columns does this brick span\r\n var remainder = item.size.outerWidth % this.columnWidth;\r\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\r\n // round if off by 1 pixel, otherwise use ceil\r\n var colSpan = Math[mathMethod](item.size.outerWidth / this.columnWidth);\r\n colSpan = Math.min(colSpan, this.cols);\r\n // use horizontal or top column position\r\n var colPosMethod = this.options.horizontalOrder ?\r\n '_getHorizontalColPosition' : '_getTopColPosition';\r\n var colPosition = this[colPosMethod](colSpan, item);\r\n // position the brick\r\n var position = {\r\n x: this.columnWidth * colPosition.col,\r\n y: colPosition.y\r\n };\r\n // apply setHeight to necessary columns\r\n var setHeight = colPosition.y + item.size.outerHeight;\r\n var setMax = colSpan + colPosition.col;\r\n for (var i = colPosition.col; i < setMax; i++) {\r\n this.colYs[i] = setHeight;\r\n }\r\n\r\n return position;\r\n };\r\n\r\n proto._getTopColPosition = function (colSpan) {\r\n var colGroup = this._getTopColGroup(colSpan);\r\n // get the minimum Y value from the columns\r\n var minimumY = Math.min.apply(Math, colGroup);\r\n\r\n return {\r\n col: colGroup.indexOf(minimumY),\r\n y: minimumY,\r\n };\r\n };\r\n\r\n /**\r\n * @param {Number} colSpan - number of columns the element spans\r\n * @returns {Array} colGroup\r\n */\r\n proto._getTopColGroup = function (colSpan) {\r\n if (colSpan < 2) {\r\n // if brick spans only one column, use all the column Ys\r\n return this.colYs;\r\n }\r\n\r\n var colGroup = [];\r\n // how many different places could this brick fit horizontally\r\n var groupCount = this.cols + 1 - colSpan;\r\n // for each group potential horizontal position\r\n for (var i = 0; i < groupCount; i++) {\r\n colGroup[i] = this._getColGroupY(i, colSpan);\r\n }\r\n return colGroup;\r\n };\r\n\r\n proto._getColGroupY = function (col, colSpan) {\r\n if (colSpan < 2) {\r\n return this.colYs[col];\r\n }\r\n // make an array of colY values for that one group\r\n var groupColYs = this.colYs.slice(col, col + colSpan);\r\n // and get the max value of the array\r\n return Math.max.apply(Math, groupColYs);\r\n };\r\n\r\n // get column position based on horizontal index. #873\r\n proto._getHorizontalColPosition = function (colSpan, item) {\r\n var col = this.horizontalColIndex % this.cols;\r\n var isOver = colSpan > 1 && col + colSpan > this.cols;\r\n // shift to next row if item can't fit on current row\r\n col = isOver ? 0 : col;\r\n // don't let zero-size items take up space\r\n var hasSize = item.size.outerWidth && item.size.outerHeight;\r\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\r\n\r\n return {\r\n col: col,\r\n y: this._getColGroupY(col, colSpan),\r\n };\r\n };\r\n\r\n proto._manageStamp = function (stamp) {\r\n var stampSize = getSize(stamp);\r\n var offset = this._getElementOffset(stamp);\r\n // get the columns that this stamp affects\r\n var isOriginLeft = this._getOption('originLeft');\r\n var firstX = isOriginLeft ? offset.left : offset.right;\r\n var lastX = firstX + stampSize.outerWidth;\r\n var firstCol = Math.floor(firstX / this.columnWidth);\r\n firstCol = Math.max(0, firstCol);\r\n var lastCol = Math.floor(lastX / this.columnWidth);\r\n // lastCol should not go over if multiple of columnWidth #425\r\n lastCol -= lastX % this.columnWidth ? 0 : 1;\r\n lastCol = Math.min(this.cols - 1, lastCol);\r\n // set colYs to bottom of the stamp\r\n\r\n var isOriginTop = this._getOption('originTop');\r\n var stampMaxY = (isOriginTop ? offset.top : offset.bottom) +\r\n stampSize.outerHeight;\r\n for (var i = firstCol; i <= lastCol; i++) {\r\n this.colYs[i] = Math.max(stampMaxY, this.colYs[i]);\r\n }\r\n };\r\n\r\n proto._getContainerSize = function () {\r\n this.maxY = Math.max.apply(Math, this.colYs);\r\n var size = {\r\n height: this.maxY\r\n };\r\n\r\n if (this._getOption('fitWidth')) {\r\n size.width = this._getContainerFitWidth();\r\n }\r\n\r\n return size;\r\n };\r\n\r\n proto._getContainerFitWidth = function () {\r\n var unusedCols = 0;\r\n // count unused columns\r\n var i = this.cols;\r\n while (--i) {\r\n if (this.colYs[i] !== 0) {\r\n break;\r\n }\r\n unusedCols++;\r\n }\r\n // fit container to columns that have been used\r\n return (this.cols - unusedCols) * this.columnWidth - this.gutter;\r\n };\r\n\r\n proto.needsResizeLayout = function () {\r\n var previousWidth = this.containerWidth;\r\n this.getContainerWidth();\r\n return previousWidth != this.containerWidth;\r\n };\r\n\r\n return Masonry;\r\n\r\n}));\r\n\r\n/*!\r\n * Masonry layout mode\r\n * sub-classes Masonry\r\n * https://masonry.desandro.com\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('isotope-layout/js/layout-modes/masonry', [\r\n '../layout-mode',\r\n 'masonry-layout/masonry'\r\n ],\r\n factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('../layout-mode'),\r\n require('masonry-layout')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window.Isotope.LayoutMode,\r\n window.Masonry\r\n );\r\n }\r\n\r\n}(window, function factory(LayoutMode, Masonry) {\r\n 'use strict';\r\n\r\n // -------------------------- masonryDefinition -------------------------- //\r\n\r\n // create an Outlayer layout class\r\n var MasonryMode = LayoutMode.create('masonry');\r\n\r\n var proto = MasonryMode.prototype;\r\n\r\n var keepModeMethods = {\r\n _getElementOffset: true,\r\n layout: true,\r\n _getMeasurement: true\r\n };\r\n\r\n // inherit Masonry prototype\r\n for (var method in Masonry.prototype) {\r\n // do not inherit mode methods\r\n if (!keepModeMethods[method]) {\r\n proto[method] = Masonry.prototype[method];\r\n }\r\n }\r\n\r\n var measureColumns = proto.measureColumns;\r\n proto.measureColumns = function () {\r\n // set items, used if measuring first item\r\n this.items = this.isotope.filteredItems;\r\n measureColumns.call(this);\r\n };\r\n\r\n // point to mode options for fitWidth\r\n var _getOption = proto._getOption;\r\n proto._getOption = function (option) {\r\n if (option == 'fitWidth') {\r\n return this.options.isFitWidth !== undefined ?\r\n this.options.isFitWidth : this.options.fitWidth;\r\n }\r\n return _getOption.apply(this.isotope, arguments);\r\n };\r\n\r\n return MasonryMode;\r\n\r\n}));\r\n\r\n/**\r\n * fitRows layout mode\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('isotope-layout/js/layout-modes/fit-rows', [\r\n '../layout-mode'\r\n ],\r\n factory);\r\n } else if (typeof exports == 'object') {\r\n // CommonJS\r\n module.exports = factory(\r\n require('../layout-mode')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window.Isotope.LayoutMode\r\n );\r\n }\r\n\r\n}(window, function factory(LayoutMode) {\r\n 'use strict';\r\n\r\n var FitRows = LayoutMode.create('fitRows');\r\n\r\n var proto = FitRows.prototype;\r\n\r\n proto._resetLayout = function () {\r\n this.x = 0;\r\n this.y = 0;\r\n this.maxY = 0;\r\n this._getMeasurement('gutter', 'outerWidth');\r\n };\r\n\r\n proto._getItemLayoutPosition = function (item) {\r\n item.getSize();\r\n\r\n var itemWidth = item.size.outerWidth + this.gutter;\r\n // if this element cannot fit in the current row\r\n var containerWidth = this.isotope.size.innerWidth + this.gutter;\r\n if (this.x !== 0 && itemWidth + this.x > containerWidth) {\r\n this.x = 0;\r\n this.y = this.maxY;\r\n }\r\n\r\n var position = {\r\n x: this.x,\r\n y: this.y\r\n };\r\n\r\n this.maxY = Math.max(this.maxY, this.y + item.size.outerHeight);\r\n this.x += itemWidth;\r\n\r\n return position;\r\n };\r\n\r\n proto._getContainerSize = function () {\r\n return { height: this.maxY };\r\n };\r\n\r\n return FitRows;\r\n\r\n}));\r\n\r\n/**\r\n * vertical layout mode\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define('isotope-layout/js/layout-modes/vertical', [\r\n '../layout-mode'\r\n ],\r\n factory);\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('../layout-mode')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window.Isotope.LayoutMode\r\n );\r\n }\r\n\r\n}(window, function factory(LayoutMode) {\r\n 'use strict';\r\n\r\n var Vertical = LayoutMode.create('vertical', {\r\n horizontalAlignment: 0\r\n });\r\n\r\n var proto = Vertical.prototype;\r\n\r\n proto._resetLayout = function () {\r\n this.y = 0;\r\n };\r\n\r\n proto._getItemLayoutPosition = function (item) {\r\n item.getSize();\r\n var x = (this.isotope.size.innerWidth - item.size.outerWidth) *\r\n this.options.horizontalAlignment;\r\n var y = this.y;\r\n this.y += item.size.outerHeight;\r\n return { x: x, y: y };\r\n };\r\n\r\n proto._getContainerSize = function () {\r\n return { height: this.y };\r\n };\r\n\r\n return Vertical;\r\n\r\n}));\r\n\r\n/*!\r\n * Isotope v3.0.6\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Isotope Commercial License for commercial use\r\n *\r\n * https://isotope.metafizzy.co\r\n * Copyright 2010-2018 Metafizzy\r\n */\r\n\r\n(function (window, factory) {\r\n // universal module definition\r\n /* jshint strict: false */ /*globals define, module, require */\r\n if (typeof define == 'function' && define.amd) {\r\n // AMD\r\n define([\r\n 'outlayer/outlayer',\r\n 'get-size/get-size',\r\n 'desandro-matches-selector/matches-selector',\r\n 'fizzy-ui-utils/utils',\r\n 'isotope-layout/js/item',\r\n 'isotope-layout/js/layout-mode',\r\n // include default layout modes\r\n 'isotope-layout/js/layout-modes/masonry',\r\n 'isotope-layout/js/layout-modes/fit-rows',\r\n 'isotope-layout/js/layout-modes/vertical'\r\n ],\r\n function (Outlayer, getSize, matchesSelector, utils, Item, LayoutMode) {\r\n return factory(window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode);\r\n });\r\n } else if (typeof module == 'object' && module.exports) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('outlayer'),\r\n require('get-size'),\r\n require('desandro-matches-selector'),\r\n require('fizzy-ui-utils'),\r\n require('isotope-layout/js/item'),\r\n require('isotope-layout/js/layout-mode'),\r\n // include default layout modes\r\n require('isotope-layout/js/layout-modes/masonry'),\r\n require('isotope-layout/js/layout-modes/fit-rows'),\r\n require('isotope-layout/js/layout-modes/vertical')\r\n );\r\n } else {\r\n // browser global\r\n window.Isotope = factory(\r\n window,\r\n window.Outlayer,\r\n window.getSize,\r\n window.matchesSelector,\r\n window.fizzyUIUtils,\r\n window.Isotope.Item,\r\n window.Isotope.LayoutMode\r\n );\r\n }\r\n\r\n}(window, function factory(window, Outlayer, getSize, matchesSelector, utils,\r\n Item, LayoutMode) {\r\n\r\n\r\n\r\n // -------------------------- vars -------------------------- //\r\n\r\n var jQuery = window.jQuery;\r\n\r\n // -------------------------- helpers -------------------------- //\r\n\r\n var trim = String.prototype.trim ?\r\n function (str) {\r\n return str.trim();\r\n } :\r\n function (str) {\r\n return str.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n\r\n // -------------------------- isotopeDefinition -------------------------- //\r\n\r\n // create an Outlayer layout class\r\n var Isotope = Outlayer.create('isotope', {\r\n layoutMode: 'masonry',\r\n isJQueryFiltering: true,\r\n sortAscending: true\r\n });\r\n\r\n Isotope.Item = Item;\r\n Isotope.LayoutMode = LayoutMode;\r\n\r\n var proto = Isotope.prototype;\r\n\r\n proto._create = function () {\r\n this.itemGUID = 0;\r\n // functions that sort items\r\n this._sorters = {};\r\n this._getSorters();\r\n // call super\r\n Outlayer.prototype._create.call(this);\r\n\r\n // create layout modes\r\n this.modes = {};\r\n // start filteredItems with all items\r\n this.filteredItems = this.items;\r\n // keep of track of sortBys\r\n this.sortHistory = ['original-order'];\r\n // create from registered layout modes\r\n for (var name in LayoutMode.modes) {\r\n this._initLayoutMode(name);\r\n }\r\n };\r\n\r\n proto.reloadItems = function () {\r\n // reset item ID counter\r\n this.itemGUID = 0;\r\n // call super\r\n Outlayer.prototype.reloadItems.call(this);\r\n };\r\n\r\n proto._itemize = function () {\r\n var items = Outlayer.prototype._itemize.apply(this, arguments);\r\n // assign ID for original-order\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n item.id = this.itemGUID++;\r\n }\r\n this._updateItemsSortData(items);\r\n return items;\r\n };\r\n\r\n\r\n // -------------------------- layout -------------------------- //\r\n\r\n proto._initLayoutMode = function (name) {\r\n var Mode = LayoutMode.modes[name];\r\n // set mode options\r\n // HACK extend initial options, back-fill in default options\r\n var initialOpts = this.options[name] || {};\r\n this.options[name] = Mode.options ?\r\n utils.extend(Mode.options, initialOpts) : initialOpts;\r\n // init layout mode instance\r\n this.modes[name] = new Mode(this);\r\n };\r\n\r\n\r\n proto.layout = function () {\r\n // if first time doing layout, do all magic\r\n if (!this._isLayoutInited && this._getOption('initLayout')) {\r\n this.arrange();\r\n return;\r\n }\r\n this._layout();\r\n };\r\n\r\n // private method to be used in layout() & magic()\r\n proto._layout = function () {\r\n // don't animate first layout\r\n var isInstant = this._getIsInstant();\r\n // layout flow\r\n this._resetLayout();\r\n this._manageStamps();\r\n this.layoutItems(this.filteredItems, isInstant);\r\n\r\n // flag for initalized\r\n this._isLayoutInited = true;\r\n };\r\n\r\n // filter + sort + layout\r\n proto.arrange = function (opts) {\r\n // set any options pass\r\n this.option(opts);\r\n this._getIsInstant();\r\n // filter, sort, and layout\r\n\r\n // filter\r\n var filtered = this._filter(this.items);\r\n this.filteredItems = filtered.matches;\r\n\r\n this._bindArrangeComplete();\r\n\r\n if (this._isInstant) {\r\n this._noTransition(this._hideReveal, [filtered]);\r\n } else {\r\n this._hideReveal(filtered);\r\n }\r\n\r\n this._sort();\r\n this._layout();\r\n };\r\n // alias to _init for main plugin method\r\n proto._init = proto.arrange;\r\n\r\n proto._hideReveal = function (filtered) {\r\n this.reveal(filtered.needReveal);\r\n this.hide(filtered.needHide);\r\n };\r\n\r\n // HACK\r\n // Don't animate/transition first layout\r\n // Or don't animate/transition other layouts\r\n proto._getIsInstant = function () {\r\n var isLayoutInstant = this._getOption('layoutInstant');\r\n var isInstant = isLayoutInstant !== undefined ? isLayoutInstant :\r\n !this._isLayoutInited;\r\n this._isInstant = isInstant;\r\n return isInstant;\r\n };\r\n\r\n // listen for layoutComplete, hideComplete and revealComplete\r\n // to trigger arrangeComplete\r\n proto._bindArrangeComplete = function () {\r\n // listen for 3 events to trigger arrangeComplete\r\n var isLayoutComplete, isHideComplete, isRevealComplete;\r\n var _this = this;\r\n function arrangeParallelCallback() {\r\n if (isLayoutComplete && isHideComplete && isRevealComplete) {\r\n _this.dispatchEvent('arrangeComplete', null, [_this.filteredItems]);\r\n }\r\n }\r\n this.once('layoutComplete', function () {\r\n isLayoutComplete = true;\r\n arrangeParallelCallback();\r\n });\r\n this.once('hideComplete', function () {\r\n isHideComplete = true;\r\n arrangeParallelCallback();\r\n });\r\n this.once('revealComplete', function () {\r\n isRevealComplete = true;\r\n arrangeParallelCallback();\r\n });\r\n };\r\n\r\n // -------------------------- filter -------------------------- //\r\n\r\n proto._filter = function (items) {\r\n var filter = this.options.filter;\r\n filter = filter || '*';\r\n var matches = [];\r\n var hiddenMatched = [];\r\n var visibleUnmatched = [];\r\n\r\n var test = this._getFilterTest(filter);\r\n\r\n // test each item\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n if (item.isIgnored) {\r\n continue;\r\n }\r\n // add item to either matched or unmatched group\r\n var isMatched = test(item);\r\n // item.isFilterMatched = isMatched;\r\n // add to matches if its a match\r\n if (isMatched) {\r\n matches.push(item);\r\n }\r\n // add to additional group if item needs to be hidden or revealed\r\n if (isMatched && item.isHidden) {\r\n hiddenMatched.push(item);\r\n } else if (!isMatched && !item.isHidden) {\r\n visibleUnmatched.push(item);\r\n }\r\n }\r\n\r\n // return collections of items to be manipulated\r\n return {\r\n matches: matches,\r\n needReveal: hiddenMatched,\r\n needHide: visibleUnmatched\r\n };\r\n };\r\n\r\n // get a jQuery, function, or a matchesSelector test given the filter\r\n proto._getFilterTest = function (filter) {\r\n if (jQuery && this.options.isJQueryFiltering) {\r\n // use jQuery\r\n return function (item) {\r\n return jQuery(item.element).is(filter);\r\n };\r\n }\r\n if (typeof filter == 'function') {\r\n // use filter as function\r\n return function (item) {\r\n return filter(item.element);\r\n };\r\n }\r\n // default, use filter as selector string\r\n return function (item) {\r\n return matchesSelector(item.element, filter);\r\n };\r\n };\r\n\r\n // -------------------------- sorting -------------------------- //\r\n\r\n /**\r\n * @params {Array} elems\r\n * @public\r\n */\r\n proto.updateSortData = function (elems) {\r\n // get items\r\n var items;\r\n if (elems) {\r\n elems = utils.makeArray(elems);\r\n items = this.getItems(elems);\r\n } else {\r\n // update all items if no elems provided\r\n items = this.items;\r\n }\r\n\r\n this._getSorters();\r\n this._updateItemsSortData(items);\r\n };\r\n\r\n proto._getSorters = function () {\r\n var getSortData = this.options.getSortData;\r\n for (var key in getSortData) {\r\n var sorter = getSortData[key];\r\n this._sorters[key] = mungeSorter(sorter);\r\n }\r\n };\r\n\r\n /**\r\n * @params {Array} items - of Isotope.Items\r\n * @private\r\n */\r\n proto._updateItemsSortData = function (items) {\r\n // do not update if no items\r\n var len = items && items.length;\r\n\r\n for (var i = 0; len && i < len; i++) {\r\n var item = items[i];\r\n item.updateSortData();\r\n }\r\n };\r\n\r\n // ----- munge sorter ----- //\r\n\r\n // encapsulate this, as we just need mungeSorter\r\n // other functions in here are just for munging\r\n var mungeSorter = (function () {\r\n // add a magic layer to sorters for convienent shorthands\r\n // `.foo-bar` will use the text of .foo-bar querySelector\r\n // `[foo-bar]` will use attribute\r\n // you can also add parser\r\n // `.foo-bar parseInt` will parse that as a number\r\n function mungeSorter(sorter) {\r\n // if not a string, return function or whatever it is\r\n if (typeof sorter != 'string') {\r\n return sorter;\r\n }\r\n // parse the sorter string\r\n var args = trim(sorter).split(' ');\r\n var query = args[0];\r\n // check if query looks like [an-attribute]\r\n var attrMatch = query.match(/^\\[(.+)\\]$/);\r\n var attr = attrMatch && attrMatch[1];\r\n var getValue = getValueGetter(attr, query);\r\n // use second argument as a parser\r\n var parser = Isotope.sortDataParsers[args[1]];\r\n // parse the value, if there was a parser\r\n sorter = parser ? function (elem) {\r\n return elem && parser(getValue(elem));\r\n } :\r\n // otherwise just return value\r\n function (elem) {\r\n return elem && getValue(elem);\r\n };\r\n\r\n return sorter;\r\n }\r\n\r\n // get an attribute getter, or get text of the querySelector\r\n function getValueGetter(attr, query) {\r\n // if query looks like [foo-bar], get attribute\r\n if (attr) {\r\n return function getAttribute(elem) {\r\n return elem.getAttribute(attr);\r\n };\r\n }\r\n\r\n // otherwise, assume its a querySelector, and get its text\r\n return function getChildText(elem) {\r\n var child = elem.querySelector(query);\r\n return child && child.textContent;\r\n };\r\n }\r\n\r\n return mungeSorter;\r\n })();\r\n\r\n // parsers used in getSortData shortcut strings\r\n Isotope.sortDataParsers = {\r\n 'parseInt': function (val) {\r\n return parseInt(val, 10);\r\n },\r\n 'parseFloat': function (val) {\r\n return parseFloat(val);\r\n }\r\n };\r\n\r\n // ----- sort method ----- //\r\n\r\n // sort filteredItem order\r\n proto._sort = function () {\r\n if (!this.options.sortBy) {\r\n return;\r\n }\r\n // keep track of sortBy History\r\n var sortBys = utils.makeArray(this.options.sortBy);\r\n if (!this._getIsSameSortBy(sortBys)) {\r\n // concat all sortBy and sortHistory, add to front, oldest goes in last\r\n this.sortHistory = sortBys.concat(this.sortHistory);\r\n }\r\n // sort magic\r\n var itemSorter = getItemSorter(this.sortHistory, this.options.sortAscending);\r\n this.filteredItems.sort(itemSorter);\r\n };\r\n\r\n // check if sortBys is same as start of sortHistory\r\n proto._getIsSameSortBy = function (sortBys) {\r\n for (var i = 0; i < sortBys.length; i++) {\r\n if (sortBys[i] != this.sortHistory[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n // returns a function used for sorting\r\n function getItemSorter(sortBys, sortAsc) {\r\n return function sorter(itemA, itemB) {\r\n // cycle through all sortKeys\r\n for (var i = 0; i < sortBys.length; i++) {\r\n var sortBy = sortBys[i];\r\n var a = itemA.sortData[sortBy];\r\n var b = itemB.sortData[sortBy];\r\n if (a > b || a < b) {\r\n // if sortAsc is an object, use the value given the sortBy key\r\n var isAscending = sortAsc[sortBy] !== undefined ? sortAsc[sortBy] : sortAsc;\r\n var direction = isAscending ? 1 : -1;\r\n return (a > b ? 1 : -1) * direction;\r\n }\r\n }\r\n return 0;\r\n };\r\n }\r\n\r\n // -------------------------- methods -------------------------- //\r\n\r\n // get layout mode\r\n proto._mode = function () {\r\n var layoutMode = this.options.layoutMode;\r\n var mode = this.modes[layoutMode];\r\n if (!mode) {\r\n // TODO console.error\r\n throw new Error('No layout mode: ' + layoutMode);\r\n }\r\n // HACK sync mode's options\r\n // any options set after init for layout mode need to be synced\r\n mode.options = this.options[layoutMode];\r\n return mode;\r\n };\r\n\r\n proto._resetLayout = function () {\r\n // trigger original reset layout\r\n Outlayer.prototype._resetLayout.call(this);\r\n this._mode()._resetLayout();\r\n };\r\n\r\n proto._getItemLayoutPosition = function (item) {\r\n return this._mode()._getItemLayoutPosition(item);\r\n };\r\n\r\n proto._manageStamp = function (stamp) {\r\n this._mode()._manageStamp(stamp);\r\n };\r\n\r\n proto._getContainerSize = function () {\r\n return this._mode()._getContainerSize();\r\n };\r\n\r\n proto.needsResizeLayout = function () {\r\n return this._mode().needsResizeLayout();\r\n };\r\n\r\n // -------------------------- adding & removing -------------------------- //\r\n\r\n // HEADS UP overwrites default Outlayer appended\r\n proto.appended = function (elems) {\r\n var items = this.addItems(elems);\r\n if (!items.length) {\r\n return;\r\n }\r\n // filter, layout, reveal new items\r\n var filteredItems = this._filterRevealAdded(items);\r\n // add to filteredItems\r\n this.filteredItems = this.filteredItems.concat(filteredItems);\r\n };\r\n\r\n // HEADS UP overwrites default Outlayer prepended\r\n proto.prepended = function (elems) {\r\n var items = this._itemize(elems);\r\n if (!items.length) {\r\n return;\r\n }\r\n // start new layout\r\n this._resetLayout();\r\n this._manageStamps();\r\n // filter, layout, reveal new items\r\n var filteredItems = this._filterRevealAdded(items);\r\n // layout previous items\r\n this.layoutItems(this.filteredItems);\r\n // add to items and filteredItems\r\n this.filteredItems = filteredItems.concat(this.filteredItems);\r\n this.items = items.concat(this.items);\r\n };\r\n\r\n proto._filterRevealAdded = function (items) {\r\n var filtered = this._filter(items);\r\n this.hide(filtered.needHide);\r\n // reveal all new items\r\n this.reveal(filtered.matches);\r\n // layout new items, no transition\r\n this.layoutItems(filtered.matches, true);\r\n return filtered.matches;\r\n };\r\n\r\n /**\r\n * Filter, sort, and layout newly-appended item elements\r\n * @param {Array or NodeList or Element} elems\r\n */\r\n proto.insert = function (elems) {\r\n var items = this.addItems(elems);\r\n if (!items.length) {\r\n return;\r\n }\r\n // append item elements\r\n var i, item;\r\n var len = items.length;\r\n for (i = 0; i < len; i++) {\r\n item = items[i];\r\n this.element.appendChild(item.element);\r\n }\r\n // filter new stuff\r\n var filteredInsertItems = this._filter(items).matches;\r\n // set flag\r\n for (i = 0; i < len; i++) {\r\n items[i].isLayoutInstant = true;\r\n }\r\n this.arrange();\r\n // reset flag\r\n for (i = 0; i < len; i++) {\r\n delete items[i].isLayoutInstant;\r\n }\r\n this.reveal(filteredInsertItems);\r\n };\r\n\r\n var _remove = proto.remove;\r\n proto.remove = function (elems) {\r\n elems = utils.makeArray(elems);\r\n var removeItems = this.getItems(elems);\r\n // do regular thing\r\n _remove.call(this, elems);\r\n // bail if no items to remove\r\n var len = removeItems && removeItems.length;\r\n // remove elems from filteredItems\r\n for (var i = 0; len && i < len; i++) {\r\n var item = removeItems[i];\r\n // remove item from collection\r\n utils.removeFrom(this.filteredItems, item);\r\n }\r\n };\r\n\r\n proto.shuffle = function () {\r\n // update random sortData\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n item.sortData.random = Math.random();\r\n }\r\n this.options.sortBy = 'random';\r\n this._sort();\r\n this._layout();\r\n };\r\n\r\n /**\r\n * trigger fn without transition\r\n * kind of hacky to have this in the first place\r\n * @param {Function} fn\r\n * @param {Array} args\r\n * @returns ret\r\n * @private\r\n */\r\n proto._noTransition = function (fn, args) {\r\n // save transitionDuration before disabling\r\n var transitionDuration = this.options.transitionDuration;\r\n // disable transition\r\n this.options.transitionDuration = 0;\r\n // do it\r\n var returnValue = fn.apply(this, args);\r\n // re-enable transition for reveal\r\n this.options.transitionDuration = transitionDuration;\r\n return returnValue;\r\n };\r\n\r\n // ----- helper methods ----- //\r\n\r\n /**\r\n * getter method for getting filtered item elements\r\n * @returns {Array} elems - collection of item elements\r\n */\r\n proto.getFilteredItemElements = function () {\r\n return this.filteredItems.map(function (item) {\r\n return item.element;\r\n });\r\n };\r\n\r\n // ----- ----- //\r\n\r\n return Isotope;\r\n\r\n}));\r\n","/*\n * MAIN SCRIPT\n * DON'T WRITE FUNCTION HERE, ONLY CALL THEM\n *\n * **/\ndocument.addEventListener('DOMContentLoaded', () => {\n initFormFieldsToggle();\n initRecaptcha();\n initFormsValidation();\n initModalResponse();\n initIubendaProof();\n initLoadMore();\n initVideo();\n initMobileMenu();\n initCarousel(\"[data-slider]\", cellAlign.center, true, 5000, true);\n initMasonry();\n initMapScript();\n initVideoCardComponent();\n});\n","const initMobileMenu = () => {\n const header = document.querySelector(\".header-one-level\");\n const hamburgerIcon = document.querySelector(\".hamburger-icon\");\n const closeIcon = document.querySelector(\".close-icon\");\n const body = document.querySelector(\"body\");\n if (header && hamburgerIcon && closeIcon) {\n hamburgerIcon.addEventListener(\"click\", () => {\n closeIcon.classList.add(\"active\");\n hamburgerIcon.classList.remove(\"active\");\n header.classList.add(\"active\");\n });\n closeIcon.addEventListener(\"click\", () => {\n closeIcon.classList.remove(\"active\");\n hamburgerIcon.classList.add(\"active\");\n header.classList.remove(\"active\");\n });\n }\n};\n","let iso;\nconst masonryGrid = document.querySelector('.masonry');\nconst initMasonry = () => {\n const elementsArray = document.querySelectorAll('.masonry .masonry-cell');\n if (masonryGrid && elementsArray) {\n iso = new Isotope(masonryGrid, {\n // options\n itemSelector: '.masonry-cell',\n layoutMode: 'masonry',\n masonry: {\n gutter: 40,\n // @ts-ignore\n horizontalOrder: true\n }\n });\n }\n elementsArray.forEach((card) => {\n imagesLoaded(card).on('progress', () => {\n // layout Isotope after each image loads, to avoid layout collapsing\n iso.layout();\n });\n //shows card\n card.classList.add(\"active\");\n });\n};\n","/**\n * Align cells within the carousel element.\n * \"left\", \"center\", \"right\"\n */\nvar cellAlign;\n(function (cellAlign) {\n cellAlign[\"left\"] = \"left\";\n cellAlign[\"center\"] = \"center\";\n cellAlign[\"right\"] = \"right\";\n})(cellAlign || (cellAlign = {}));\n/**\n * Responsive slider\n * If the container can't contain all the slides then the carousel will be initialized\n *\n * You must add the attribute\n * data-slide to every slide of the slider\n *\n * @param {string} sliderSelector - querySelector of carousel. Choose [data-carousel] if you want to select all carousel.\n * @param {cellAlign} cellAlign - Align cells within the carousel element. Choose \"left\", \"center\", \"right\".\n * @param {boolean} contain - Contains cells to carousel element to prevent excess scroll at beginning or end. Has no effect if wrapAround: true\n * @param {boolean | number} autoPlay - Automatically advances to the next cell.\n * @param {boolean} wrapAround - At the end of cells, wrap-around to the other end for infinite scrolling.\n * @param {number} viewport - An optional parameter to decide at which viewport the carousel should be activated\n *\n */\nconst initCarousel = (sliderSelector, cellAlign, contain, autoPlay, wrapAround, viewport) => {\n if (window.innerWidth <= viewport || !viewport) {\n const arrayCarousel = document.querySelectorAll(sliderSelector);\n if (arrayCarousel && arrayCarousel.length > 0) {\n arrayCarousel.forEach((carouselContainer) => {\n const arraySliderItems = carouselContainer.querySelectorAll(\"[data-slide]\");\n //Max number of slides that could exist into the slider\n const maxNumberOfItems = ((carouselContainer.clientWidth + (arraySliderItems[0].offsetWidth - arraySliderItems[0].clientWidth)) / arraySliderItems[0].offsetWidth);\n //Array of slider's items (How many slide there are on the carousel)\n const actualSliderItemsNumber = arraySliderItems.length;\n //If Number max is less than item exist then initialize slider carousel or add a calss to center item\n if (actualSliderItemsNumber > maxNumberOfItems) {\n const flickitySlider = new Flickity(carouselContainer, {\n on: {\n ready: function () {\n carouselContainer.setAttribute(\"data-carousel\", \"active\");\n }\n },\n //slider options\n cellAlign: cellAlign.toString(),\n contain: contain,\n autoPlay: autoPlay,\n wrapAround: wrapAround,\n pageDots: false,\n prevNextButtons: false\n });\n const parentContainer = carouselContainer.parentElement;\n parentContainer.querySelector(\".prev-container\").addEventListener(\"click\", () => {\n flickitySlider.previous();\n });\n parentContainer.querySelector(\".next-container\").addEventListener(\"click\", () => {\n flickitySlider.next();\n });\n }\n else {\n carouselContainer.classList.add(\"is-not-slider\");\n }\n });\n }\n }\n};\n","const componentFunction = (test) => {\n return test;\n};\n","const mapsArray = document.querySelectorAll(\".google-map\");\nconst initMapScript = () => {\n if (mapsArray && mapsArray.length > 0) {\n const APIKEY = document.querySelector(\"[data-api-key]\").getAttribute(\"data-api-key\");\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://maps.googleapis.com/maps/api/js?key=${APIKEY}&callback=initMap&libraries=&v=weekly`;\n document.head.appendChild(script);\n }\n};\nconst initMap = () => {\n mapsArray && mapsArray.length > 0 && mapsArray.forEach((singleMap) => {\n const markerLat = parseFloat(singleMap.getAttribute(\"data-lat\").replace(\",\", \".\"));\n const markerLng = parseFloat(singleMap.getAttribute(\"data-lng\").replace(\",\", \".\"));\n const markerTitle = singleMap.getAttribute(\"data-marker-title\");\n const markerDescription = singleMap.getAttribute(\"data-marker-description\");\n if (markerLat && markerLng) {\n const map = new google.maps.Map(singleMap, {\n zoom: 15,\n center: { lat: markerLat, lng: markerLng }\n });\n if (markerTitle && markerDescription) {\n new google.maps.Marker({\n position: { lat: markerLat, lng: markerLng },\n map: map\n });\n }\n }\n });\n};\n","// ACTIVATE:\n// invoke initFormFieldsToggle() in main.ts if you need to add this hide / show feature for form fields\n// EXAMPLE:\n// you need to show additional fields if a specific option is selected\n// and hide other non-related-fields\n// HOW TO DO IT:\n// add [data-toggler] to all the select fields, that make some extra fields appear\nconst initFormFieldsToggle = () => {\n const contactFormsArray = document.querySelectorAll(\"[contact-form]\");\n if (contactFormsArray && contactFormsArray.length > 0) {\n contactFormsArray.forEach((form) => {\n const togglerArray = form.querySelectorAll(\"[data-toggler]\");\n const elementsToBeToggledArray = document.querySelectorAll(\"[data-form-toggle-type]\");\n togglerArray && togglerArray.length > 0 && togglerArray.forEach((toggler) => {\n //give it a first run to show correct data only\n toggleFormFields(elementsToBeToggledArray, toggler);\n //bind the function to the change event\n toggler.addEventListener(\"change\", () => {\n toggleFormFields(elementsToBeToggledArray, toggler);\n });\n });\n });\n }\n};\n//IF YOU WANT TO INSERT A NEW \"data-form-toggle-type\", THIS CODE HANDLES ONLY SINGLE WORDS\n//SO MAKE THE VALUE OF THE OPTION AND THE ATTR BE JUST ONE WORD\n//EXAMPLE: \n// OK => NEWTYPE, newtype, NewType\n// NOT OK => NEW-TYPE, NEW TYPE\n//IF YOU WANT AN ELEMENT TO BE AVAILABLE FOR MORE THAN ONE TYPE OF OPTION\n//THEN SEPARE THE TYPES WITH \";\"\n//LIKE THIS \"data-form-toggle-type=\"type1;type2\"\nconst toggleFormFields = (array, selectToggler) => {\n array.forEach((element) => {\n if (element.getAttribute(\"data-form-toggle-type\").split(\";\").includes(selectToggler.value.toLowerCase())) {\n element.classList.remove(\"hidden\");\n if (element instanceof HTMLInputElement || element instanceof HTMLSelectElement) {\n element.removeAttribute('disabled');\n }\n else {\n element.querySelectorAll(\"input, select\").forEach((input) => {\n input.removeAttribute('disabled');\n });\n }\n }\n else {\n element.classList.add(\"hidden\");\n if (element instanceof HTMLInputElement || element instanceof HTMLSelectElement) {\n element.disabled = true;\n }\n else {\n element.querySelectorAll(\"input, select\").forEach((input) => {\n input.disabled = true;\n });\n }\n }\n });\n};\n","/**\n* debouncer - Limits the rate at which a function can fire.\n*\n* Example:\n*\n* $(window).resize(debouncer(function(e) {\n* function();\n* }, 300));\n*\n* @param {function} func The function you want to limit\n* @param {ms} timeout Optional: timeout of the debouncer. Defaults at 200ms.\n*/\nconst debouncer = (func, timeout = 300) => {\n let timeoutId;\n return function (...args) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => func.apply(this, args), timeout);\n };\n};\n","const initFilter = () => {\n const filterInput = document.querySelector(\"[data-input-filter]\");\n const itemsToFilterArray = document.querySelectorAll(\"[data-item-toggle]\");\n const itemsTitleToFilterArray = document.querySelectorAll(\"[data-item-filter]\");\n if (filterInput) {\n filterInput.addEventListener(\"keyup\", (e) => {\n const inputText = e.target.value.toLowerCase();\n for (let i = 0; i < itemsTitleToFilterArray.length; i++) {\n if (itemsTitleToFilterArray[i].innerText.toLowerCase().includes(inputText)) {\n itemsToFilterArray[i].classList.remove(\"not-visible\");\n }\n else {\n itemsToFilterArray[i].classList.add(\"not-visible\");\n }\n }\n });\n }\n};\n","let isFormValid = false;\nconst contactForms = document.querySelectorAll(\"form\");\nconst initFormsValidation = () => {\n contactForms && contactForms.forEach((form) => {\n const submitButton = form.querySelector(\"[submit-button]\");\n submitButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n // set active form\n contactForms.forEach((singleForm) => singleForm.removeAttribute(\"data-active-form\"));\n form.setAttribute(\"data-active-form\", \"true\");\n // disable button\n temporaryDisableButton(submitButton);\n // check form validity\n const contactFormRequiredElements = form.querySelectorAll(\"[required]:not([disabled])\");\n if (contactFormRequiredElements && contactFormRequiredElements.length > 0) {\n isFormValid = checkFormValidity(contactFormRequiredElements);\n if (isFormValid) {\n if (isRecaptchaEnabled) {\n grecaptcha.execute(parseInt(form.getAttribute(\"g-recaptcha-index\")));\n }\n else {\n form.submit();\n }\n }\n }\n });\n });\n};\nconst temporaryDisableButton = (button) => {\n button.disabled = true;\n setTimeout(() => {\n button.removeAttribute(\"disabled\");\n }, 2000);\n};\nconst checkFormValidity = (arrayOfRequiredElements) => {\n let errorCounter = 0;\n arrayOfRequiredElements.forEach((item) => {\n if (item.hasAttribute(\"required\")) {\n const isValidItem = item.checkValidity();\n //handle checkbox\n if (item.type === \"checkbox\") {\n const label = item.parentElement.querySelector(\"label\");\n if (isValidItem) {\n label.classList.remove('error');\n }\n else {\n label.classList.add('error');\n errorCounter++;\n }\n //all other inputs\n }\n else {\n if (isValidItem) {\n item.classList.remove('error');\n }\n else {\n item.classList.add('error');\n errorCounter++;\n }\n }\n item.addEventListener(\"click\", () => {\n item.classList.remove('error');\n });\n }\n });\n return errorCounter > 0 ? false : true;\n};\n","const initIubendaProof = () => {\n document.querySelectorAll('form[method=POST]').forEach(function (value) {\n const html = btoa(encodeURI(value.innerHTML));\n const textArea = document.createElement(\"textarea\");\n const innerText = document.createTextNode(html);\n textArea.name = \"iubenda_proof\";\n textArea.style.display = \"none\";\n value.appendChild(textArea);\n textArea.appendChild(innerText);\n });\n};\n","/**\n* LAZY LOAD IMG\n* loading non-critical img (and background img) at the moment of need\n*\n* for img use:\n* - data-src=url\n* -\n* - src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII= *\n*\n* - class => \"notLazy\" to not include that img in lazyLoading function\n*\n* for background img use:\n* - data-bg=url\n*\n* To exclude an entire DOM element (as well as all the children) apply the class \"notLazy\" to that element.\n*\n* recall jsLazyLoadImages() every time you add images asynchronously\n*\n* @external Debouncer.fn\n* @see {@link ./frontend.util.js => debouncer}\n*\n* @external imagesloaded\n* @see {@link https://imagesloaded.desandro.com/}\n*\n* @param {object} settings => [OPTIONAL] settings object\n* @param {bool} settings0=> [OPTIONAL] add all img to lazyLoad\n* @param {bool} settings1 => [OPTIONAL] add all bacgkroundImg to lazyLoad\n* @param {bool} settings2 => [OPTIONAL] container\n*\n*/\nconst jsLazyLoadImages = (asyncImg = true, asyncBg = true, container = document) => {\n if (!asyncImg && !asyncBg)\n return false;\n let lazyImgs = [];\n let lazyImagesBG = [];\n let lazyImages = [];\n let active = false;\n const jsLazyLoad = () => {\n // Puts the contents of the querySelectorAll into the array.\n lazyImgs = asyncImg ? [].slice.call(container.querySelectorAll(\"[data-src]:not(.notLazy):not([js-done])\")) : lazyImgs;\n lazyImagesBG = asyncBg ? [].slice.call(container.querySelectorAll(\"[data-bg]:not([js-done])\")) : lazyImagesBG;\n // filter out images inside '.notLazy' containers\n const notLazyNodes = [...container.querySelectorAll('.notLazy:not(img)')];\n lazyImgs.forEach(img => {\n if (notLazyNodes.some(node => node.contains(img)))\n lazyImgs.splice(img);\n });\n //notLazyNodes\n lazyImages = lazyImgs.concat(lazyImagesBG);\n active = false;\n if (active === false) {\n active = true;\n lazyImages.forEach(lazyImage => {\n if ((lazyImage.getBoundingClientRect().top - window.innerHeight / 2 <= window.innerHeight &&\n lazyImage.getBoundingClientRect().bottom + window.innerHeight / 2 >= 0) &&\n getComputedStyle(lazyImage).display !== \"none\") {\n setTimeout(() => {\n if (lazyImage.getAttribute(\"data-bg\")) {\n resizeBg([lazyImage]);\n }\n else {\n lazyImage.src = lazyImage.getAttribute(\"data-src\");\n }\n lazyImage.setAttribute(\"js-done\", \"1\");\n lazyImages = lazyImages.filter(image => image !== lazyImage);\n if (lazyImages.length === 0) {\n document.removeEventListener(\"scroll\", jsLazyLoad);\n }\n }, 300);\n }\n });\n active = false;\n }\n };\n //clear old events\n document.removeEventListener(\"scroll\", jsLazyLoad);\n window.removeEventListener('resize', debouncer(() => {\n resizeBg();\n }, 150));\n window.removeEventListener('orientationchange', debouncer(() => {\n resizeBg();\n }, 150));\n jsLazyLoad();\n document.addEventListener(\"scroll\", jsLazyLoad);\n window.addEventListener('resize', debouncer(() => {\n resizeBg();\n }, 150));\n window.addEventListener('orientationchange', debouncer(() => {\n resizeBg();\n }, 150));\n};\nconst resizeBg = (lazyImage) => {\n const lazyImagesBG = lazyImage ? lazyImage : [].slice.call(document.querySelectorAll(\"[data-bg]\"));\n lazyImagesBG.forEach(lazyImage => {\n let url = \"\";\n if (window.innerWidth < 1200) {\n if (window.innerWidth > 767) {\n url = \"data-bg768\";\n }\n else {\n url = \"data-bg480\";\n }\n }\n else {\n url = \"data-bg\";\n }\n const backgroundImage = lazyImage.getAttribute(url) || lazyImage.getAttribute(\"data-bg\");\n lazyImage.style.backgroundImage = `url('${backgroundImage}')`;\n });\n};\n","/**\n * In the page there should be one or more listings [data-container-loadmore] with the functionality of the load more [data-btn-loadmore];\n * At the click of the load more button of the listing referenced by its ID, it executes a fetch call in GET\n * The resolution of the PROMISE of the fetch transforms the data into a text with the PROMISE Text()\n * The resolution of the PROMISE Text() gives us the result NOT parsed.\n * At this point we will instantiate a DOM Parser, so that it allows us to parse our result in text / html\n * We take only the elements we want [data-to-append]\n * We verify that the listing to which we will hang the elements received is related to the Load more button clicked\n * I append the elements to the listing.\n *\n * At this point, the button will update with the new href\n * If it doesn't have an href, the button node will be removed\n *\n * */\nconst initLoadMore = () => {\n const buttonsArray = document.querySelectorAll(\"[data-btn-loadmore]\");\n const dataContainersArray = document.querySelectorAll(\"[data-container-loadmore]\");\n if (buttonsArray && dataContainersArray && buttonsArray.length > 0 && dataContainersArray.length > 0) {\n // Put unique id on data container\n dataContainersArray.forEach((dataContainer, index) => {\n dataContainer.setAttribute(\"data-container-loadmore\", index.toString());\n });\n buttonsArray.forEach((button, index) => {\n //Put unique id on data button load more\n button.setAttribute(\"data-btn-loadmore\", index.toString());\n button.addEventListener(\"click\", (event) => {\n event.preventDefault();\n if (event.target instanceof HTMLAnchorElement) {\n const clickedButton = event.target;\n //start loading animation\n clickedButton.classList.add(\"loading\");\n const nextPageUrl = event.target.href;\n fetch(`${nextPageUrl}&partial=1`)\n .then(data => {\n //convert the response into plain text\n data.text()\n //resolve the promise\n .then((result) => {\n // Initialize the DOM parser\n const parser = new DOMParser();\n // Parse the text and convert it into HTML\n const parsedHTML = parser.parseFromString(result, \"text/html\");\n //get only the cards\n const cardsToAppendArray = parsedHTML.querySelectorAll(\"[data-to-append]\");\n //append them to the deck\n cardsToAppendArray.forEach((card) => {\n imagesLoaded(card).on('progress', () => {\n // layout Isotope after each image loads, to avoid layout collapsing\n iso.insert(card);\n });\n //shows card\n card.classList.add(\"active\");\n });\n setTimeout(() => {\n iso.layout();\n initVideoCardComponent();\n }, 1000);\n //update loadmore link or hide button\n const updatedButton = parsedHTML.querySelector(\"[data-btn-loadmore]\");\n if (updatedButton != null) {\n clickedButton.href = updatedButton.href;\n //stop loading animation\n clickedButton.classList.remove(\"loading\");\n }\n else {\n //remove load more button\n clickedButton.remove();\n }\n });\n });\n }\n });\n });\n }\n};\n","const initModalResponse = () => {\n const modal = document.querySelector(\".modal\");\n const closeModal = document.querySelector(\".modal .close-icon\");\n if (modal && closeModal) {\n const url = new URL(window.location.href);\n const modalResponse = url.searchParams.get(\"contact\") === \"1\";\n const errorResponse = url.searchParams.get(\"contact\") === \"0\";\n if (modalResponse || errorResponse) {\n modal.classList.remove('not-visible');\n if (modalResponse) {\n modal.classList.add('success');\n }\n if (errorResponse) {\n modal.classList.add('error');\n }\n }\n closeModal.addEventListener('click', () => {\n modal.classList.add('not-visible');\n });\n }\n};\n","const isRecaptchaEnabled = true;\nconst initRecaptcha = () => {\n if (isRecaptchaEnabled) {\n const script = document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = `https://www.google.com/recaptcha/api.js`;\n document.head.appendChild(script);\n contactForms && contactForms.length > 0 && contactForms.forEach((form, i) => {\n form.setAttribute(\"g-recaptcha-index\", i.toString());\n return true;\n });\n }\n return false;\n};\nconst submitAfterCaptcha = (token) => {\n const formToSubmit = document.querySelector(`form[data-active-form='true']`);\n console.log(token);\n console.log(formToSubmit);\n formToSubmit.submit();\n};\n","const initVideo = () => {\n const video = document.querySelector(\"[data-video]\");\n if (video) {\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://player.vimeo.com/api/player.js`;\n document.head.appendChild(script);\n }\n};\n","const initVideoCardComponent = () => {\n const videosArray = document.querySelectorAll(\"[data-iframe-to-create-src]\");\n if (videosArray && videosArray.length > 0) {\n videosArray.forEach((video) => {\n video.addEventListener(\"click\", () => {\n const videoId = video.getAttribute(\"data-iframe-to-create-src\");\n if (videoId) {\n //create iframe\n const iframe = document.createElement('iframe');\n // assign url\n iframe.setAttribute('src', `https://www.youtube.com/embed/${videoId}`);\n //set various useful attributes\n iframe.frameBorder = \"0\";\n iframe.allowFullscreen = true;\n iframe.allow = \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\";\n iframe.width = (window.innerWidth - 100).toString();\n iframe.height = (window.innerHeight - 100).toString();\n //create iframe container\n const iframeContainer = document.createElement('div');\n //add class\n iframeContainer.classList.add(\"iframe-container\", \"active\");\n //add title\n iframeContainer.title = \"Click to exit\";\n //append iframe to its container\n iframeContainer.appendChild(iframe);\n //create close icon\n const closeIcon = document.createElement('div');\n closeIcon.innerHTML = \"x\";\n closeIcon.classList.add(\"close-icon\");\n //event listener: destroy iframe if user clicks \"close icon\"\n closeIcon.addEventListener(\"click\", () => {\n iframeContainer.classList.remove(\"active\");\n iframeContainer.parentNode.querySelector(\"iframe-container\").remove();\n });\n //append close icon to its container\n iframeContainer.appendChild(closeIcon);\n //insert iframecontainer to body\n document.body.appendChild(iframeContainer);\n //scroll to iframe\n iframe.scrollIntoView({ \"block\": \"center\", \"inline\": \"center\" });\n }\n });\n });\n }\n};\n"]}