{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./assets/scripts/theme/block-tab-system.js","webpack:///./assets/scripts/theme/o-slider-container.js","webpack:///./assets/scripts/theme.js","webpack:///./assets/scripts/theme/gtm-delay-load.js","webpack:///./assets/scripts/theme/replace-svg-img.js","webpack:///./assets/scripts/theme/reveal-form-elements.js","webpack:///./assets/scripts/theme/block-tab-accordion.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///./node_modules/flickity/js/imagesloaded.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/core.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity-fade/flickity-fade.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity-as-nav-for/as-nav-for.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/imagesloaded/imagesloaded.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","factory","Unidragger","EvEmitter","this","startEvent","activeEvents","proto","handleEvent","event","method","type","PointerEvent","touchActionValue","bindHandles","_bindHandles","unbindHandles","bindMethod","touchAction","handles","forEach","handle","style","bindActivePointerEvents","eventName","addEventListener","unbindActivePointerEvents","removeEventListener","withPointer","methodName","pointerId","pointerIdentifier","withTouch","touch","changedTouch","changedTouches","identifier","onmousedown","pointerDown","ontouchstart","onpointerdown","cursorNodes","clickTypes","pointer","isCursorNode","includes","target","nodeName","isClickType","isOkayElement","isPointerDown","button","undefined","pointerDownPointer","pageX","pageY","emitEvent","onmousemove","pointerMove","onpointermove","ontouchmove","moveVector","x","y","isDragging","hasDragStarted","dragStart","dragMove","Math","abs","isPreventingClicks","onmouseup","pointerUp","onpointerup","ontouchend","pointerDone","dragEnd","staticClick","setTimeout","onpointercancel","ontouchcancel","pointerCancel","onclick","preventDefault","isMouseup","isIgnoringMouseUp","Flickity","animatePrototype","fizzyUIUtils","utils","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","isWrapping","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","options","rightToLeft","translateX","getPositionValue","slider","transform","firstSlide","slides","positionX","progress","slidesWidth","dispatchEvent","cells","length","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cell","cellShift","_wrapShiftCell","outerWidth","_renderCellPosition","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","PageDots","holder","document","createElement","className","dots","setDots","slidesLength","delta","addDots","removeDots","count","newDots","Array","fill","map","item","dot","setAttribute","num","textContent","append","concat","splice","remove","updateSelected","index","selectedDot","classList","removeAttribute","add","assign","defaults","pageDots","handlePageDotsClick","onPageDotsClick","on","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","focusableElems","push","element","indexOf","uiChange","select","removeFrom","global","listener","events","_events","listeners","once","onceEvents","_onceEvents","off","args","slice","onceListeners","apply","allOff","init","jQuery","not","each","attr","$container","prepend","find","nav_tab","html","nav_tab_link","str","replace","toLowerCase","from","RegExp","charAt","string_to_slug","hasClass","click","e","tab","removeClass","addClass","doc_hash","location","hash","this_tab","tab_parent","parents","tab_offset","offset","history","scrollRestoration","delay","scrollTop","top","require","co","ca","cr","documentElement","body","initGTMOnEvent","initGTM","currentTarget","gtmDidInit","script","async","onload","dataLayer","Date","getTime","src","head","appendChild","gtmDelay","$img","imgURL","imgID","data","$svg","removeAttr","replaceWith","change","val","slideDown","blockTabSystem","css","next","slideUp","toggleClass","slideToggle","querySelectorAll","stopPropagation","contains","simple","complex","carousel","resource","autoPlay","prevNextButtons","wrapAround","cellAlign","pauseAutoPlayOnHover","resize","fade","_createResizeClass","flickityRegister","$","console","info","stuff","fn","fancybox","div","$pressed","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","iframe","tpl","scrolling","video","format","autoStart","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","hideScrollbar","autoFocus","backFocus","trapFocus","fullScreen","vertical","momentum","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","$W","$D","called","requestAFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","transitionEnd","el","transitions","transition","OTransition","MozTransition","WebkitTransition","forceRedraw","$el","offsetHeight","mergeOpts","opts1","opts2","rez","extend","isArray","FancyBox","content","opts","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","addContent","buttonStr","self","firstItemOpts","getInstance","scrollHeight","innerHeight","clientWidth","translate","appendTo","$refs","container","trigger","activate","jumpTo","obj","arr","match","items","makeArray","$item","found","srcParts","$orig","contentType","inArray","$thumb","$trigger","thumb","caption","split","filter","keys","updateControls","Thumbs","isActive","focus","addEvents","removeEvents","previous","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","is","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","hideControls","clearInterval","duration","pos","isMoved","slidePos","stagePos","prop","diff","groupLen","isClosing","createSlide","forcedDuration","isNumeric","$slide","loadSlide","getTranslate","slide","stop","isComplete","left","width","join","leftPos","setTranslate","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","imgPos","posX","posY","scaleX","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","minRatio","aspectRatio","parseFloat","min","floor","ratio","adjustCaption","adjustLayout","navigation","clientHeight","centerSlide","siblings","parent","children","nextWidth","nextHeight","canPan","isZoomable","Guestures","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","url","success","textStatus","error","jqXHR","one","abort","ghost","$image","checkSrcset","onerror","$ghost","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","ret","trim","substring","postfix","sort","a","b","j","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","max","hideLoading","readyState","imgWidth","imgHeight","$iframe","isReady","$body","frameWidth","frameHeight","contents","ignore","ceil","outerHeight","unbind","empty","isRevealed","$placeholder","insertAfter","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","$clone","preventOverlap","$caption","captionH","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","thumbPos","btw","brw","bbw","blw","elem","elemCenter","ownerDocument","getBoundingClientRect","offsetWidth","elementFromPoint","inViewport","Document","exitFullscreen","webkitExitFullscreen","scrollLeft","prev","focusableItems","focusedItemIndex","focusableStr","activeElement","instance","isVisible","domRect","done","cleanUp","$focus","scrollX","scrollY","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","open","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","to","leaveAnimationName","propertyName","callCallback","selector","_run","$target","isDefaultPrevented","youtube","matcher","params","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","gmap_search","param","urlParams","paramObj","provider","providerName","providerOpts","decodeURIComponent","p1","origSrc","contentSource","VideoAPILoader","class","loading","loaded","load","vendor","_this","onYouTubeIframeAPIReady","YT","Player","onStateChange","Vimeo","getPointerXY","result","touches","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","atts","attributes","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","isTouchDevice","realPoints","startPoints","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","newPoints","onSwipe","onPan","onZoom","angle","swiping","sliderLastPos","atan2","PI","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","velocityX","velocityY","endPanning","endZooming","endSwiping","len","canAdvance","reset","where","tapX","tapY","process","prefix","action","addBack","timer","$button","toggle","$progress","inner","set","clear","keypress","hidden","fnMap","FullScreen","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","CLASS","FancyThumbs","$grid","$list","list","innerHTML","share","currentHash","string","entityMap","encodeURIComponent","String","text","shareInstance","shareCurrent","href","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","title","pathname","search","hasCreatedHistory","back","replaceState","fb","reverse","tmp","prevTime","currTime","deltaY","deltaX","wheelDelta","detail","imagesLoaded","getParentCell","cellSizeChange","freeScroll","positionSliderAtSelected","getSize","getStyleSize","isNaN","measurements","querySelector","nodeType","display","measurement","getZeroSize","isBorderBox","boxSizing","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","styleWidth","styleHeight","draggable","dragThreshold","getScrollPosition","pageXOffset","pageYOffset","drag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handlePointerDown","handlePointerUp","handlePointerDone","handleDragStart","handleDragMove","handleDragEnd","handleStaticClick","viewport","isTouchStart","isTouchPointer","pointerType","isFocusNode","matches","blur","pointerDownScroll","isTouchScrolling","dragStartPosition","startAnimation","previousDragX","direction","originBound","endBound","getLastSlide","dragMoveTime","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","isDragSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","dist","minDist","isWrapAround","slideIndex","scroll","scrollMoveX","scrollMoveY","ary","parentNode","elems","HTMLElement","reduce","ffElems","childElems","_class","threshold","timeoutName","onDocReady","$1","$2","htmlInit","WidgetClass","namespace","docReady","dataAttr","toDashed","dataAttrElems","getAttribute","JSON","parse","_Flickity","Cell","Slide","GUID","instances","queryElement","getQueryElement","flickityGUID","option","$element","constructor","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","setGallerySize","watchCSS","guid","beginMargin","endMargin","_createSlider","cellElems","_filterFindCellElements","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_updateWrapShiftCells","cellElem","getLastCell","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","updateSlides","_containSlides","renderX","positionValue","canCellFit","_getCanCellFit","addCell","slideWidth","firstMargin","updateTarget","updateSelectedSlide","groupCells","number","percent","percentMatch","groupWidth","_init","reposition","setCellAlign","cellAlignShorthands","center","right","shorthand","adaptiveHeight","getIsWrapping","_unshiftCells","beforeGapX","lastIndex","_getGapCells","afterGapX","gapWidth","gapX","cellIndex","contentWidth","beginBound","emitArgs","$event","jQEvent","Event","unidraggerEvents","_emitEvent","clickedCell","isWrap","isInstant","_wrapSelect","wrapIndex","backWrapDelta","forewardWrapDelta","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","cellSlide","getCell","getCells","closest","getAdjacentCellElements","adjCount","onresize","debounceMethod","deactivate","onkeydown","handler","keyboardHandlers","some","ArrowLeft","ArrowRight","preventScroll","removeData","jQueryBridget","setJQuery","jq","lastCell","lastMargin","renderFadePosition","setOpacity","alpha","fadeIndex","prevSelectedIndex","onSelectFade","onDragEndFade","onSettleFade","onActivateFade","onDeactivateFade","slideTargetX","firstCellX","targetX","didDragEnd","fadeSlides","indexes","getFadeIndexes","fadeSlideA","fadeSlideB","wrapDifference","fadeHideIndex","getFadeDragWrapIndexes","getFadeDragLimitIndexes","distances","absDistances","closestIndex","dragIndex","diffPlus","diffMinus","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","handleLazyLoadComplete","onLazyLoadComplete","getCellLazyImages","cellAttr","cellSrcAttr","cellSrcsetAttr","LazyLoader","onComplete","flat","asNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","companionCells","firstIndex","selectIndex","removeNavSelectedElements","navSelectedElements","changeNavSelectedClass","navElem","cellElement","onTick","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","tick","time","timeout","pause","unpause","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","elementNodeTypes","addImage","background","addElementBackgroundImages","childImgs","child","reURL","LoadingImage","Background","Image","exec","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","onProgress","message","notify","debug","log","jqMethod","getIsImageComplete","confirm","proxyImage","crossOrigin","currentSrc","unbindEvents","makeJQueryPlugin","promise","insert","fragment","createDocumentFragment","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","minCellIndex","changedCellIndex","prevSelectedElem","svgURI","PrevNextButton","arrowShape","isPrevious","isLeft","label","disable","svg","createSVG","createElementNS","path","pathMovements","shape","x0","x1","x2","x3","y1","y2","getArrowMovements","enable","prevDirection","nextDirection","prevButton","nextButton","handlePrevButtonClick","handleNextButtonClick","activatePrevNextButtons","updatePrevNextButtons","updatePrevNextButton","disabledIndex","isEnabled","deactivatePrevNextButtons"],"mappings":"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","file":"/scripts/theme.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/*!\n * Unidragger v3.0.1\n * Draggable base class\n * MIT license\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.EvEmitter,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( window, EvEmitter ) {\n\nfunction Unidragger() {}\n\n// inherit EvEmitter\nlet proto = Unidragger.prototype = Object.create( EvEmitter.prototype );\n\n// ----- bind start ----- //\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nlet startEvent, activeEvents;\nif ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n activeEvents = [ 'touchmove', 'touchend', 'touchcancel' ];\n} else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n activeEvents = [ 'pointermove', 'pointerup', 'pointercancel' ];\n} else {\n // mouse events\n startEvent = 'mousedown';\n activeEvents = [ 'mousemove', 'mouseup' ];\n}\n\n// prototype so it can be overwriteable by Flickity\nproto.touchActionValue = 'none';\n\nproto.bindHandles = function() {\n this._bindHandles( 'addEventListener', this.touchActionValue );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( 'removeEventListener', '' );\n};\n\n/**\n * Add or remove start event\n * @param {String} bindMethod - addEventListener or removeEventListener\n * @param {String} touchAction - value for touch-action CSS property\n */\nproto._bindHandles = function( bindMethod, touchAction ) {\n this.handles.forEach( ( handle ) => {\n handle[ bindMethod ]( startEvent, this );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) handle.style.touchAction = touchAction;\n } );\n};\n\nproto.bindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.addEventListener( eventName, this );\n } );\n};\n\nproto.unbindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.removeEventListener( eventName, this );\n } );\n};\n\n// ----- event handler helpers ----- //\n\n// trigger method with matching pointer\nproto.withPointer = function( methodName, event ) {\n if ( event.pointerId === this.pointerIdentifier ) {\n this[ methodName ]( event, event );\n }\n};\n\n// trigger method with matching touch\nproto.withTouch = function( methodName, event ) {\n let touch;\n for ( let changedTouch of event.changedTouches ) {\n if ( changedTouch.identifier === this.pointerIdentifier ) {\n touch = changedTouch;\n }\n }\n if ( touch ) this[ methodName ]( event, touch );\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n this.pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this.pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this.pointerDown( event, event );\n};\n\n// nodes that have text fields\nconst cursorNodes = [ 'TEXTAREA', 'INPUT', 'SELECT', 'OPTION' ];\n// input types that do not have text fields\nconst clickTypes = [ 'radio', 'checkbox', 'button', 'submit', 'image', 'file' ];\n\n/**\n * any time you set `event, pointer` it refers to:\n * @param {Event} event\n * @param {Event | Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n // dismiss multi-touch taps, right clicks, and clicks on text fields\n let isCursorNode = cursorNodes.includes( event.target.nodeName );\n let isClickType = clickTypes.includes( event.target.type );\n let isOkayElement = !isCursorNode || isClickType;\n let isOkay = !this.isPointerDown && !event.button && isOkayElement;\n if ( !isOkay ) return;\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n // track position for move\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n this.bindActivePointerEvents();\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// ----- move ----- //\n\nproto.onmousemove = function( event ) {\n this.pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n this.withPointer( 'pointerMove', event );\n};\n\nproto.ontouchmove = function( event ) {\n this.withTouch( 'pointerMove', event );\n};\n\nproto.pointerMove = function( event, pointer ) {\n let moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY,\n };\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n // start drag if pointer has moved far enough to start drag\n let isDragStarting = !this.isDragging && this.hasDragStarted( moveVector );\n if ( isDragStarting ) this.dragStart( event, pointer );\n if ( this.isDragging ) this.dragMove( event, pointer, moveVector );\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- drag ----- //\n\nproto.dragStart = function( event, pointer ) {\n this.isDragging = true;\n this.isPreventingClicks = true; // set flag to prevent clicks\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// ----- end ----- //\n\nproto.onmouseup = function( event ) {\n this.pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n this.withPointer( 'pointerUp', event );\n};\n\nproto.ontouchend = function( event ) {\n this.withTouch( 'pointerUp', event );\n};\n\nproto.pointerUp = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n\n if ( this.isDragging ) {\n this.dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this.staticClick( event, pointer );\n }\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.isDragging = false; // reset flag\n // re-enable clicking async\n setTimeout( () => delete this.isPreventingClicks );\n\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// triggered on pointer up & pointer cancel\nproto.pointerDone = function() {\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n this.unbindActivePointerEvents();\n this.emitEvent('pointerDone');\n};\n\n// ----- cancel ----- //\n\nproto.onpointercancel = function( event ) {\n this.withPointer( 'pointerCancel', event );\n};\n\nproto.ontouchcancel = function( event ) {\n this.withTouch( 'pointerCancel', event );\n};\n\nproto.pointerCancel = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- click ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) event.preventDefault();\n};\n\n// triggered after pointer down & up with no/tiny movement\nproto.staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n let isMouseup = event.type === 'mouseup';\n if ( isMouseup && this.isIgnoringMouseUp ) return;\n\n this.emitEvent( 'staticClick', [ event, pointer ] );\n\n // set flag for emulated clicks 300ms after touchend\n if ( isMouseup ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 400ms\n setTimeout( () => {\n delete this.isIgnoringMouseUp;\n }, 400 );\n }\n};\n\n// ----- ----- //\n\nreturn Unidragger;\n\n} ) );\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('fizzy-ui-utils') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory( window.fizzyUIUtils );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( utils ) {\n\n// -------------------------- animate -------------------------- //\n\nlet proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) return;\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n let previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) requestAnimationFrame( () => this.animate() );\n};\n\nproto.positionSlider = function() {\n let x = this.x;\n // wrap position around\n if ( this.isWrapping ) {\n x = utils.modulo( x, this.slideableWidth ) - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n if ( this.options.rightToLeft ) x = -x;\n let translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n `translate3d(${translateX},0,0)` : `translateX(${translateX})`;\n};\n\nproto.dispatchScrollEvent = function() {\n let firstSlide = this.slides[0];\n if ( !firstSlide ) return;\n\n let positionX = -this.x - firstSlide.target;\n let progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) return;\n\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n let isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) === Math.round( previousX * 100 );\n if ( isResting ) this.restingFrames++;\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n let beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n let afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n cells.forEach( ( cell ) => {\n let cellShift = gap > 0 ? shift : 0;\n this._wrapShiftCell( cell, cellShift );\n gap -= cell.size.outerWidth;\n } );\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) return;\n\n cells.forEach( ( cell ) => this._wrapShiftCell( cell, 0 ) );\n};\n\n// @param {Integer} shift - 0, 1, or -1\nproto._wrapShiftCell = function( cell, shift ) {\n this._renderCellPosition( cell, cell.x + this.slideableWidth * shift );\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) return;\n\n // change the position to drag position by applying force\n let dragVelocity = this.dragX - this.x;\n let dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n let dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) return;\n\n let distance = this.selectedSlide.target * -1 - this.x;\n let force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\nfunction PageDots() {\n // create holder element\n this.holder = document.createElement('div');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n}\n\nPageDots.prototype.setDots = function( slidesLength ) {\n // get difference between number of slides and number of dots\n let delta = slidesLength - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n let newDots = new Array( count ).fill()\n .map( ( item, i ) => {\n let dot = document.createElement('button');\n dot.setAttribute( 'type', 'button' );\n let num = i + 1 + this.dots.length;\n dot.className = 'flickity-page-dot';\n dot.textContent = `View slide ${num}`;\n return dot;\n } );\n\n this.holder.append( ...newDots );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n let removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( ( dot ) => dot.remove() );\n};\n\nPageDots.prototype.updateSelected = function( index ) {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.classList.remove('is-selected');\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) return;\n\n this.selectedDot = this.dots[ index ];\n this.selectedDot.classList.add('is-selected');\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.create.pageDots = function() {\n if ( !this.options.pageDots ) return;\n\n this.pageDots = new PageDots();\n this.handlePageDotsClick = this.onPageDotsClick.bind( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePageDots = function() {\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n this.pageDots.holder.addEventListener( 'click', this.handlePageDotsClick );\n this.element.append( this.pageDots.holder );\n};\n\nproto.onPageDotsClick = function( event ) {\n let index = this.pageDots.dots.indexOf( event.target );\n if ( index === -1 ) return; // only dot clicks\n\n this.uiChange();\n this.select( index );\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected( this.selectedIndex );\n};\n\nproto.updatePageDots = function() {\n this.pageDots.dots.forEach( ( dot ) => {\n utils.removeFrom( this.focusableElems, dot );\n } );\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.holder.remove();\n this.pageDots.holder.removeEventListener( 'click', this.handlePageDotsClick );\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","function init() {\r\n\r\n function string_to_slug (str) {\r\n str = str.replace(/^\\s+|\\s+$/g, ''); // trim\r\n str = str.toLowerCase();\r\n\r\n // remove accents, swap ñ for n, etc\r\n var from = \"àáäâèéëêìíïîòóöôùúüûñç·/_,:;\";\r\n var to = \"aaaaeeeeiiiioooouuuunc------\";\r\n for (var i=0, l=from.length ; i');\r\n\r\n $container.find('.o-tabs-container__tab').each(function(){\r\n let nav_tab = jQuery(this).find('.o-tabs-container__tab__nav').html();\r\n let nav_tab_link = string_to_slug(nav_tab);\r\n\r\n jQuery(this).attr('id', nav_tab_link);\r\n\r\n if(jQuery(this).hasClass('active')) {\r\n $container.find('.o-tabs-container__nav').prepend('' + nav_tab + '');\r\n }\r\n else {\r\n $container.find('.o-tabs-container__nav').prepend('' + nav_tab + '');\r\n }\r\n });\r\n\r\n $container.find('.o-tabs-container__nav__item').click(function(e){\r\n e.preventDefault();\r\n\r\n let tab = jQuery(this).attr('href');\r\n\r\n $container.find('.o-tabs-container__nav__item').removeClass('active');\r\n $container.find('.o-tabs-container__tab').removeClass('active');\r\n jQuery(this).addClass('active');\r\n $container.find(tab).addClass('active');\r\n });\r\n });\r\n\r\n // if url contains hash, open that tab and scroll to the container\r\n let doc_hash = window.location.hash;\r\n\r\n if ( doc_hash !== undefined && doc_hash !== \"\" ) {\r\n\r\n jQuery('.o-tabs-container__nav__item').each(function() {\r\n\r\n let this_tab = jQuery(this).attr('href');\r\n\r\n if ( this_tab == doc_hash ) {\r\n\r\n let tab_parent = jQuery(this).parents('.o-tabs-container');\r\n\r\n tab_parent.find('.o-tabs-container__nav__item').removeClass('active');\r\n tab_parent.find('.o-tabs-container__tab').removeClass('active');\r\n jQuery(this).addClass('active');\r\n tab_parent.find(this_tab).addClass('active');\r\n\r\n let tab_offset = tab_parent.offset();\r\n\r\n if ('scrollRestoration' in history) { // prevent browser from scrolling to last known position on page\r\n history.scrollRestoration = 'manual';\r\n }\r\n\r\n jQuery('body, html').delay(600).animate({ // scroll to tab section\r\n scrollTop: tab_offset.top - 247\r\n }, 1000);\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport { init as default };\r\n","/**\r\n * Flickity Cards Carousel\r\n *\r\n * @author Dylan James Wagner\r\n */\r\nconst Flickity = require('flickity');\r\nrequire('flickity-fade');\r\nrequire('flickity-as-nav-for');\r\n\r\nconst s = {\r\n selector: '.o-slider-container.o-slider-container--simple > .wp-block-group__inner-container',\r\n};\r\nconst co = {\r\n selector: '.o-slider-container.o-slider-container--complex > .wp-block-group__inner-container',\r\n};\r\nconst ca = {\r\n selector: '.o-slider-container.o-slider-container--carousel > .wp-block-group__inner-container',\r\n};\r\nconst cr = {\r\n selector: '.o-slider-container.o-slider-container--resource > .wp-block-group__inner-container',\r\n};\r\n\r\nfunction init() {\r\n const simple = document.querySelectorAll(s.selector);\r\n const complex = document.querySelectorAll(co.selector);\r\n const carousel = document.querySelectorAll(ca.selector);\r\n const resource = document.querySelectorAll(cr.selector);\r\n\r\n if (simple.length) {\r\n\r\n for (let i = 0; i < simple.length; i++) {\r\n\r\n var flkty = new Flickity(simple[i], {\r\n autoPlay: 8000, // Default false, true = 3s\r\n prevNextButtons: false, // Default true\r\n percentPosition: false,\r\n wrapAround: true, // Default false\r\n cellAlign: 'left', // Default center\r\n pauseAutoPlayOnHover: false,\r\n });\r\n\r\n flkty.resize(); /** Sarfari height */\r\n }\r\n }\r\n\r\n if (complex.length) {\r\n\r\n for (let i = 0; i < complex.length; i++) {\r\n\r\n var flkty = new Flickity(complex[i], {\r\n autoPlay: 8000, // Default false, true = 3s\r\n // percentPosition: false,\r\n wrapAround: true, // Default false\r\n cellAlign: 'left', // Default center\r\n pageDots: false,\r\n fade: true,\r\n // adaptiveHeight: true,\r\n });\r\n\r\n flkty.resize(); /** Sarfari height */\r\n }\r\n }\r\n\r\n if (carousel.length) {\r\n\r\n for (let i = 0; i < carousel.length; i++) {\r\n\r\n var flkty = new Flickity(carousel[i], {\r\n autoPlay: 8000, // Default false, true = 3s\r\n wrapAround: true, // Default false\r\n cellAlign: 'left', // Default center\r\n pauseAutoPlayOnHover: false,\r\n });\r\n\r\n flkty.resize(); /** Sarfari height */\r\n }\r\n }\r\n\r\n if (resource.length) {\r\n\r\n for (let i = 0; i < resource.length; i++) {\r\n\r\n var flkty = new Flickity(resource[i], {\r\n autoPlay: 4000, // Default false, true = 3s\r\n wrapAround: true, // Default false\r\n cellAlign: 'left', // Default center\r\n pageDots: false,\r\n });\r\n\r\n flkty.resize(); /** Sarfari height */\r\n }\r\n }\r\n\r\n if (simple.length || complex.length || carousel.length || resource.length) {\r\n Flickity.prototype._createResizeClass = function() {\r\n this.element.classList.add('flickity-resize');\r\n };\r\n\r\n var resize = Flickity.prototype.resize;\r\n Flickity.prototype.resize = function() {\r\n this.element.classList.remove('flickity-resize');\r\n resize.call( this );\r\n this.element.classList.add('flickity-resize');\r\n };\r\n }\r\n\r\n // var pauseButton = document.querySelector('.a-pause-button');\r\n\r\n // flkty.on( 'change', function() {\r\n // if(flkty.player.state === \"stopped\") {\r\n // pauseButton.innerHTML = '';\r\n // }\r\n // });\r\n\r\n // pauseButton.addEventListener( 'click', function() {\r\n // if (flkty.player.state === \"playing\") {\r\n // flkty.pausePlayer();\r\n // pauseButton.innerHTML = '';\r\n // }\r\n // else {\r\n // if (flkty.player.state === \"stopped\") {\r\n // flkty.playPlayer();\r\n // }\r\n // else {\r\n // flkty.unpausePlayer();\r\n // }\r\n // pauseButton.innerHTML = '';\r\n // }\r\n // });\r\n}\r\n\r\n export {init as default};\r\n","// import drawerMenu from './theme/mobile-menu-drawer';\r\nimport '@fancyapps/fancybox';\r\nimport svgInline from './theme/replace-svg-img';\r\nimport revealFormElements from './theme/reveal-form-elements';\r\nimport blockTabSystem from './theme/block-tab-system';\r\n\r\nimport flickityRegister from './theme/o-slider-container';\r\nimport blockTabAccordion from './theme/block-tab-accordion';\r\n// import searchFilter from './theme/search-filter';\r\nimport gtmDelay from './theme/gtm-delay-load';\r\n// import 'stacktable.js';\r\n// import tableMobileBreakdown from './theme/table-mobile-breakdown';\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n /** Address HTML & Body no-js Class */\r\n (function () {\r\n /** Remove .no-js */\r\n // document.documentElement.classList.remove('no-js');\r\n // document.body.classList.remove('no-js');\r\n\r\n /** Replace .no-js with .js */\r\n document.documentElement.className =\r\n document.documentElement.className.replace('no-js', 'js');\r\n document.body.className = document.body.className.replace(\r\n 'no-js',\r\n 'js'\r\n );\r\n })();\r\n\r\n /** Call */\r\n gtmDelay();\r\n svgInline();\r\n revealFormElements();\r\n blockTabSystem();\r\n blockTabAccordion();\r\n flickityRegister();\r\n // searchFilter();\r\n // tableMobileBreakdown();\r\n});\r\n","function init() {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n /** init gtm after 3500 seconds - this could be adjusted */\r\n setTimeout(initGTM, 3500);\r\n });\r\n document.addEventListener('scroll', initGTMOnEvent);\r\n document.addEventListener('mousemove', initGTMOnEvent);\r\n document.addEventListener('touchstart', initGTMOnEvent);\r\n function initGTMOnEvent(event) {\r\n initGTM();\r\n event.currentTarget.removeEventListener(event.type, initGTMOnEvent); // remove the event listener that got triggered\r\n }\r\n function initGTM() {\r\n if (window.gtmDidInit) {\r\n return false;\r\n }\r\n window.gtmDidInit = true; // flag to ensure script does not get added to DOM more than once.\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n // ensure PageViews is always tracked (on script load)\r\n script.onload = () => {\r\n dataLayer.push({ event: 'gtm.js', 'gtm.start': new Date().getTime(), 'gtm.uniqueEventId': 0 });\r\n };\r\n script.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-M6FBGFG';\r\n document.head.appendChild(script);\r\n }\r\n }\r\n\r\n export { init as default };\r\n","function init() {\r\n jQuery('.svg-inline').each(function() {\r\n var $img = jQuery(this),\r\n imgURL = $img.attr('src'),\r\n imgID = $img.attr('id');\r\n\r\n jQuery.get(imgURL, function(data) {\r\n // Get the SVG tag, ignore the rest\r\n var $svg = jQuery(data).find('svg');\r\n // Add replaced image's ID to the new SVG\r\n if(typeof imgID !== 'undefined') {\r\n $svg = $svg.attr('id', imgID);\r\n }\r\n\r\n $svg = $svg.removeAttr('xmlns:a');\r\n $img.replaceWith($svg);\r\n }, 'xml');\r\n });\r\n}\r\n\r\nexport { init as default };\r\n","function init() {\r\n window.onload = function(){\r\n jQuery('#email-be722408-39a4-4537-9c8b-7a700289efad').change(function(){\r\n if(jQuery(this).val()) {\r\n jQuery('.hs_firstname').slideDown();\r\n jQuery('.hs_lastname').slideDown();\r\n jQuery('.hs_company').slideDown();\r\n jQuery('.hs_phone').slideDown();\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport { init as default };\r\n","function init() {\r\n // Any tabs container with 'o-accordion-container' added to its class, will convert to accordion\r\n jQuery(function () { \r\n jQuery(\".o-accordion-container .o-tabs-container__tab__body\").css(\"display\", \"none\");\r\n \r\n jQuery(\".o-accordion-container .o-tabs-container__tab__nav\").click(function () {\r\n jQuery(\".open\").not(this).removeClass(\"open\").next().slideUp(300);\r\n jQuery(this).toggleClass(\"open\").next().slideToggle(300);\r\n });\r\n });\r\n\r\n\r\n // JavaScript to toggle arrow class when tab is clicked\r\n document.querySelectorAll('.o-accordion-container .o-tabs-container__tab__nav').forEach(function(tab) {\r\n tab.addEventListener('click', function(event) {\r\n // Prevent propagation of click event to parent elements\r\n event.stopPropagation();\r\n \r\n // Check if this tab already has the arrow-down class\r\n if (this.classList.contains('arrow-down')) {\r\n // If it does, remove the arrow-down class and return (exit the function)\r\n this.classList.remove('arrow-down');\r\n return;\r\n }\r\n \r\n // Remove arrow-down class from all tabs\r\n document.querySelectorAll('.o-accordion-container .o-tabs-container__tab__nav').forEach(function(tab) {\r\n tab.classList.remove('arrow-down');\r\n });\r\n // Add arrow-down class to the clicked tab\r\n this.classList.add('arrow-down');\r\n });\r\n });\r\n\r\n\r\n\r\n\r\n}\r\n\r\nexport { init as default };","/*!\n * Flickity v3.0.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2022 Metafizzy\n */\n\nif ( typeof module == 'object' && module.exports ) {\n const Flickity = require('./core');\n require('./drag');\n require('./prev-next-button');\n require('./page-dots');\n require('./player');\n require('./add-remove-cell');\n require('./lazyload');\n require('./imagesloaded');\n\n module.exports = Flickity;\n}\n","// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
' +\r\n '
' +\r\n '
' +\r\n '
 / 
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
',\r\n\r\n // Error message template\r\n errorTpl: '

{{ERROR}}

',\r\n\r\n btnTpl: {\r\n download: '' +\r\n '' +\r\n \"\",\r\n\r\n zoom: '\",\r\n\r\n close: '\",\r\n\r\n // Arrows\r\n arrowLeft: '\",\r\n\r\n arrowRight: '\",\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn: '\"\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl: \"body\",\r\n\r\n // Hide browser vertical scrollbars; use at your own risk\r\n hideScrollbar: true,\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus: true,\r\n\r\n // Put focus back to active element after closing\r\n backFocus: true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus: true,\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen: {\r\n autoStart: false\r\n },\r\n\r\n // Set `touch: false` to disable panning/swiping\r\n touch: {\r\n vertical: true, // Allow to drag content vertically\r\n momentum: true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash: null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media: {},\r\n\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000\r\n },\r\n\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n },\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel: \"auto\",\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit: $.noop, // When instance has been initialized\r\n\r\n beforeLoad: $.noop, // Before the content of a slide is being loaded\r\n afterLoad: $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow: $.noop, // Before open animation starts\r\n afterShow: $.noop, // When content is done loading and animating\r\n\r\n beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose: $.noop, // After instance has been closed\r\n\r\n onActivate: $.noop, // When instance is brought to front\r\n onDeactivate: $.noop, // When other instance has been activated\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide: \"close\",\r\n\r\n // Clicked on the background (backdrop) element;\r\n // if you have not changed the layout, then most likely you need to use `clickSlide` option\r\n clickOutside: \"close\",\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false,\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile: {\r\n preventCaptionOverlap: false,\r\n idleTime: false,\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : false;\r\n },\r\n clickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : \"close\";\r\n },\r\n dblclickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n dblclickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n }\r\n },\r\n\r\n // Internationalization\r\n // ====================\r\n\r\n lang: \"en\",\r\n i18n: {\r\n en: {\r\n CLOSE: \"Close\",\r\n NEXT: \"Next\",\r\n PREV: \"Previous\",\r\n ERROR: \"The requested content cannot be loaded.
Please try again later.\",\r\n PLAY_START: \"Start slideshow\",\r\n PLAY_STOP: \"Pause slideshow\",\r\n FULL_SCREEN: \"Full screen\",\r\n THUMBS: \"Thumbnails\",\r\n DOWNLOAD: \"Download\",\r\n SHARE: \"Share\",\r\n ZOOM: \"Zoom\"\r\n },\r\n de: {\r\n CLOSE: \"Schließen\",\r\n NEXT: \"Weiter\",\r\n PREV: \"Zurück\",\r\n ERROR: \"Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.\",\r\n PLAY_START: \"Diaschau starten\",\r\n PLAY_STOP: \"Diaschau beenden\",\r\n FULL_SCREEN: \"Vollbild\",\r\n THUMBS: \"Vorschaubilder\",\r\n DOWNLOAD: \"Herunterladen\",\r\n SHARE: \"Teilen\",\r\n ZOOM: \"Vergrößern\"\r\n }\r\n }\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n var isQuery = function (obj) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n var transitionEnd = (function () {\r\n var el = document.createElement(\"fakeelement\"),\r\n t;\r\n\r\n var transitions = {\r\n transition: \"transitionend\",\r\n OTransition: \"oTransitionEnd\",\r\n MozTransition: \"transitionend\",\r\n WebkitTransition: \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return \"transitionend\";\r\n })();\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly\r\n // ================================================================================\r\n var forceRedraw = function ($el) {\r\n return $el && $el.length && $el[0].offsetHeight;\r\n };\r\n\r\n // Exclude array (`buttons`) options from deep merging\r\n // ===================================================\r\n var mergeOpts = function (opts1, opts2) {\r\n var rez = $.extend(true, {}, opts1, opts2);\r\n\r\n $.each(opts2, function (key, value) {\r\n if ($.isArray(value)) {\r\n rez[key] = value;\r\n }\r\n });\r\n\r\n return rez;\r\n };\r\n\r\n // How much of an element is visible in viewport\r\n // =============================================\r\n\r\n var inViewport = function (elem) {\r\n var elemCenter, rez;\r\n\r\n if (!elem || elem.ownerDocument !== document) {\r\n return false;\r\n }\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"none\");\r\n\r\n elemCenter = {\r\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\r\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\r\n };\r\n\r\n rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"\");\r\n\r\n return rez;\r\n };\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function (content, opts, index) {\r\n var self = this;\r\n\r\n self.opts = mergeOpts({\r\n index: index\r\n }, $.fancybox.defaults);\r\n\r\n if ($.isPlainObject(opts)) {\r\n self.opts = mergeOpts(self.opts, opts);\r\n }\r\n\r\n if ($.fancybox.isMobile) {\r\n self.opts = mergeOpts(self.opts, self.opts.mobile);\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n\r\n self.currIndex = parseInt(self.opts.index, 10) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = true;\r\n\r\n // All group items\r\n self.group = [];\r\n\r\n // Existing slides (for current, next and previous gallery items)\r\n self.slides = {};\r\n\r\n // Create group elements\r\n self.addContent(content);\r\n\r\n if (!self.group.length) {\r\n return;\r\n }\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n // Create DOM structure\r\n // ====================\r\n\r\n init: function () {\r\n var self = this,\r\n firstItem = self.group[self.currIndex],\r\n firstItemOpts = firstItem.opts,\r\n $container,\r\n buttonStr;\r\n\r\n if (firstItemOpts.closeExisting) {\r\n $.fancybox.close(true);\r\n }\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n $(\"body\").addClass(\"fancybox-active\");\r\n\r\n if (\r\n !$.fancybox.getInstance() &&\r\n firstItemOpts.hideScrollbar !== false &&\r\n !$.fancybox.isMobile &&\r\n document.body.scrollHeight > window.innerHeight\r\n ) {\r\n $(\"head\").append(\r\n '\"\r\n );\r\n\r\n $(\"body\").addClass(\"compensate-for-scrollbar\");\r\n }\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = \"\";\r\n\r\n $.each(firstItemOpts.buttons, function (index, value) {\r\n buttonStr += firstItemOpts.btnTpl[value] || \"\";\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate(\r\n self,\r\n firstItemOpts.baseTpl\r\n .replace(\"{{buttons}}\", buttonStr)\r\n .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\r\n )\r\n )\r\n .attr(\"id\", \"fancybox-container-\" + self.id)\r\n .addClass(firstItemOpts.baseClass)\r\n .data(\"FancyBox\", self)\r\n .appendTo(firstItemOpts.parentEl);\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container: $container\r\n };\r\n\r\n [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\r\n self.$refs[item] = $container.find(\".fancybox-\" + item);\r\n });\r\n\r\n self.trigger(\"onInit\");\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo(self.currIndex);\r\n },\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate: function (obj, str) {\r\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\r\n return arr[n] === undefined ? match : arr[n];\r\n });\r\n },\r\n\r\n // Populate current group with fresh content\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n addContent: function (content) {\r\n var self = this,\r\n items = $.makeArray(content),\r\n thumbs;\r\n\r\n $.each(items, function (i, item) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ($.isPlainObject(item)) {\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n } else if ($.type(item) === \"object\" && $(item).length) {\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $(item);\r\n\r\n // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\r\n opts = $item.data() || {};\r\n opts = $.extend(true, {}, opts, opts.options);\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = self.opts.src || opts.src || $item.attr(\"href\");\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if (!obj.type && !obj.src) {\r\n obj.type = \"inline\";\r\n obj.src = item;\r\n }\r\n } else {\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n obj = {\r\n type: \"html\",\r\n src: item + \"\"\r\n };\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend(true, {}, self.opts, opts);\r\n\r\n // Do not merge buttons array\r\n if ($.isArray(opts.buttons)) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n if ($.fancybox.isMobile && obj.opts.mobile) {\r\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\r\n }\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || \"\";\r\n\r\n if (!type && src) {\r\n if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\r\n type = \"video\";\r\n\r\n if (!obj.opts.video.format) {\r\n obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\r\n }\r\n } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\r\n type = \"image\";\r\n } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\r\n type = \"iframe\";\r\n obj = $.extend(true, obj, {\r\n contentType: \"pdf\",\r\n opts: {\r\n iframe: {\r\n preload: false\r\n }\r\n }\r\n });\r\n } else if (src.charAt(0) === \"#\") {\r\n type = \"inline\";\r\n }\r\n }\r\n\r\n if (type) {\r\n obj.type = type;\r\n } else {\r\n self.trigger(\"objectNeedsType\", obj);\r\n }\r\n\r\n if (!obj.contentType) {\r\n obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\r\n }\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n if (obj.opts.smallBtn == \"auto\") {\r\n obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\r\n }\r\n\r\n if (obj.opts.toolbar === \"auto\") {\r\n obj.opts.toolbar = !obj.opts.smallBtn;\r\n }\r\n\r\n // Find thumbnail image, check if exists and if is in the viewport\r\n obj.$thumb = obj.opts.$thumb || null;\r\n\r\n if (obj.opts.$trigger && obj.index === self.opts.index) {\r\n obj.$thumb = obj.opts.$trigger.find(\"img:first\");\r\n\r\n if (obj.$thumb.length) {\r\n obj.opts.$orig = obj.opts.$trigger;\r\n }\r\n }\r\n\r\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\r\n obj.$thumb = obj.opts.$orig.find(\"img:first\");\r\n }\r\n\r\n if (obj.$thumb && !obj.$thumb.length) {\r\n obj.$thumb = null;\r\n }\r\n\r\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\r\n if ($.type(obj.opts.caption) === \"function\") {\r\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n if ($.type(self.opts.caption) === \"function\") {\r\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if (!(obj.opts.caption instanceof $)) {\r\n obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if (obj.type === \"ajax\") {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if (srcParts.length > 1) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if (obj.opts.modal) {\r\n obj.opts = $.extend(true, obj.opts, {\r\n trapFocus: true,\r\n // Remove buttons\r\n infobar: 0,\r\n toolbar: 0,\r\n\r\n smallBtn: 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard: 0,\r\n\r\n // Disable some modules\r\n slideShow: 0,\r\n fullScreen: 0,\r\n thumbs: 0,\r\n touch: 0,\r\n\r\n // Disable click event handlers\r\n clickContent: false,\r\n clickSlide: false,\r\n clickOutside: false,\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false\r\n });\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push(obj);\r\n });\r\n\r\n // Update controls if gallery is already opened\r\n if (Object.keys(self.slides).length) {\r\n self.updateControls();\r\n\r\n // Update thumbnails, if needed\r\n thumbs = self.Thumbs;\r\n\r\n if (thumbs && thumbs.isActive) {\r\n thumbs.create();\r\n\r\n thumbs.focus();\r\n }\r\n }\r\n },\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detecting inactivity\r\n // ======================================\r\n\r\n addEvents: function () {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n // ==================================\r\n\r\n self.$refs.container\r\n .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n })\r\n .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n })\r\n .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n })\r\n .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\r\n // Click handler for zoom button\r\n self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\r\n });\r\n\r\n // Handle page scrolling and browser resizing\r\n // ==========================================\r\n\r\n $W.on(\"orientationchange.fb resize.fb\", function (e) {\r\n if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n self.update(e);\r\n });\r\n } else {\r\n if (self.current && self.current.type === \"iframe\") {\r\n self.$refs.stage.hide();\r\n }\r\n\r\n setTimeout(\r\n function () {\r\n self.$refs.stage.show();\r\n\r\n self.update(e);\r\n },\r\n $.fancybox.isMobile ? 600 : 250\r\n );\r\n }\r\n });\r\n\r\n $D.on(\"keydown.fb\", function (e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\r\n current = instance.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n // Trap keyboard focus inside of the modal\r\n // =======================================\r\n\r\n if (keycode == 9) {\r\n if (current.opts.trapFocus) {\r\n self.focus(e);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Enable keyboard navigation\r\n // ==========================\r\n\r\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if (keycode === 8 || keycode === 27) {\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if (keycode === 37 || keycode === 38) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if (keycode === 39 || keycode === 40) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger(\"afterKeydown\", e, keycode);\r\n });\r\n\r\n // Hide controls after some inactivity period\r\n if (self.group[self.currIndex].opts.idleTime) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on(\r\n \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\r\n function (e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if (self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n }\r\n );\r\n\r\n self.idleInterval = window.setInterval(function () {\r\n self.idleSecondsCounter++;\r\n\r\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n }, 1000);\r\n }\r\n },\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents: function () {\r\n var self = this;\r\n\r\n $W.off(\"orientationchange.fb resize.fb\");\r\n $D.off(\"keydown.fb .fb-idle\");\r\n\r\n this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\r\n\r\n if (self.idleInterval) {\r\n window.clearInterval(self.idleInterval);\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous: function (duration) {\r\n return this.jumpTo(this.currPos - 1, duration);\r\n },\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next: function (duration) {\r\n return this.jumpTo(this.currPos + 1, duration);\r\n },\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo: function (pos, duration) {\r\n var self = this,\r\n groupLen = self.group.length,\r\n firstRun,\r\n isMoved,\r\n loop,\r\n current,\r\n previous,\r\n slidePos,\r\n stagePos,\r\n prop,\r\n diff;\r\n\r\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\r\n return;\r\n }\r\n\r\n // Should loop?\r\n pos = parseInt(pos, 10);\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if (!loop && (pos < 0 || pos >= groupLen)) {\r\n return false;\r\n }\r\n\r\n // Check if opening for the first time; this helps to speed things up\r\n firstRun = self.firstRun = !Object.keys(self.slides).length;\r\n\r\n // Create slides\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n current = self.createSlide(pos);\r\n\r\n if (groupLen > 1) {\r\n if (loop || current.index < groupLen - 1) {\r\n self.createSlide(pos + 1);\r\n }\r\n\r\n if (loop || current.index > 0) {\r\n self.createSlide(pos - 1);\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger(\"beforeShow\", firstRun);\r\n\r\n self.updateControls();\r\n\r\n // Validate duration length\r\n current.forcedDuration = undefined;\r\n\r\n if ($.isNumeric(duration)) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n }\r\n\r\n duration = parseInt(duration, 10);\r\n\r\n // Check if user has swiped the slides or if still animating\r\n isMoved = self.isMoved(current);\r\n\r\n // Make sure current slide is visible\r\n current.$slide.addClass(\"fancybox-slide--current\");\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if (firstRun) {\r\n if (current.opts.animationEffect && duration) {\r\n self.$refs.container.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\r\n\r\n // Attempt to load content into slide\r\n // This will later call `afterLoad` -> `revealContent`\r\n self.loadSlide(current);\r\n\r\n self.preload(\"image\");\r\n\r\n return;\r\n }\r\n\r\n // Get actual slide/stage positions (before cleaning up)\r\n slidePos = $.fancybox.getTranslate(previous.$slide);\r\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\r\n\r\n // Clean up all slides\r\n $.each(self.slides, function (index, slide) {\r\n $.fancybox.stop(slide.$slide, true);\r\n });\r\n\r\n if (previous.pos !== current.pos) {\r\n previous.isComplete = false;\r\n }\r\n\r\n previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\r\n\r\n // If slides are out of place, then animate them to correct position\r\n if (isMoved) {\r\n // Calculate horizontal swipe distance\r\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\r\n\r\n $.each(self.slides, function (index, slide) {\r\n slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n // Make sure that each slide is in equal distance\r\n // This is mostly needed for freshly added slides, because they are not yet positioned\r\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: 0,\r\n left: leftPos - stagePos.left + diff\r\n });\r\n\r\n if (slide.pos !== current.pos) {\r\n slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\r\n }\r\n\r\n // Redraw to make sure that transition will start\r\n forceRedraw(slide.$slide);\r\n\r\n // Animate the slide\r\n $.fancybox.animate(\r\n slide.$slide, {\r\n top: 0,\r\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\r\n },\r\n duration,\r\n function () {\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\"\r\n })\r\n .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n }\r\n );\r\n });\r\n } else if (duration && current.opts.transitionEffect) {\r\n // Set transition effect for previously active slide\r\n prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\r\n\r\n previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\r\n\r\n $.fancybox.animate(\r\n previous.$slide,\r\n prop,\r\n duration,\r\n function () {\r\n previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (current.isLoaded) {\r\n self.revealContent(current);\r\n } else {\r\n self.loadSlide(current);\r\n }\r\n\r\n self.preload(\"image\");\r\n },\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide: function (pos) {\r\n var self = this,\r\n $slide,\r\n index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if (!self.slides[pos] && self.group[index]) {\r\n $slide = $('
').appendTo(self.$refs.stage);\r\n\r\n self.slides[pos] = $.extend(true, {}, self.group[index], {\r\n pos: pos,\r\n $slide: $slide,\r\n isLoaded: false\r\n });\r\n\r\n self.updateSlide(self.slides[pos]);\r\n }\r\n\r\n return self.slides[pos];\r\n },\r\n\r\n // Scale image to the actual size of the image;\r\n // x and y values should be relative to the slide\r\n // ==============================================\r\n\r\n scaleToActual: function (x, y, duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\r\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\r\n newImgWidth = current.width,\r\n newImgHeight = current.height,\r\n imgPos,\r\n posX,\r\n posY,\r\n scaleX,\r\n scaleY;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate($content);\r\n\r\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\r\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\r\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\r\n\r\n // Make sure image does not move away from edges\r\n if (newImgWidth > canvasWidth) {\r\n posX = imgPos.left * scaleX - (x * scaleX - x);\r\n\r\n if (posX > 0) {\r\n posX = 0;\r\n }\r\n\r\n if (posX < canvasWidth - newImgWidth) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if (newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - (y * scaleY - y);\r\n\r\n if (posY > 0) {\r\n posY = 0;\r\n }\r\n\r\n if (posY < canvasHeight - newImgHeight) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor(newImgWidth, newImgHeight);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: posY,\r\n left: posX,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n\r\n // Stop slideshow\r\n if (self.SlideShow && self.SlideShow.isActive) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n end;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n end = self.getFitPos(current);\r\n\r\n self.updateCursor(end.width, end.height);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: end.top,\r\n left: end.left,\r\n scaleX: end.width / $content.width(),\r\n scaleY: end.height / $content.height()\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos: function (slide) {\r\n var self = this,\r\n $content = slide.$content,\r\n $slide = slide.$slide,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n maxWidth,\r\n maxHeight,\r\n minRatio,\r\n aspectRatio,\r\n rez = {};\r\n\r\n if (!slide.isLoaded || !$content || !$content.length) {\r\n return false;\r\n }\r\n\r\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\r\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\r\n\r\n maxWidth -=\r\n parseFloat($slide.css(\"paddingLeft\")) +\r\n parseFloat($slide.css(\"paddingRight\")) +\r\n parseFloat($content.css(\"marginLeft\")) +\r\n parseFloat($content.css(\"marginRight\"));\r\n\r\n maxHeight -=\r\n parseFloat($slide.css(\"paddingTop\")) +\r\n parseFloat($slide.css(\"paddingBottom\")) +\r\n parseFloat($content.css(\"marginTop\")) +\r\n parseFloat($content.css(\"marginBottom\"));\r\n\r\n if (!width || !height) {\r\n width = maxWidth;\r\n height = maxHeight;\r\n }\r\n\r\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\r\n\r\n width = minRatio * width;\r\n height = minRatio * height;\r\n\r\n // Adjust width/height to precisely fit into container\r\n if (width > maxWidth - 0.5) {\r\n width = maxWidth;\r\n }\r\n\r\n if (height > maxHeight - 0.5) {\r\n height = maxHeight;\r\n }\r\n\r\n if (slide.type === \"image\") {\r\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\r\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\r\n } else if (slide.contentType === \"video\") {\r\n // Force aspect ratio for the video\r\n // \"I say the whole world must learn of our peaceful ways… by force!\"\r\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\r\n\r\n if (height > width / aspectRatio) {\r\n height = width / aspectRatio;\r\n } else if (width > height * aspectRatio) {\r\n width = height * aspectRatio;\r\n }\r\n }\r\n\r\n rez.width = width;\r\n rez.height = height;\r\n\r\n return rez;\r\n },\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update: function (e) {\r\n var self = this;\r\n\r\n $.each(self.slides, function (key, slide) {\r\n self.updateSlide(slide, e);\r\n });\r\n },\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide: function (slide, e) {\r\n var self = this,\r\n $content = slide && slide.$content,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n $slide = slide.$slide;\r\n\r\n // First, prevent caption overlap, if needed\r\n self.adjustCaption(slide);\r\n\r\n // Then resize content to fit inside the slide\r\n if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\r\n $.fancybox.stop($content);\r\n\r\n $.fancybox.setTranslate($content, self.getFitPos(slide));\r\n\r\n if (slide.pos === self.currPos) {\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n // Then some adjustments\r\n self.adjustLayout(slide);\r\n\r\n if ($slide.length) {\r\n $slide.trigger(\"refresh\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.$refs.toolbar\r\n .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\r\n .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\r\n }\r\n }\r\n\r\n self.trigger(\"onUpdate\", slide, e);\r\n },\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $slide = current.$slide;\r\n\r\n if (self.isClosing || !current) {\r\n return;\r\n }\r\n\r\n $slide.siblings().css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n $slide\r\n .parent()\r\n .children()\r\n .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\r\n\r\n $.fancybox.animate(\r\n $slide, {\r\n top: 0,\r\n left: 0,\r\n opacity: 1\r\n },\r\n duration === undefined ? 0 : duration,\r\n function () {\r\n // Clean up\r\n $slide.css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (!current.isComplete) {\r\n self.complete();\r\n }\r\n },\r\n false\r\n );\r\n },\r\n\r\n // Check if current slide is moved (swiped)\r\n // ========================================\r\n\r\n isMoved: function (slide) {\r\n var current = slide || this.current,\r\n slidePos,\r\n stagePos;\r\n\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\r\n slidePos = $.fancybox.getTranslate(current.$slide);\r\n\r\n return (\r\n !current.$slide.hasClass(\"fancybox-animated\") &&\r\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\r\n );\r\n },\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n $container = self.$refs.container,\r\n canPan,\r\n isZoomable;\r\n\r\n if (!current || self.isClosing || !self.Guestures) {\r\n return;\r\n }\r\n\r\n $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\r\n\r\n canPan = self.canPan(nextWidth, nextHeight);\r\n\r\n isZoomable = canPan ? true : self.isZoomable();\r\n\r\n $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\r\n\r\n $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\r\n\r\n if (canPan) {\r\n $container.addClass(\"fancybox-can-pan\");\r\n } else if (\r\n isZoomable &&\r\n (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\r\n ) {\r\n $container.addClass(\"fancybox-can-zoomIn\");\r\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\r\n $container.addClass(\"fancybox-can-swipe\");\r\n }\r\n },\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable: function () {\r\n var self = this,\r\n current = self.current,\r\n fitPos;\r\n\r\n // Assume that slide is zoomable if:\r\n // - image is still loading\r\n // - actual size of the image is smaller than available area\r\n if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\r\n if (!current.isLoaded) {\r\n return true;\r\n }\r\n\r\n fitPos = self.getFitPos(current);\r\n\r\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown: function (nextWidth, nextHeight) {\r\n var self = this,\r\n rez = false,\r\n current = self.current,\r\n $content = current.$content;\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n rez = nextWidth < current.width && nextHeight < current.height;\r\n } else if ($content) {\r\n rez = $.fancybox.getTranslate($content);\r\n rez = rez.width < current.width && rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n pos = null,\r\n rez = false;\r\n\r\n if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\r\n rez = self.getFitPos(current);\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n pos = {\r\n width: nextWidth,\r\n height: nextHeight\r\n };\r\n } else if (current.isComplete) {\r\n pos = $.fancybox.getTranslate(current.$content);\r\n }\r\n\r\n if (pos && rez) {\r\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\r\n }\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide: function (slide) {\r\n var self = this,\r\n type,\r\n $slide,\r\n ajaxLoad;\r\n\r\n if (slide.isLoading || slide.isLoaded) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n if (self.trigger(\"beforeLoad\", slide) === false) {\r\n slide.isLoading = false;\r\n\r\n return false;\r\n }\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off(\"refresh\")\r\n .trigger(\"onReset\")\r\n .addClass(slide.opts.slideClass);\r\n\r\n // Create content depending on the type\r\n switch (type) {\r\n case \"image\":\r\n self.setImage(slide);\r\n\r\n break;\r\n\r\n case \"iframe\":\r\n self.setIframe(slide);\r\n\r\n break;\r\n\r\n case \"html\":\r\n self.setContent(slide, slide.src || slide.content);\r\n\r\n break;\r\n\r\n case \"video\":\r\n self.setContent(\r\n slide,\r\n slide.opts.video.tpl\r\n .replace(/\\{\\{src\\}\\}/gi, slide.src)\r\n .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\r\n .replace(\"{{poster}}\", slide.thumb || \"\")\r\n );\r\n\r\n break;\r\n\r\n case \"inline\":\r\n if ($(slide.src).length) {\r\n self.setContent(slide, $(slide.src));\r\n } else {\r\n self.setError(slide);\r\n }\r\n\r\n break;\r\n\r\n case \"ajax\":\r\n self.showLoading(slide);\r\n\r\n ajaxLoad = $.ajax(\r\n $.extend({}, slide.opts.ajax.settings, {\r\n url: slide.src,\r\n success: function (data, textStatus) {\r\n if (textStatus === \"success\") {\r\n self.setContent(slide, data);\r\n }\r\n },\r\n error: function (jqXHR, textStatus) {\r\n if (jqXHR && textStatus !== \"abort\") {\r\n self.setError(slide);\r\n }\r\n }\r\n })\r\n );\r\n\r\n $slide.one(\"onReset\", function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n default:\r\n self.setError(slide);\r\n\r\n break;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage: function (slide) {\r\n var self = this,\r\n ghost;\r\n\r\n // Check if need to show loading icon\r\n setTimeout(function () {\r\n var $img = slide.$image;\r\n\r\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\r\n self.showLoading(slide);\r\n }\r\n }, 50);\r\n\r\n //Check if image has srcset\r\n self.checkSrcset(slide);\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass(\"fancybox-is-hidden\")\r\n .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n ghost = document.createElement(\"img\");\r\n\r\n ghost.onerror = function () {\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n };\r\n\r\n ghost.onload = function () {\r\n self.afterLoad(slide);\r\n };\r\n\r\n slide.$ghost = $(ghost)\r\n .addClass(\"fancybox-image\")\r\n .appendTo(slide.$content)\r\n .attr(\"src\", slide.thumb);\r\n }\r\n\r\n // Start loading actual image\r\n self.setBigImage(slide);\r\n },\r\n\r\n // Check if image has srcset and get the source\r\n // ============================================\r\n checkSrcset: function (slide) {\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\r\n found,\r\n temp,\r\n pxRatio,\r\n windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find first matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if (srcset) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(\",\").map(function (el) {\r\n var ret = {};\r\n\r\n el.trim()\r\n .split(/\\s+/)\r\n .forEach(function (el, i) {\r\n var value = parseInt(el.substring(0, el.length - 1), 10);\r\n\r\n if (i === 0) {\r\n return (ret.url = el);\r\n }\r\n\r\n if (value) {\r\n ret.value = value;\r\n ret.postfix = el[el.length - 1];\r\n }\r\n });\r\n\r\n return ret;\r\n });\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for (var j = 0; j < temp.length; j++) {\r\n var el = temp[j];\r\n\r\n if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if (!found && temp.length) {\r\n found = temp[temp.length - 1];\r\n }\r\n\r\n if (found) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if (slide.width && slide.height && found.postfix == \"w\") {\r\n slide.height = (slide.width / slide.height) * found.value;\r\n slide.width = found.value;\r\n }\r\n\r\n slide.opts.srcset = srcset;\r\n }\r\n }\r\n },\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage: function (slide) {\r\n var self = this,\r\n img = document.createElement(\"img\"),\r\n $img = $(img);\r\n\r\n slide.$image = $img\r\n .one(\"error\", function () {\r\n self.setError(slide);\r\n })\r\n .one(\"load\", function () {\r\n var sizes;\r\n\r\n if (!slide.$ghost) {\r\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\r\n\r\n self.afterLoad(slide);\r\n }\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (slide.opts.srcset) {\r\n sizes = slide.opts.sizes;\r\n\r\n if (!sizes || sizes === \"auto\") {\r\n sizes =\r\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\r\n \"vw\";\r\n }\r\n\r\n $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\r\n }\r\n\r\n // Hide temporary image after some delay\r\n if (slide.$ghost) {\r\n setTimeout(function () {\r\n if (slide.$ghost && !self.isClosing) {\r\n slide.$ghost.hide();\r\n }\r\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\r\n }\r\n\r\n self.hideLoading(slide);\r\n })\r\n .addClass(\"fancybox-image\")\r\n .attr(\"src\", slide.src)\r\n .appendTo(slide.$content);\r\n\r\n if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\r\n $img.trigger(\"load\");\r\n } else if (img.error) {\r\n $img.trigger(\"error\");\r\n }\r\n },\r\n\r\n // Computes the slide size from image size and maxWidth/maxHeight\r\n // ==============================================================\r\n\r\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\r\n var maxWidth = parseInt(slide.opts.width, 10),\r\n maxHeight = parseInt(slide.opts.height, 10);\r\n\r\n // Sets the default values from the image\r\n slide.width = imgWidth;\r\n slide.height = imgHeight;\r\n\r\n if (maxWidth > 0) {\r\n slide.width = maxWidth;\r\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\r\n }\r\n\r\n if (maxHeight > 0) {\r\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\r\n slide.height = maxHeight;\r\n }\r\n },\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe: function (slide) {\r\n var self = this,\r\n opts = slide.opts.iframe,\r\n $slide = slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css(opts.css)\r\n .appendTo($slide);\r\n\r\n $slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\r\n .attr(opts.attr)\r\n .appendTo(slide.$content);\r\n\r\n if (opts.preload) {\r\n self.showLoading(slide);\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on(\"load.fb error.fb\", function (e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger(\"refresh\");\r\n\r\n self.afterLoad(slide);\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on(\"refresh.fb\", function () {\r\n var $content = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n $contents,\r\n $body;\r\n\r\n if ($iframe[0].isReady !== 1) {\r\n return;\r\n }\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find(\"body\");\r\n } catch (ignore) {}\r\n\r\n // Calculate content dimensions, if it is accessible\r\n if ($body && $body.length && $body.children().length) {\r\n // Avoid scrolling to top (if multiple instances)\r\n $slide.css(\"overflow\", \"visible\");\r\n\r\n $content.css({\r\n width: \"100%\",\r\n \"max-width\": \"100%\",\r\n height: \"9999px\"\r\n });\r\n\r\n if (frameWidth === undefined) {\r\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\r\n }\r\n\r\n $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\r\n\r\n if (frameHeight === undefined) {\r\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\r\n }\r\n\r\n $content.css(\"height\", frameHeight ? frameHeight : \"\");\r\n\r\n $slide.css(\"overflow\", \"auto\");\r\n }\r\n\r\n $content.removeClass(\"fancybox-is-hidden\");\r\n });\r\n } else {\r\n self.afterLoad(slide);\r\n }\r\n\r\n $iframe.attr(\"src\", slide.src);\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one(\"onReset\", function () {\r\n // This helps IE not to throw errors when closing\r\n try {\r\n $(this)\r\n .find(\"iframe\")\r\n .hide()\r\n .unbind()\r\n .attr(\"src\", \"//about:blank\");\r\n } catch (ignore) {}\r\n\r\n $(this)\r\n .off(\"refresh.fb\")\r\n .empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n });\r\n },\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent: function (slide, content) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n self.hideLoading(slide);\r\n\r\n if (slide.$content) {\r\n $.fancybox.stop(slide.$content);\r\n }\r\n\r\n slide.$slide.empty();\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n if (isQuery(content) && content.parent().length) {\r\n // Make sure content is not already moved to fancyBox\r\n if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\r\n content.parents(\".fancybox-slide\").trigger(\"onReset\");\r\n }\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $(\"
\")\r\n .hide()\r\n .insertAfter(content);\r\n\r\n // Make sure content is visible\r\n content.css(\"display\", \"inline-block\");\r\n } else if (!slide.hasError) {\r\n // If content is just a plain text, try to convert it to html\r\n if ($.type(content) === \"string\") {\r\n content = $(\"
\")\r\n .append($.trim(content))\r\n .contents();\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if (slide.opts.filter) {\r\n content = $(\"
\")\r\n .html(content)\r\n .find(slide.opts.filter);\r\n }\r\n }\r\n\r\n slide.$slide.one(\"onReset\", function () {\r\n // Pause all html5 video/audio\r\n $(this)\r\n .find(\"video,audio\")\r\n .trigger(\"pause\");\r\n\r\n // Put content back\r\n if (slide.$placeholder) {\r\n slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if (slide.$smallBtn) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if (!slide.hasError) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n }\r\n });\r\n\r\n $(content).appendTo(slide.$slide);\r\n\r\n if ($(content).is(\"video,audio\")) {\r\n $(content).addClass(\"fancybox-video\");\r\n\r\n $(content).wrap(\"
\");\r\n\r\n slide.contentType = \"video\";\r\n\r\n slide.opts.width = slide.opts.width || $(content).attr(\"width\");\r\n slide.opts.height = slide.opts.height || $(content).attr(\"height\");\r\n }\r\n\r\n slide.$content = slide.$slide\r\n .children()\r\n .filter(\"div,form,main,video,audio,article,.fancybox-content\")\r\n .first();\r\n\r\n slide.$content.siblings().hide();\r\n\r\n // Re-check if there is a valid content\r\n // (in some cases, ajax response can contain various elements or plain text)\r\n if (!slide.$content.length) {\r\n slide.$content = slide.$slide\r\n .wrapInner(\"
\")\r\n .children()\r\n .first();\r\n }\r\n\r\n slide.$content.addClass(\"fancybox-content\");\r\n\r\n slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n self.afterLoad(slide);\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError: function (slide) {\r\n slide.hasError = true;\r\n\r\n slide.$slide\r\n .trigger(\"onReset\")\r\n .removeClass(\"fancybox-slide--\" + slide.contentType)\r\n .addClass(\"fancybox-slide--error\");\r\n\r\n slide.contentType = \"html\";\r\n\r\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\r\n\r\n if (slide.pos === this.currPos) {\r\n this.isAnimating = false;\r\n }\r\n },\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && !slide.$spinner) {\r\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\r\n .appendTo(slide.$slide)\r\n .hide()\r\n .fadeIn(\"fast\");\r\n }\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && slide.$spinner) {\r\n slide.$spinner.stop().remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n },\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad: function (slide) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger(\"afterLoad\", slide);\r\n\r\n self.hideLoading(slide);\r\n\r\n // Add small close button\r\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\r\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\r\n }\r\n\r\n // Disable right click\r\n if (slide.opts.protect && slide.$content && !slide.hasError) {\r\n slide.$content.on(\"contextmenu.fb\", function (e) {\r\n if (e.button == 2) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if (slide.type === \"image\") {\r\n $('
').appendTo(slide.$content);\r\n }\r\n }\r\n\r\n self.adjustCaption(slide);\r\n\r\n self.adjustLayout(slide);\r\n\r\n if (slide.pos === self.currPos) {\r\n self.updateCursor();\r\n }\r\n\r\n self.revealContent(slide);\r\n },\r\n\r\n // Prevent caption overlap,\r\n // fix css inconsistency across browsers\r\n // =====================================\r\n\r\n adjustCaption: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n caption = current.opts.caption,\r\n preventOverlap = current.opts.preventCaptionOverlap,\r\n $caption = self.$refs.caption,\r\n $clone,\r\n captionH = false;\r\n\r\n $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\r\n\r\n if (preventOverlap && caption && caption.length) {\r\n if (current.pos !== self.currPos) {\r\n $clone = $caption.clone().appendTo($caption.parent());\r\n\r\n $clone\r\n .children()\r\n .eq(0)\r\n .empty()\r\n .html(caption);\r\n\r\n captionH = $clone.outerHeight(true);\r\n\r\n $clone.empty().remove();\r\n } else if (self.$caption) {\r\n captionH = self.$caption.outerHeight(true);\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", captionH || \"\");\r\n }\r\n },\r\n\r\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\r\n // ====================================================================================\r\n\r\n adjustLayout: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n scrollHeight,\r\n marginBottom,\r\n inlinePadding,\r\n actualPadding;\r\n\r\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\r\n current.$content.css(\"margin-bottom\", \"\");\r\n\r\n // If we would always set margin-bottom for the content,\r\n // then it would potentially break vertical align\r\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\r\n inlinePadding = current.$slide[0].style[\"padding-bottom\"];\r\n actualPadding = current.$slide.css(\"padding-bottom\");\r\n\r\n if (parseFloat(actualPadding) > 0) {\r\n scrollHeight = current.$slide[0].scrollHeight;\r\n\r\n current.$slide.css(\"padding-bottom\", 0);\r\n\r\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\r\n marginBottom = actualPadding;\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", inlinePadding);\r\n }\r\n }\r\n\r\n current.$content.css(\"margin-bottom\", marginBottom);\r\n }\r\n },\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent: function (slide) {\r\n var self = this,\r\n $slide = slide.$slide,\r\n end = false,\r\n start = false,\r\n isMoved = self.isMoved(slide),\r\n isRevealed = slide.isRevealed,\r\n effect,\r\n effectClassName,\r\n duration,\r\n opacity;\r\n\r\n slide.isRevealed = true;\r\n\r\n effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\r\n duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n\r\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\r\n\r\n if (isMoved || slide.pos !== self.currPos || !duration) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if (effect === \"zoom\") {\r\n if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\r\n end = self.getFitPos(slide);\r\n } else {\r\n effect = \"fade\";\r\n }\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n if (effect === \"zoom\") {\r\n self.isAnimating = true;\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\r\n\r\n forceRedraw(slide.$content);\r\n\r\n // Start animation\r\n $.fancybox.animate(slide.$content, end, duration, function () {\r\n self.isAnimating = false;\r\n\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide(slide);\r\n\r\n // Simply show content if no effect\r\n // ================================\r\n if (!effect) {\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\r\n slide.$content.hide().fadeIn(\"fast\");\r\n }\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Prepare for CSS transiton\r\n // =========================\r\n $.fancybox.stop($slide);\r\n\r\n //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\r\n effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\r\n\r\n $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\r\n\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n // Force reflow\r\n forceRedraw($slide);\r\n\r\n if (slide.type !== \"image\") {\r\n slide.$content.hide().show(0);\r\n }\r\n\r\n $.fancybox.animate(\r\n $slide,\r\n \"fancybox-slide--current\",\r\n duration,\r\n function () {\r\n $slide.removeClass(effectClassName).css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n },\r\n true\r\n );\r\n },\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos: function (slide) {\r\n var rez = false,\r\n $thumb = slide.$thumb,\r\n thumbPos,\r\n btw,\r\n brw,\r\n bbw,\r\n blw;\r\n\r\n if (!$thumb || !inViewport($thumb[0])) {\r\n return false;\r\n }\r\n\r\n thumbPos = $.fancybox.getTranslate($thumb);\r\n\r\n btw = parseFloat($thumb.css(\"border-top-width\") || 0);\r\n brw = parseFloat($thumb.css(\"border-right-width\") || 0);\r\n bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\r\n blw = parseFloat($thumb.css(\"border-left-width\") || 0);\r\n\r\n rez = {\r\n top: thumbPos.top + btw,\r\n left: thumbPos.left + blw,\r\n width: thumbPos.width - brw - blw,\r\n height: thumbPos.height - btw - bbw,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\r\n },\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete: function () {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n $el;\r\n\r\n if (self.isMoved() || !current.isLoaded) {\r\n return;\r\n }\r\n\r\n if (!current.isComplete) {\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger(\"onReset\");\r\n\r\n self.preload(\"inline\");\r\n\r\n // Trigger any CSS transiton inside the slide\r\n forceRedraw(current.$slide);\r\n\r\n current.$slide.addClass(\"fancybox-slide--complete\");\r\n\r\n // Remove unnecessary slides\r\n $.each(self.slides, function (key, slide) {\r\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\r\n slides[slide.pos] = slide;\r\n } else if (slide) {\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n }\r\n\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger(\"afterShow\");\r\n\r\n // Autoplay first html5 video/audio\r\n if (!!current.opts.video.autoStart) {\r\n current.$slide\r\n .find(\"video,audio\")\r\n .filter(\":visible:first\")\r\n .trigger(\"play\")\r\n .one(\"ended\", function () {\r\n if (Document.exitFullscreen) {\r\n Document.exitFullscreen();\r\n } else if (this.webkitExitFullscreen) {\r\n this.webkitExitFullscreen();\r\n }\r\n\r\n self.next();\r\n });\r\n }\r\n\r\n // Try to focus on the first focusable element\r\n if (current.opts.autoFocus && current.contentType === \"html\") {\r\n // Look for the first input with autofocus attribute\r\n $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\r\n\r\n if ($el.length) {\r\n $el.trigger(\"focus\");\r\n } else {\r\n self.focus(null, true);\r\n }\r\n }\r\n\r\n // Avoid jumping\r\n current.$slide.scrollTop(0).scrollLeft(0);\r\n },\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload: function (type) {\r\n var self = this,\r\n prev,\r\n next;\r\n\r\n if (self.group.length < 2) {\r\n return;\r\n }\r\n\r\n next = self.slides[self.currPos + 1];\r\n prev = self.slides[self.currPos - 1];\r\n\r\n if (prev && prev.type === type) {\r\n self.loadSlide(prev);\r\n }\r\n\r\n if (next && next.type === type) {\r\n self.loadSlide(next);\r\n }\r\n },\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus: function (e, firstRun) {\r\n var self = this,\r\n focusableStr = [\r\n \"a[href]\",\r\n \"area[href]\",\r\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\r\n \"select:not([disabled]):not([aria-hidden])\",\r\n \"textarea:not([disabled]):not([aria-hidden])\",\r\n \"button:not([disabled]):not([aria-hidden])\",\r\n \"iframe\",\r\n \"object\",\r\n \"embed\",\r\n \"video\",\r\n \"audio\",\r\n \"[contenteditable]\",\r\n '[tabindex]:not([tabindex^=\"-\"])'\r\n ].join(\",\"),\r\n focusableItems,\r\n focusedItemIndex;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (e || !self.current || !self.current.isComplete) {\r\n // Focus on any element inside fancybox\r\n focusableItems = self.$refs.container.find(\"*:visible\");\r\n } else {\r\n // Focus inside current slide\r\n focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\r\n }\r\n\r\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\r\n return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\r\n });\r\n\r\n if (focusableItems.length) {\r\n focusedItemIndex = focusableItems.index(document.activeElement);\r\n\r\n if (e && e.shiftKey) {\r\n // Back tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\r\n e.preventDefault();\r\n\r\n focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\r\n }\r\n } else {\r\n // Outside or Forward tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n\r\n focusableItems.eq(0).trigger(\"focus\");\r\n }\r\n }\r\n } else {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate: function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $(\".fancybox-container\").each(function () {\r\n var instance = $(this).data(\"FancyBox\");\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger(\"onDeactivate\");\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if (self.current || self.isIdle) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger(\"onActivate\");\r\n\r\n self.addEvents();\r\n },\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close: function (e, d) {\r\n var self = this,\r\n current = self.current,\r\n effect,\r\n duration,\r\n $content,\r\n domRect,\r\n opacity,\r\n start,\r\n end;\r\n\r\n var done = function () {\r\n self.cleanUp(e);\r\n };\r\n\r\n if (self.isClosing) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if (self.trigger(\"beforeClose\", e) === false) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function () {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n $content = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\r\n\r\n current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\r\n\r\n if (e !== true) {\r\n $.fancybox.stop(current.$slide);\r\n } else {\r\n effect = false;\r\n }\r\n\r\n // Remove other slides\r\n current.$slide\r\n .siblings()\r\n .trigger(\"onReset\")\r\n .remove();\r\n\r\n // Trigger animations\r\n if (duration) {\r\n self.$refs.container\r\n .removeClass(\"fancybox-is-open\")\r\n .addClass(\"fancybox-is-closing\")\r\n .css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Clean up\r\n self.hideLoading(current);\r\n\r\n self.hideControls(true);\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if (\r\n effect === \"zoom\" &&\r\n !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\r\n ) {\r\n effect = \"fade\";\r\n }\r\n\r\n if (effect === \"zoom\") {\r\n $.fancybox.stop($content);\r\n\r\n domRect = $.fancybox.getTranslate($content);\r\n\r\n start = {\r\n top: domRect.top,\r\n left: domRect.left,\r\n scaleX: domRect.width / end.width,\r\n scaleY: domRect.height / end.height,\r\n width: end.width,\r\n height: end.height\r\n };\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n end.opacity = 0;\r\n }\r\n\r\n $.fancybox.setTranslate($content, start);\r\n\r\n forceRedraw($content);\r\n\r\n $.fancybox.animate($content, end, duration, done);\r\n\r\n return true;\r\n }\r\n\r\n if (effect && duration) {\r\n $.fancybox.animate(\r\n current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\r\n \"fancybox-animated fancybox-fx-\" + effect,\r\n duration,\r\n done\r\n );\r\n } else {\r\n // If skip animation\r\n if (e === true) {\r\n setTimeout(done, duration);\r\n } else {\r\n done();\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp: function (e) {\r\n var self = this,\r\n instance,\r\n $focus = self.current.opts.$orig,\r\n x,\r\n y;\r\n\r\n self.current.$slide.trigger(\"onReset\");\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger(\"afterClose\", e);\r\n\r\n // Place back focus\r\n if (!!self.current.opts.backFocus) {\r\n if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\r\n $focus = self.$trigger;\r\n }\r\n\r\n if ($focus && $focus.length) {\r\n x = window.scrollX;\r\n y = window.scrollY;\r\n\r\n $focus.trigger(\"focus\");\r\n\r\n $(\"html, body\")\r\n .scrollTop(y)\r\n .scrollLeft(x);\r\n }\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n instance.activate();\r\n } else {\r\n $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\r\n\r\n $(\"#fancybox-style-noscroll\").remove();\r\n }\r\n },\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger: function (name, slide) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if (obj) {\r\n args.unshift(obj);\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift(self);\r\n\r\n if ($.isFunction(obj.opts[name])) {\r\n rez = obj.opts[name].apply(obj, args);\r\n }\r\n\r\n if (rez === false) {\r\n return rez;\r\n }\r\n\r\n if (name === \"afterClose\" || !self.$refs) {\r\n $D.trigger(name + \".fb\", args);\r\n } else {\r\n self.$refs.container.trigger(name + \".fb\", args);\r\n }\r\n },\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls: function () {\r\n var self = this,\r\n current = self.current,\r\n index = current.index,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption,\r\n caption = current.opts.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger(\"refresh\");\r\n\r\n // Set caption\r\n if (caption && caption.length) {\r\n self.$caption = $caption;\r\n\r\n $caption\r\n .children()\r\n .eq(0)\r\n .html(caption);\r\n } else {\r\n self.$caption = null;\r\n }\r\n\r\n if (!self.hasHiddenControls && !self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find(\"[data-fancybox-count]\").html(self.group.length);\r\n $container.find(\"[data-fancybox-index]\").html(index + 1);\r\n\r\n $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\r\n $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\r\n\r\n if (current.type === \"image\") {\r\n // Re-enable buttons; update download button source\r\n $container\r\n .find(\"[data-fancybox-zoom]\")\r\n .show()\r\n .end()\r\n .find(\"[data-fancybox-download]\")\r\n .attr(\"href\", current.opts.image.src || current.src)\r\n .show();\r\n } else if (current.opts.toolbar) {\r\n $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\r\n }\r\n\r\n // Make sure focus is not on disabled button/element\r\n if ($(document.activeElement).is(\":hidden,[disabled]\")) {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls: function (andCaption) {\r\n var self = this,\r\n arr = [\"infobar\", \"toolbar\", \"nav\"];\r\n\r\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\r\n arr.push(\"caption\");\r\n }\r\n\r\n this.$refs.container.removeClass(\r\n arr\r\n .map(function (i) {\r\n return \"fancybox-show-\" + i;\r\n })\r\n .join(\" \")\r\n );\r\n\r\n this.hasHiddenControls = true;\r\n },\r\n\r\n showControls: function () {\r\n var self = this,\r\n opts = self.current ? self.current.opts : self.opts,\r\n $container = self.$refs.container;\r\n\r\n self.hasHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\r\n .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\r\n .toggleClass(\"fancybox-show-caption\", !!self.$caption)\r\n .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\r\n .toggleClass(\"fancybox-is-modal\", !!opts.modal);\r\n },\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls: function () {\r\n if (this.hasHiddenControls) {\r\n this.showControls();\r\n } else {\r\n this.hideControls();\r\n }\r\n }\r\n });\r\n\r\n $.fancybox = {\r\n version: \"3.5.7\",\r\n defaults: defaults,\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance: function (command) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\r\n args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if (instance instanceof FancyBox) {\r\n if ($.type(command) === \"string\") {\r\n instance[command].apply(instance, args);\r\n } else if ($.type(command) === \"function\") {\r\n command.apply(instance, args);\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open: function (items, opts, index) {\r\n return new FancyBox(items, opts, index);\r\n },\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close: function (all) {\r\n var instance = this.getInstance();\r\n\r\n if (instance) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n if (all === true) {\r\n this.close(all);\r\n }\r\n }\r\n },\r\n\r\n // Close all instances and unbind all events\r\n // =========================================\r\n\r\n destroy: function () {\r\n this.close(true);\r\n\r\n $D.add(\"body\").off(\"click.fb-start\", \"**\");\r\n },\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d: (function () {\r\n var div = document.createElement(\"div\");\r\n\r\n return (\r\n window.getComputedStyle &&\r\n window.getComputedStyle(div) &&\r\n window.getComputedStyle(div).getPropertyValue(\"transform\") &&\r\n !(document.documentMode && document.documentMode < 11)\r\n );\r\n })(),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate: function ($el) {\r\n var domRect;\r\n\r\n if (!$el || !$el.length) {\r\n return false;\r\n }\r\n\r\n domRect = $el[0].getBoundingClientRect();\r\n\r\n return {\r\n top: domRect.top || 0,\r\n left: domRect.left || 0,\r\n width: domRect.width,\r\n height: domRect.height,\r\n opacity: parseFloat($el.css(\"opacity\"))\r\n };\r\n },\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate: function ($el, props) {\r\n var str = \"\",\r\n css = {};\r\n\r\n if (!$el || !props) {\r\n return;\r\n }\r\n\r\n if (props.left !== undefined || props.top !== undefined) {\r\n str =\r\n (props.left === undefined ? $el.position().left : props.left) +\r\n \"px, \" +\r\n (props.top === undefined ? $el.position().top : props.top) +\r\n \"px\";\r\n\r\n if (this.use3d) {\r\n str = \"translate3d(\" + str + \", 0px)\";\r\n } else {\r\n str = \"translate(\" + str + \")\";\r\n }\r\n }\r\n\r\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\r\n str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\r\n } else if (props.scaleX !== undefined) {\r\n str += \" scaleX(\" + props.scaleX + \")\";\r\n }\r\n\r\n if (str.length) {\r\n css.transform = str;\r\n }\r\n\r\n if (props.opacity !== undefined) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if (props.width !== undefined) {\r\n css.width = props.width;\r\n }\r\n\r\n if (props.height !== undefined) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css(css);\r\n },\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate: function ($el, to, duration, callback, leaveAnimationName) {\r\n var self = this,\r\n from;\r\n\r\n if ($.isFunction(duration)) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n self.stop($el);\r\n\r\n from = self.getTranslate($el);\r\n\r\n $el.on(transitionEnd, function (e) {\r\n // Skip events from child elements and z-index change\r\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\r\n return;\r\n }\r\n\r\n self.stop($el);\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", \"\");\r\n }\r\n\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n self.setTranslate($el, {\r\n top: to.top,\r\n left: to.left,\r\n width: from.width * to.scaleX,\r\n height: from.height * to.scaleY,\r\n scaleX: 1,\r\n scaleY: 1\r\n });\r\n }\r\n } else if (leaveAnimationName !== true) {\r\n $el.removeClass(to);\r\n }\r\n\r\n if ($.isFunction(callback)) {\r\n callback(e);\r\n }\r\n });\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Start animation by changing CSS properties or class name\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n delete to.width;\r\n delete to.height;\r\n\r\n if ($el.parent().hasClass(\"fancybox-slide--image\")) {\r\n $el.parent().addClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n\r\n $.fancybox.setTranslate($el, to);\r\n } else {\r\n $el.addClass(to);\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\r\n \"timer\",\r\n setTimeout(function () {\r\n $el.trigger(transitionEnd);\r\n }, duration + 33)\r\n );\r\n },\r\n\r\n stop: function ($el, callCallback) {\r\n if ($el && $el.length) {\r\n clearTimeout($el.data(\"timer\"));\r\n\r\n if (callCallback) {\r\n $el.trigger(transitionEnd);\r\n }\r\n\r\n $el.off(transitionEnd).css(\"transition-duration\", \"\");\r\n\r\n $el.parent().removeClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n };\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run(e, opts) {\r\n var items = [],\r\n index = 0,\r\n $target,\r\n value,\r\n instance;\r\n\r\n // Avoid opening multiple times\r\n if (e && e.isDefaultPrevented()) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n opts = opts || {};\r\n\r\n if (e && e.data) {\r\n opts = mergeOpts(e.data.options, opts);\r\n }\r\n\r\n $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\r\n return;\r\n }\r\n\r\n if (opts.selector) {\r\n items = $(opts.selector);\r\n } else {\r\n // Get all related items and find index for clicked one\r\n value = $target.attr(\"data-fancybox\") || \"\";\r\n\r\n if (value) {\r\n items = e.data ? e.data.items : [];\r\n items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\r\n } else {\r\n items = [$target];\r\n }\r\n }\r\n\r\n index = $(items).index($target);\r\n\r\n // Sometimes current item can not be found\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n\r\n instance = $.fancybox.open(items, opts, index);\r\n\r\n // Save last active element\r\n instance.$trigger = $target;\r\n }\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if (selector) {\r\n // Use body element instead of document so it executes first\r\n $(\"body\")\r\n .off(\"click.fb-start\", selector)\r\n .on(\"click.fb-start\", selector, {\r\n options: options\r\n }, _run);\r\n } else {\r\n this.off(\"click.fb-start\").on(\r\n \"click.fb-start\", {\r\n items: this,\r\n options: options\r\n },\r\n _run\r\n );\r\n }\r\n\r\n return this;\r\n };\r\n\r\n // Self initializing plugin for all elements having `data-fancybox` attribute\r\n // ==========================================================================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\r\n\r\n // Enable \"trigger elements\"\r\n // =========================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\r\n $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\r\n .eq($(this).attr(\"data-fancybox-index\") || 0)\r\n .trigger(\"click.fb-start\", {\r\n $trigger: $(this)\r\n });\r\n });\r\n\r\n // Track focus event for better accessibility styling\r\n // ==================================================\r\n (function () {\r\n var buttonStr = \".fancybox-button\",\r\n focusStr = \"fancybox-focus\",\r\n $pressed = null;\r\n\r\n $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\r\n switch (e.type) {\r\n case \"mousedown\":\r\n $pressed = $(this);\r\n break;\r\n case \"mouseup\":\r\n $pressed = null;\r\n break;\r\n case \"focusin\":\r\n $(buttonStr).removeClass(focusStr);\r\n\r\n if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\r\n $(this).addClass(focusStr);\r\n }\r\n break;\r\n case \"focusout\":\r\n $(buttonStr).removeClass(focusStr);\r\n break;\r\n }\r\n });\r\n })();\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n(function ($) {\r\n \"use strict\";\r\n\r\n // Object containing properties for each media type\r\n var defaults = {\r\n youtube: {\r\n matcher: /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n params: {\r\n autoplay: 1,\r\n autohide: 1,\r\n fs: 1,\r\n rel: 0,\r\n hd: 1,\r\n wmode: \"transparent\",\r\n enablejsapi: 1,\r\n html5: 1\r\n },\r\n paramPlace: 8,\r\n type: \"iframe\",\r\n url: \"https://www.youtube-nocookie.com/embed/$4\",\r\n thumb: \"https://img.youtube.com/vi/$4/hqdefault.jpg\"\r\n },\r\n\r\n vimeo: {\r\n matcher: /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n params: {\r\n autoplay: 1,\r\n hd: 1,\r\n show_title: 1,\r\n show_byline: 1,\r\n show_portrait: 0,\r\n fullscreen: 1\r\n },\r\n paramPlace: 3,\r\n type: \"iframe\",\r\n url: \"//player.vimeo.com/video/$2\"\r\n },\r\n\r\n instagram: {\r\n matcher: /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n type: \"image\",\r\n url: \"//$1/p/$2/media/?size=l\"\r\n },\r\n\r\n // Examples:\r\n // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\r\n // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n gmap_place: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return (\r\n \"//maps.google.\" +\r\n rez[2] +\r\n \"/?ll=\" +\r\n (rez[9] ? rez[9] + \"&z=\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\//, \"&\") : \"\") : rez[12] + \"\").replace(/\\?/, \"&\") +\r\n \"&output=\" +\r\n (rez[12] && rez[12].indexOf(\"layer=c\") > 0 ? \"svembed\" : \"embed\")\r\n );\r\n }\r\n },\r\n\r\n // Examples:\r\n // https://www.google.com/maps/search/Empire+State+Building/\r\n // https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n gmap_search: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return \"//maps.google.\" + rez[2] + \"/maps?q=\" + rez[5].replace(\"query=\", \"q=\").replace(\"api=1\", \"\") + \"&output=embed\";\r\n }\r\n }\r\n };\r\n\r\n // Formats matching url to final form\r\n var format = function (url, rez, params) {\r\n if (!url) {\r\n return;\r\n }\r\n\r\n params = params || \"\";\r\n\r\n if ($.type(params) === \"object\") {\r\n params = $.param(params, true);\r\n }\r\n\r\n $.each(rez, function (key, value) {\r\n url = url.replace(\"$\" + key, value || \"\");\r\n });\r\n\r\n if (params.length) {\r\n url += (url.indexOf(\"?\") > 0 ? \"&\" : \"?\") + params;\r\n }\r\n\r\n return url;\r\n };\r\n\r\n $(document).on(\"objectNeedsType.fb\", function (e, instance, item) {\r\n var url = item.src || \"\",\r\n type = false,\r\n media,\r\n thumb,\r\n rez,\r\n params,\r\n urlParams,\r\n paramObj,\r\n provider;\r\n\r\n media = $.extend(true, {}, defaults, item.opts.media);\r\n\r\n // Look for any matching media type\r\n $.each(media, function (providerName, providerOpts) {\r\n rez = url.match(providerOpts.matcher);\r\n\r\n if (!rez) {\r\n return;\r\n }\r\n\r\n type = providerOpts.type;\r\n provider = providerName;\r\n paramObj = {};\r\n\r\n if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\r\n urlParams = rez[providerOpts.paramPlace];\r\n\r\n if (urlParams[0] == \"?\") {\r\n urlParams = urlParams.substring(1);\r\n }\r\n\r\n urlParams = urlParams.split(\"&\");\r\n\r\n for (var m = 0; m < urlParams.length; ++m) {\r\n var p = urlParams[m].split(\"=\", 2);\r\n\r\n if (p.length == 2) {\r\n paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\r\n }\r\n }\r\n }\r\n\r\n params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\r\n\r\n url =\r\n $.type(providerOpts.url) === \"function\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\r\n\r\n thumb =\r\n $.type(providerOpts.thumb) === \"function\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\r\n\r\n if (providerName === \"youtube\") {\r\n url = url.replace(/&t=((\\d+)m)?(\\d+)s/, function (match, p1, m, s) {\r\n return \"&start=\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\r\n });\r\n } else if (providerName === \"vimeo\") {\r\n url = url.replace(\"&%23\", \"#\");\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // If it is found, then change content type and update the url\r\n\r\n if (type) {\r\n if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\r\n item.opts.thumb = thumb;\r\n }\r\n\r\n if (type === \"iframe\") {\r\n item.opts = $.extend(true, item.opts, {\r\n iframe: {\r\n preload: false,\r\n attr: {\r\n scrolling: \"no\"\r\n }\r\n }\r\n });\r\n }\r\n\r\n $.extend(item, {\r\n type: type,\r\n src: url,\r\n origSrc: item.src,\r\n contentSource: provider,\r\n contentType: type === \"image\" ? \"image\" : provider == \"gmap_place\" || provider == \"gmap_search\" ? \"map\" : \"video\"\r\n });\r\n } else if (url) {\r\n item.type = item.opts.defaultType;\r\n }\r\n });\r\n\r\n // Load YouTube/Video API on request to detect when video finished playing\r\n var VideoAPILoader = {\r\n youtube: {\r\n src: \"https://www.youtube.com/iframe_api\",\r\n class: \"YT\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n vimeo: {\r\n src: \"https://player.vimeo.com/api/player.js\",\r\n class: \"Vimeo\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n load: function (vendor) {\r\n var _this = this,\r\n script;\r\n\r\n if (this[vendor].loaded) {\r\n setTimeout(function () {\r\n _this.done(vendor);\r\n });\r\n return;\r\n }\r\n\r\n if (this[vendor].loading) {\r\n return;\r\n }\r\n\r\n this[vendor].loading = true;\r\n\r\n script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = this[vendor].src;\r\n\r\n if (vendor === \"youtube\") {\r\n window.onYouTubeIframeAPIReady = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n } else {\r\n script.onload = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n }\r\n\r\n document.body.appendChild(script);\r\n },\r\n done: function (vendor) {\r\n var instance, $el, player;\r\n\r\n if (vendor === \"youtube\") {\r\n delete window.onYouTubeIframeAPIReady;\r\n }\r\n\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n $el = instance.current.$content.find(\"iframe\");\r\n\r\n if (vendor === \"youtube\" && YT !== undefined && YT) {\r\n player = new YT.Player($el.attr(\"id\"), {\r\n events: {\r\n onStateChange: function (e) {\r\n if (e.data == 0) {\r\n instance.next();\r\n }\r\n }\r\n }\r\n });\r\n } else if (vendor === \"vimeo\" && Vimeo !== undefined && Vimeo) {\r\n player = new Vimeo.Player($el);\r\n\r\n player.on(\"ended\", function () {\r\n instance.next();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n $(document).on({\r\n \"afterShow.fb\": function (e, instance, current) {\r\n if (instance.group.length > 1 && (current.contentSource === \"youtube\" || current.contentSource === \"vimeo\")) {\r\n VideoAPILoader.load(current.contentSource);\r\n }\r\n }\r\n });\r\n})(jQuery);\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n var getPointerXY = function (e) {\r\n var result = [];\r\n\r\n e = e.originalEvent || e || window.e;\r\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\r\n\r\n for (var key in e) {\r\n if (e[key].pageX) {\r\n result.push({\r\n x: e[key].pageX,\r\n y: e[key].pageY\r\n });\r\n } else if (e[key].clientX) {\r\n result.push({\r\n x: e[key].clientX,\r\n y: e[key].clientY\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var distance = function (point2, point1, what) {\r\n if (!point1 || !point2) {\r\n return 0;\r\n }\r\n\r\n if (what === \"x\") {\r\n return point2.x - point1.x;\r\n } else if (what === \"y\") {\r\n return point2.y - point1.y;\r\n }\r\n\r\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\r\n };\r\n\r\n var isClickable = function ($el) {\r\n if (\r\n $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\r\n $.isFunction($el.get(0).onclick) ||\r\n $el.data(\"selectable\")\r\n ) {\r\n return true;\r\n }\r\n\r\n // Check for attributes like data-fancybox-next or data-fancybox-close\r\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\r\n if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var hasScrollbars = function (el) {\r\n var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\r\n overflowX = window.getComputedStyle(el)[\"overflow-x\"],\r\n vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\r\n horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\r\n\r\n return vertical || horizontal;\r\n };\r\n\r\n var isScrollable = function ($el) {\r\n var rez = false;\r\n\r\n while (true) {\r\n rez = hasScrollbars($el.get(0));\r\n\r\n if (rez) {\r\n break;\r\n }\r\n\r\n $el = $el.parent();\r\n\r\n if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\r\n break;\r\n }\r\n }\r\n\r\n return rez;\r\n };\r\n\r\n var Guestures = function (instance) {\r\n var self = this;\r\n\r\n self.instance = instance;\r\n\r\n self.$bg = instance.$refs.bg;\r\n self.$stage = instance.$refs.stage;\r\n self.$container = instance.$refs.container;\r\n\r\n self.destroy();\r\n\r\n self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\r\n };\r\n\r\n Guestures.prototype.destroy = function () {\r\n var self = this;\r\n\r\n self.$container.off(\".fb.touch\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n self.requestId = null;\r\n }\r\n\r\n if (self.tapped) {\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n }\r\n };\r\n\r\n Guestures.prototype.ontouchstart = function (e) {\r\n var self = this,\r\n $target = $(e.target),\r\n instance = self.instance,\r\n current = instance.current,\r\n $slide = current.$slide,\r\n $content = current.$content,\r\n isTouchDevice = e.type == \"touchstart\";\r\n\r\n // Do not respond to both (touch and mouse) events\r\n if (isTouchDevice) {\r\n self.$container.off(\"mousedown.fb.touch\");\r\n }\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Ignore taping on links, buttons, input elements\r\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\r\n return;\r\n }\r\n // Ignore clicks on the scrollbar\r\n if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Ignore clicks while zooming or closing\r\n if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n self.realPoints = self.startPoints = getPointerXY(e);\r\n\r\n if (!self.startPoints.length) {\r\n return;\r\n }\r\n\r\n // Allow other scripts to catch touch event if \"touch\" is set to false\r\n if (current.touch) {\r\n e.stopPropagation();\r\n }\r\n\r\n self.startEvent = e;\r\n\r\n self.canTap = true;\r\n self.$target = $target;\r\n self.$content = $content;\r\n self.opts = current.opts.touch;\r\n\r\n self.isPanning = false;\r\n self.isSwiping = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n self.canPan = instance.canPan();\r\n\r\n self.startTime = new Date().getTime();\r\n self.distanceX = self.distanceY = self.distance = 0;\r\n\r\n self.canvasWidth = Math.round($slide[0].clientWidth);\r\n self.canvasHeight = Math.round($slide[0].clientHeight);\r\n\r\n self.contentLastPos = null;\r\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\r\n top: 0,\r\n left: 0\r\n };\r\n self.sliderStartPos = $.fancybox.getTranslate($slide);\r\n\r\n // Since position will be absolute, but we need to make it relative to the stage\r\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n self.sliderStartPos.top -= self.stagePos.top;\r\n self.sliderStartPos.left -= self.stagePos.left;\r\n\r\n self.contentStartPos.top -= self.stagePos.top;\r\n self.contentStartPos.left -= self.stagePos.left;\r\n\r\n $(document)\r\n .off(\".fb.touch\")\r\n .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\r\n .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\r\n\r\n if ($.fancybox.isMobile) {\r\n document.addEventListener(\"scroll\", self.onscroll, true);\r\n }\r\n\r\n // Skip if clicked outside the sliding area\r\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\r\n if ($target.is(\".fancybox-image\")) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\r\n return;\r\n }\r\n }\r\n\r\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\r\n\r\n // Check if element is scrollable and try to prevent default behavior (scrolling)\r\n if (!($.fancybox.isMobile && self.isScrollable)) {\r\n e.preventDefault();\r\n }\r\n\r\n // One finger or mouse click - swipe or pan an image\r\n if (self.startPoints.length === 1 || current.hasError) {\r\n if (self.canPan) {\r\n $.fancybox.stop(self.$content);\r\n\r\n self.isPanning = true;\r\n } else {\r\n self.isSwiping = true;\r\n }\r\n\r\n self.$container.addClass(\"fancybox-is-grabbing\");\r\n }\r\n\r\n // Two fingers - zoom image\r\n if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\r\n self.canTap = false;\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n\r\n self.isZooming = true;\r\n\r\n $.fancybox.stop(self.$content);\r\n\r\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\r\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\r\n\r\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\r\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\r\n\r\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\r\n }\r\n };\r\n\r\n Guestures.prototype.onscroll = function (e) {\r\n var self = this;\r\n\r\n self.isScrolling = true;\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n };\r\n\r\n Guestures.prototype.ontouchmove = function (e) {\r\n var self = this;\r\n\r\n // Make sure user has not released over iframe or disabled element\r\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\r\n self.ontouchend(e);\r\n return;\r\n }\r\n\r\n if (self.isScrolling) {\r\n self.canTap = false;\r\n return;\r\n }\r\n\r\n self.newPoints = getPointerXY(e);\r\n\r\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\r\n return;\r\n }\r\n\r\n if (!(self.isSwiping && self.isSwiping === true)) {\r\n e.preventDefault();\r\n }\r\n\r\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\r\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\r\n\r\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\r\n\r\n // Skip false ontouchmove events (Chrome)\r\n if (self.distance > 0) {\r\n if (self.isSwiping) {\r\n self.onSwipe(e);\r\n } else if (self.isPanning) {\r\n self.onPan();\r\n } else if (self.isZooming) {\r\n self.onZoom();\r\n }\r\n }\r\n };\r\n\r\n Guestures.prototype.onSwipe = function (e) {\r\n var self = this,\r\n instance = self.instance,\r\n swiping = self.isSwiping,\r\n left = self.sliderStartPos.left || 0,\r\n angle;\r\n\r\n // If direction is not yet determined\r\n if (swiping === true) {\r\n // We need at least 10px distance to correctly calculate an angle\r\n if (Math.abs(self.distance) > 10) {\r\n self.canTap = false;\r\n\r\n if (instance.group.length < 2 && self.opts.vertical) {\r\n self.isSwiping = \"y\";\r\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\r\n self.isSwiping = \"x\";\r\n } else {\r\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\r\n\r\n self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\r\n }\r\n\r\n if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\r\n self.isScrolling = true;\r\n\r\n return;\r\n }\r\n\r\n instance.isDragging = self.isSwiping;\r\n\r\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n self.startPoints = self.newPoints;\r\n\r\n $.each(instance.slides, function (index, slide) {\r\n var slidePos, stagePos;\r\n\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slidePos = $.fancybox.getTranslate(slide.$slide);\r\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\",\r\n \"transition-duration\": \"\"\r\n })\r\n .removeClass(\"fancybox-animated\")\r\n .removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n if (slide.pos === instance.current.pos) {\r\n self.sliderStartPos.top = slidePos.top - stagePos.top;\r\n self.sliderStartPos.left = slidePos.left - stagePos.left;\r\n }\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: slidePos.top - stagePos.top,\r\n left: slidePos.left - stagePos.left\r\n });\r\n });\r\n\r\n // Stop slideshow\r\n if (instance.SlideShow && instance.SlideShow.isActive) {\r\n instance.SlideShow.stop();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Sticky edges\r\n if (swiping == \"x\") {\r\n if (\r\n self.distanceX > 0 &&\r\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left + Math.pow(self.distanceX, 0.8);\r\n } else if (\r\n self.distanceX < 0 &&\r\n (self.instance.group.length < 2 ||\r\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left - Math.pow(-self.distanceX, 0.8);\r\n } else {\r\n left = left + self.distanceX;\r\n }\r\n }\r\n\r\n self.sliderLastPos = {\r\n top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\r\n left: left\r\n };\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n if (self.sliderLastPos) {\r\n $.each(self.instance.slides, function (index, slide) {\r\n var pos = slide.pos - self.instance.currPos;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: self.sliderLastPos.top,\r\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\r\n });\r\n });\r\n\r\n self.$container.addClass(\"fancybox-is-sliding\");\r\n }\r\n });\r\n };\r\n\r\n Guestures.prototype.onPan = function () {\r\n var self = this;\r\n\r\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\r\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\r\n self.startPoints = self.newPoints;\r\n return;\r\n }\r\n\r\n self.canTap = false;\r\n\r\n self.contentLastPos = self.limitMovement();\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n // Make panning sticky to the edges\r\n Guestures.prototype.limitMovement = function () {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n var distanceX = self.distanceX;\r\n var distanceY = self.distanceY;\r\n\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\r\n\r\n if (currentWidth > canvasWidth) {\r\n newOffsetX = currentOffsetX + distanceX;\r\n } else {\r\n newOffsetX = currentOffsetX;\r\n }\r\n\r\n newOffsetY = currentOffsetY + distanceY;\r\n\r\n // Slow down proportionally to traveled distance\r\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\r\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\r\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n // ->\r\n if (distanceX > 0 && newOffsetX > minTranslateX) {\r\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\r\n }\r\n\r\n // <-\r\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\r\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\r\n }\r\n\r\n // \\/\r\n if (distanceY > 0 && newOffsetY > minTranslateY) {\r\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\r\n }\r\n\r\n // /\\\r\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\r\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n if (newWidth > canvasWidth) {\r\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n } else {\r\n // Center horizontally\r\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\r\n }\r\n\r\n if (newHeight > canvasHeight) {\r\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n } else {\r\n // Center vertically\r\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.onZoom = function () {\r\n var self = this;\r\n\r\n // Calculate current distance between points to get pinch ratio and new width and height\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\r\n\r\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n var newWidth = Math.floor(currentWidth * pinchRatio);\r\n var newHeight = Math.floor(currentHeight * pinchRatio);\r\n\r\n // This is the translation due to pinch-zooming\r\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n // Point between the two touches\r\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\r\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\r\n\r\n // And this is the translation due to translation of the centerpoint\r\n // between the two fingers\r\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n // The new offset is the old/current one plus the total translation\r\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\r\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\r\n\r\n var newPos = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n scaleX: pinchRatio,\r\n scaleY: pinchRatio\r\n };\r\n\r\n self.canTap = false;\r\n\r\n self.newWidth = newWidth;\r\n self.newHeight = newHeight;\r\n\r\n self.contentLastPos = newPos;\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n Guestures.prototype.ontouchend = function (e) {\r\n var self = this;\r\n\r\n var swiping = self.isSwiping;\r\n var panning = self.isPanning;\r\n var zooming = self.isZooming;\r\n var scrolling = self.isScrolling;\r\n\r\n self.endPoints = getPointerXY(e);\r\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\r\n\r\n self.$container.removeClass(\"fancybox-is-grabbing\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n\r\n self.instance.isDragging = false;\r\n\r\n if (self.canTap) {\r\n return self.onTap(e);\r\n }\r\n\r\n self.speed = 100;\r\n\r\n // Speed in px/ms\r\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\r\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\r\n\r\n if (panning) {\r\n self.endPanning();\r\n } else if (zooming) {\r\n self.endZooming();\r\n } else {\r\n self.endSwiping(swiping, scrolling);\r\n }\r\n\r\n return;\r\n };\r\n\r\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\r\n var self = this,\r\n ret = false,\r\n len = self.instance.group.length,\r\n distanceX = Math.abs(self.distanceX),\r\n canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\r\n speedX = 300;\r\n\r\n self.sliderLastPos = null;\r\n\r\n // Close if swiped vertically / navigate if horizontally\r\n if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\r\n // Continue vertical movement\r\n $.fancybox.animate(\r\n self.instance.current.$slide, {\r\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\r\n opacity: 0\r\n },\r\n 200\r\n );\r\n ret = self.instance.close(true, 250);\r\n } else if (canAdvance && self.distanceX > 0) {\r\n ret = self.instance.previous(speedX);\r\n } else if (canAdvance && self.distanceX < 0) {\r\n ret = self.instance.next(speedX);\r\n }\r\n\r\n if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\r\n self.instance.centerSlide(200);\r\n }\r\n\r\n self.$container.removeClass(\"fancybox-is-sliding\");\r\n };\r\n\r\n // Limit panning from edges\r\n // ========================\r\n Guestures.prototype.endPanning = function () {\r\n var self = this,\r\n newOffsetX,\r\n newOffsetY,\r\n newPos;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n if (self.opts.momentum === false || self.dMs > 350) {\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n } else {\r\n // Continue movement\r\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\r\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\r\n }\r\n\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\r\n\r\n newPos.width = self.contentStartPos.width;\r\n newPos.height = self.contentStartPos.height;\r\n\r\n $.fancybox.animate(self.$content, newPos, 366);\r\n };\r\n\r\n Guestures.prototype.endZooming = function () {\r\n var self = this;\r\n\r\n var current = self.instance.current;\r\n\r\n var newOffsetX, newOffsetY, newPos, reset;\r\n\r\n var newWidth = self.newWidth;\r\n var newHeight = self.newHeight;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n\r\n reset = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n width: newWidth,\r\n height: newHeight,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n $.fancybox.setTranslate(self.$content, reset);\r\n\r\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\r\n self.instance.scaleToFit(150);\r\n } else if (newWidth > current.width || newHeight > current.height) {\r\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\r\n } else {\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\r\n\r\n $.fancybox.animate(self.$content, newPos, 150);\r\n }\r\n };\r\n\r\n Guestures.prototype.onTap = function (e) {\r\n var self = this;\r\n var $target = $(e.target);\r\n\r\n var instance = self.instance;\r\n var current = instance.current;\r\n\r\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\r\n\r\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\r\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\r\n\r\n var where;\r\n\r\n var process = function (prefix) {\r\n var action = current.opts[prefix];\r\n\r\n if ($.isFunction(action)) {\r\n action = action.apply(instance, [current, e]);\r\n }\r\n\r\n if (!action) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case \"close\":\r\n instance.close(self.startEvent);\r\n\r\n break;\r\n\r\n case \"toggleControls\":\r\n instance.toggleControls();\r\n\r\n break;\r\n\r\n case \"next\":\r\n instance.next();\r\n\r\n break;\r\n\r\n case \"nextOrClose\":\r\n if (instance.group.length > 1) {\r\n instance.next();\r\n } else {\r\n instance.close(self.startEvent);\r\n }\r\n\r\n break;\r\n\r\n case \"zoom\":\r\n if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\r\n if (instance.canPan()) {\r\n instance.scaleToFit();\r\n } else if (instance.isScaledDown()) {\r\n instance.scaleToActual(tapX, tapY);\r\n } else if (instance.group.length < 2) {\r\n instance.close(self.startEvent);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Skip if clicked on the scrollbar\r\n if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Check where is clicked\r\n if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\r\n where = \"Outside\";\r\n } else if ($target.is(\".fancybox-slide\")) {\r\n where = \"Slide\";\r\n } else if (\r\n instance.current.$content &&\r\n instance.current.$content\r\n .find($target)\r\n .addBack()\r\n .filter($target).length\r\n ) {\r\n where = \"Content\";\r\n } else {\r\n return;\r\n }\r\n\r\n // Check if this is a double tap\r\n if (self.tapped) {\r\n // Stop previously created single tap\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n\r\n // Skip if distance between taps is too big\r\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\r\n return this;\r\n }\r\n\r\n // OK, now we assume that this is a double-tap\r\n process(\"dblclick\" + where);\r\n } else {\r\n // Single tap will be processed if user has not clicked second time within 300ms\r\n // or there is no need to wait for double-tap\r\n self.tapX = tapX;\r\n self.tapY = tapY;\r\n\r\n if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\r\n self.tapped = setTimeout(function () {\r\n self.tapped = null;\r\n\r\n if (!instance.isAnimating) {\r\n process(\"click\" + where);\r\n }\r\n }, 500);\r\n } else {\r\n process(\"click\" + where);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n $(document)\r\n .on(\"onActivate.fb\", function (e, instance) {\r\n if (instance && !instance.Guestures) {\r\n instance.Guestures = new Guestures(instance);\r\n }\r\n })\r\n .on(\"beforeClose.fb\", function (e, instance) {\r\n if (instance && instance.Guestures) {\r\n instance.Guestures.destroy();\r\n }\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n slideShow: '\"\r\n },\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000,\r\n progress: true\r\n }\r\n });\r\n\r\n var SlideShow = function (instance) {\r\n this.instance = instance;\r\n this.init();\r\n };\r\n\r\n $.extend(SlideShow.prototype, {\r\n timer: null,\r\n isActive: false,\r\n $button: null,\r\n\r\n init: function () {\r\n var self = this,\r\n instance = self.instance,\r\n opts = instance.group[instance.currIndex].opts.slideShow;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n if (instance.group.length < 2 || !opts) {\r\n self.$button.hide();\r\n } else if (opts.progress) {\r\n self.$progress = $('
').appendTo(instance.$refs.inner);\r\n }\r\n },\r\n\r\n set: function (force) {\r\n var self = this,\r\n instance = self.instance,\r\n current = instance.current;\r\n\r\n // Check if reached last element\r\n if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\r\n if (self.isActive && current.contentType !== \"video\") {\r\n if (self.$progress) {\r\n $.fancybox.animate(self.$progress.show(), {\r\n scaleX: 1\r\n }, current.opts.slideShow.speed);\r\n }\r\n\r\n self.timer = setTimeout(function () {\r\n if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\r\n instance.jumpTo(0);\r\n } else {\r\n instance.next();\r\n }\r\n }, current.opts.slideShow.speed);\r\n }\r\n } else {\r\n self.stop();\r\n instance.idleSecondsCounter = 0;\r\n instance.showControls();\r\n }\r\n },\r\n\r\n clear: function () {\r\n var self = this;\r\n\r\n clearTimeout(self.timer);\r\n\r\n self.timer = null;\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n start: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n if (current) {\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\r\n .removeClass(\"fancybox-button--play\")\r\n .addClass(\"fancybox-button--pause\");\r\n\r\n self.isActive = true;\r\n\r\n if (current.isComplete) {\r\n self.set(true);\r\n }\r\n\r\n self.instance.trigger(\"onSlideShowChange\", true);\r\n }\r\n },\r\n\r\n stop: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n self.clear();\r\n\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\r\n .removeClass(\"fancybox-button--pause\")\r\n .addClass(\"fancybox-button--play\");\r\n\r\n self.isActive = false;\r\n\r\n self.instance.trigger(\"onSlideShowChange\", false);\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n toggle: function () {\r\n var self = this;\r\n\r\n if (self.isActive) {\r\n self.stop();\r\n } else {\r\n self.start();\r\n }\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n if (instance && !instance.SlideShow) {\r\n instance.SlideShow = new SlideShow(instance);\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (firstRun) {\r\n if (SlideShow && current.opts.slideShow.autoStart) {\r\n SlideShow.start();\r\n }\r\n } else if (SlideShow && SlideShow.isActive) {\r\n SlideShow.clear();\r\n }\r\n },\r\n\r\n \"afterShow.fb\": function (e, instance, current) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n SlideShow.set();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n // \"P\" or Spacebar\r\n if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\"button,a,input\")) {\r\n keypress.preventDefault();\r\n\r\n SlideShow.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb onDeactivate.fb\": function (e, instance) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow) {\r\n SlideShow.stop();\r\n }\r\n }\r\n });\r\n\r\n // Page Visibility API to pause slideshow when window is not active\r\n $(document).on(\"visibilitychange\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n if (document.hidden) {\r\n SlideShow.clear();\r\n } else {\r\n SlideShow.set();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n // Collection of methods supported by user browser\r\n var fn = (function () {\r\n var fnMap = [\r\n [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\r\n // new WebKit\r\n [\r\n \"webkitRequestFullscreen\",\r\n \"webkitExitFullscreen\",\r\n \"webkitFullscreenElement\",\r\n \"webkitFullscreenEnabled\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n // old WebKit (Safari 5.1)\r\n [\r\n \"webkitRequestFullScreen\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitCurrentFullScreenElement\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n [\r\n \"mozRequestFullScreen\",\r\n \"mozCancelFullScreen\",\r\n \"mozFullScreenElement\",\r\n \"mozFullScreenEnabled\",\r\n \"mozfullscreenchange\",\r\n \"mozfullscreenerror\"\r\n ],\r\n [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"]\r\n ];\r\n\r\n var ret = {};\r\n\r\n for (var i = 0; i < fnMap.length; i++) {\r\n var val = fnMap[i];\r\n\r\n if (val && val[1] in document) {\r\n for (var j = 0; j < val.length; j++) {\r\n ret[fnMap[0][j]] = val[j];\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n return false;\r\n })();\r\n\r\n if (fn) {\r\n var FullScreen = {\r\n request: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\r\n },\r\n exit: function () {\r\n document[fn.exitFullscreen]();\r\n },\r\n toggle: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n if (this.isFullscreen()) {\r\n this.exit();\r\n } else {\r\n this.request(elem);\r\n }\r\n },\r\n isFullscreen: function () {\r\n return Boolean(document[fn.fullscreenElement]);\r\n },\r\n enabled: function () {\r\n return Boolean(document[fn.fullscreenEnabled]);\r\n }\r\n };\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n fullScreen: '\"\r\n },\r\n fullScreen: {\r\n autoStart: false\r\n }\r\n });\r\n\r\n $(document).on(fn.fullscreenchange, function () {\r\n var isFullscreen = FullScreen.isFullscreen(),\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n // If image is zooming, then force to stop and reposition properly\r\n if (instance.current && instance.current.type === \"image\" && instance.isAnimating) {\r\n instance.isAnimating = false;\r\n\r\n instance.update(true, true, 0);\r\n\r\n if (!instance.isComplete) {\r\n instance.complete();\r\n }\r\n }\r\n\r\n instance.trigger(\"onFullscreenChange\", isFullscreen);\r\n\r\n instance.$refs.container.toggleClass(\"fancybox-is-fullscreen\", isFullscreen);\r\n\r\n instance.$refs.toolbar\r\n .find(\"[data-fancybox-fullscreen]\")\r\n .toggleClass(\"fancybox-button--fsenter\", !isFullscreen)\r\n .toggleClass(\"fancybox-button--fsexit\", isFullscreen);\r\n }\r\n });\r\n }\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var $container;\r\n\r\n if (!fn) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();\r\n\r\n return;\r\n }\r\n\r\n if (instance && instance.group[instance.currIndex].opts.fullScreen) {\r\n $container = instance.$refs.container;\r\n\r\n $container.on(\"click.fb-fullscreen\", \"[data-fancybox-fullscreen]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n FullScreen.toggle();\r\n });\r\n\r\n if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\r\n FullScreen.request();\r\n }\r\n\r\n // Expose API\r\n instance.FullScreen = FullScreen;\r\n } else if (instance) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n // \"F\"\r\n if (instance && instance.FullScreen && keycode === 70) {\r\n keypress.preventDefault();\r\n\r\n instance.FullScreen.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n if (instance && instance.FullScreen && instance.$refs.container.hasClass(\"fancybox-is-fullscreen\")) {\r\n FullScreen.exit();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var CLASS = \"fancybox-thumbs\",\r\n CLASS_ACTIVE = CLASS + \"-active\";\r\n\r\n // Make sure there are default values\r\n $.fancybox.defaults = $.extend(\r\n true, {\r\n btnTpl: {\r\n thumbs: '\"\r\n },\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n }\r\n },\r\n $.fancybox.defaults\r\n );\r\n\r\n var FancyThumbs = function (instance) {\r\n this.init(instance);\r\n };\r\n\r\n $.extend(FancyThumbs.prototype, {\r\n $button: null,\r\n $grid: null,\r\n $list: null,\r\n isVisible: false,\r\n isActive: false,\r\n\r\n init: function (instance) {\r\n var self = this,\r\n group = instance.group,\r\n enabled = 0;\r\n\r\n self.instance = instance;\r\n self.opts = group[instance.currIndex].opts.thumbs;\r\n\r\n instance.Thumbs = self;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-thumbs]\");\r\n\r\n // Enable thumbs if at least two group items have thumbnails\r\n for (var i = 0, len = group.length; i < len; i++) {\r\n if (group[i].thumb) {\r\n enabled++;\r\n }\r\n\r\n if (enabled > 1) {\r\n break;\r\n }\r\n }\r\n\r\n if (enabled > 1 && !!self.opts) {\r\n self.$button.removeAttr(\"style\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n self.isActive = true;\r\n } else {\r\n self.$button.hide();\r\n }\r\n },\r\n\r\n create: function () {\r\n var self = this,\r\n instance = self.instance,\r\n parentEl = self.opts.parentEl,\r\n list = [],\r\n src;\r\n\r\n if (!self.$grid) {\r\n // Create main element\r\n self.$grid = $('
').appendTo(\r\n instance.$refs.container\r\n .find(parentEl)\r\n .addBack()\r\n .filter(parentEl)\r\n );\r\n\r\n // Add \"click\" event that performs gallery navigation\r\n self.$grid.on(\"click\", \"a\", function () {\r\n instance.jumpTo($(this).attr(\"data-index\"));\r\n });\r\n }\r\n\r\n // Build the list\r\n if (!self.$list) {\r\n self.$list = $('
').appendTo(self.$grid);\r\n }\r\n\r\n $.each(instance.group, function (i, item) {\r\n src = item.thumb;\r\n\r\n if (!src && item.type === \"image\") {\r\n src = item.src;\r\n }\r\n\r\n list.push(\r\n '\"\r\n );\r\n });\r\n\r\n self.$list[0].innerHTML = list.join(\"\");\r\n\r\n if (self.opts.axis === \"x\") {\r\n // Set fixed width for list element to enable horizontal scrolling\r\n self.$list.width(\r\n parseInt(self.$grid.css(\"padding-right\"), 10) +\r\n instance.group.length *\r\n self.$list\r\n .children()\r\n .eq(0)\r\n .outerWidth(true)\r\n );\r\n }\r\n },\r\n\r\n focus: function (duration) {\r\n var self = this,\r\n $list = self.$list,\r\n $grid = self.$grid,\r\n thumb,\r\n thumbPos;\r\n\r\n if (!self.instance.current) {\r\n return;\r\n }\r\n\r\n thumb = $list\r\n .children()\r\n .removeClass(CLASS_ACTIVE)\r\n .filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n .addClass(CLASS_ACTIVE);\r\n\r\n thumbPos = thumb.position();\r\n\r\n // Check if need to scroll to make current thumb visible\r\n if (self.opts.axis === \"y\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\r\n $list.stop().animate({\r\n scrollTop: $list.scrollTop() + thumbPos.top\r\n },\r\n duration\r\n );\r\n } else if (\r\n self.opts.axis === \"x\" &&\r\n (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\r\n ) {\r\n $list\r\n .parent()\r\n .stop()\r\n .animate({\r\n scrollLeft: thumbPos.left\r\n },\r\n duration\r\n );\r\n }\r\n },\r\n\r\n update: function () {\r\n var that = this;\r\n that.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\", this.isVisible);\r\n\r\n if (that.isVisible) {\r\n if (!that.$grid) {\r\n that.create();\r\n }\r\n\r\n that.instance.trigger(\"onThumbsShow\");\r\n\r\n that.focus(0);\r\n } else if (that.$grid) {\r\n that.instance.trigger(\"onThumbsHide\");\r\n }\r\n\r\n // Update content position\r\n that.instance.update();\r\n },\r\n\r\n hide: function () {\r\n this.isVisible = false;\r\n this.update();\r\n },\r\n\r\n show: function () {\r\n this.isVisible = true;\r\n this.update();\r\n },\r\n\r\n toggle: function () {\r\n this.isVisible = !this.isVisible;\r\n this.update();\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var Thumbs;\r\n\r\n if (instance && !instance.Thumbs) {\r\n Thumbs = new FancyThumbs(instance);\r\n\r\n if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\r\n Thumbs.show();\r\n }\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, item, firstRun) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible) {\r\n Thumbs.focus(firstRun ? 0 : 250);\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n // \"G\"\r\n if (Thumbs && Thumbs.isActive && keycode === 71) {\r\n keypress.preventDefault();\r\n\r\n Thumbs.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\r\n Thumbs.$grid.hide();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n share: '\"\r\n },\r\n share: {\r\n url: function (instance, item) {\r\n return (\r\n (!instance.currentHash && !(item.type === \"inline\" || item.type === \"html\") ? item.origSrc || item.src : false) || window.location\r\n );\r\n },\r\n tpl: '
' +\r\n \"

{{SHARE}}

\" +\r\n \"

\" +\r\n '' +\r\n '' +\r\n \"Facebook\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Twitter\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Pinterest\" +\r\n \"\" +\r\n \"

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);","// imagesloaded\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('imagesloaded'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.imagesLoaded,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( Flickity, imagesLoaded ) {\n\nFlickity.create.imagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nFlickity.prototype.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) return;\n\n let onImagesLoadedProgress = ( instance, image ) => {\n let cell = this.getParentCell( image.img );\n this.cellSizeChange( cell && cell.element );\n if ( !this.options.freeScroll ) this.positionSliderAtSelected();\n };\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Infinite Scroll v2.0.4\n * measure size of elements\n * MIT license\n */\n\n( function( window, factory ) {\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n} )( window, function factory() {\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n let num = parseFloat( value );\n // not a percent like '100%', and a number\n let isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\n// -------------------------- measurements -------------------------- //\n\nlet measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth',\n];\n\nlet measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n let size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0,\n };\n measurements.forEach( ( measurement ) => {\n size[ measurement ] = 0;\n } );\n return size;\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) elem = document.querySelector( elem );\n\n // do not proceed on non-objects\n let isElement = elem && typeof elem == 'object' && elem.nodeType;\n if ( !isElement ) return;\n\n let style = getComputedStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) return getZeroSize();\n\n let size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n let isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n measurements.forEach( ( measurement ) => {\n let value = style[ measurement ];\n let num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n } );\n\n let paddingWidth = size.paddingLeft + size.paddingRight;\n let paddingHeight = size.paddingTop + size.paddingBottom;\n let marginWidth = size.marginLeft + size.marginRight;\n let marginHeight = size.marginTop + size.marginBottom;\n let borderWidth = size.borderLeftWidth + size.borderRightWidth;\n let borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n // overwrite width and height if we can get it from style\n let styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingWidth + borderWidth );\n }\n\n let styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n} );\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('unidragger'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, Flickity, Unidragger, utils ) {\n\n// ----- defaults ----- //\n\nObject.assign( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// -------------------------- drag prototype -------------------------- //\n\nlet proto = Flickity.prototype;\nObject.assign( proto, Unidragger.prototype ); // inherit Unidragger\nproto.touchActionValue = '';\n\n// -------------------------- -------------------------- //\n\nFlickity.create.drag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n this.on( 'pointerDown', this.handlePointerDown );\n this.on( 'pointerUp', this.handlePointerUp );\n this.on( 'pointerDown', this.handlePointerDone );\n this.on( 'dragStart', this.handleDragStart );\n this.on( 'dragMove', this.handleDragMove );\n this.on( 'dragEnd', this.handleDragEnd );\n this.on( 'staticClick', this.handleStaticClick );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable === '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n this.element.classList.toggle( 'is-draggable', this.isDraggable );\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.handlePointerDown = function( event ) {\n if ( !this.isDraggable ) {\n // proceed for staticClick\n this.bindActivePointerEvents( event );\n return;\n }\n\n let isTouchStart = event.type === 'touchstart';\n let isTouchPointer = event.pointerType === 'touch';\n let isFocusNode = event.target.matches('input, textarea, select');\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) event.preventDefault();\n if ( !isFocusNode ) this.focus();\n // blur\n if ( document.activeElement !== this.element ) document.activeElement.blur();\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n this.bindActivePointerEvents( event );\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.handlePointerUp = function() {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n};\n\nproto.handlePointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.handleDragStart = function() {\n if ( !this.isDraggable ) return;\n\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n};\n\nproto.handleDragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) return;\n\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n let direction = this.options.rightToLeft ? -1 : 1;\n // wrap around move. #589\n if ( this.isWrapping ) moveVector.x %= this.slideableWidth;\n let dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.isWrapping ) {\n // slow drag\n let originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n let endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n this.dragMoveTime = new Date();\n};\n\nproto.handleDragEnd = function() {\n if ( !this.isDraggable ) return;\n\n let { freeScroll } = this.options;\n if ( freeScroll ) this.isFreeScrolling = true;\n // set selectedIndex based on where flick will end up\n let index = this.dragEndRestingSelect();\n\n if ( freeScroll && !this.isWrapping ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n let restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !freeScroll && index === this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.isWrapping;\n this.select( index );\n delete this.isDragSelect;\n};\n\nproto.dragEndRestingSelect = function() {\n let restingX = this.getRestingPosition();\n // how far away from selected slide\n let distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n let positiveResting = this._getClosestResting( restingX, distance, 1 );\n let negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n return positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n let index = this.selectedIndex;\n let minDistance = Infinity;\n let condition = this.options.contain && !this.isWrapping ?\n // if containing, keep going if distance is equal to minDistance\n ( dist, minDist ) => dist <= minDist :\n ( dist, minDist ) => dist < minDist;\n\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) break;\n\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n let len = this.slides.length;\n // wrap around if at least 2 slides\n let isWrapAround = this.options.wrapAround && len > 1;\n let slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n let slide = this.slides[ slideIndex ];\n if ( !slide ) return null;\n\n // add distance for wrap-around slides\n let wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n let distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n let delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n let scroll = getScrollPosition();\n let scrollMoveX = this.pointerDownScroll.x - scroll.x;\n let scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this.pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( global );\n } else {\n // browser global\n global.fizzyUIUtils = factory( global );\n }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n let index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( elem.matches( selector ) ) return elem;\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n\n return elems\n // check that elem is an actual element\n .filter( ( elem ) => elem instanceof HTMLElement )\n .reduce( ( ffElems, elem ) => {\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return ffElems;\n }\n // filter & find items if we have a selector\n // filter\n if ( elem.matches( selector ) ) {\n ffElems.push( elem );\n }\n // find children\n let childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n ffElems = ffElems.concat( ...childElems );\n return ffElems;\n }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n let method = _class.prototype[ methodName ];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n clearTimeout( this[ timeoutName ] );\n\n let args = arguments;\n this[ timeoutName ] = setTimeout( () => {\n method.apply( this, args );\n delete this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n let readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( onDocReady );\n } else {\n document.addEventListener( 'DOMContentLoaded', onDocReady );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n let dashedNamespace = utils.toDashed( namespace );\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n let jQuery = global.jQuery;\n\n [ ...dataAttrElems ].forEach( ( elem ) => {\n let attr = elem.getAttribute( dataAttr );\n let options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n }\n return;\n }\n // initialize\n let instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n } );\n\n } );\n};\n\n// ----- ----- //\n\nreturn utils;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate'),\n );\n } else {\n // browser global\n let _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n/* eslint-enable max-params */\n\n// vars\nconst { getComputedStyle, console } = window;\nlet { jQuery } = window;\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nlet GUID = 0;\n// internal store of all Flickity intances\nlet instances = {};\n\nfunction Flickity( element, options ) {\n let queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) console.error(`Bad element for Flickity: ${queryElement || element}`);\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n let instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = { ...this.constructor.defaults };\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.create = {};\n\nlet proto = Flickity.prototype;\n// inherit EventEmitter\nObject.assign( proto, EvEmitter.prototype );\n\nproto._create = function() {\n let { resize, watchCSS, rightToLeft } = this.options;\n // add id for Flickity.data\n let id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.beginMargin = rightToLeft ? 'marginRight' : 'marginLeft';\n this.endMargin = rightToLeft ? 'marginLeft' : 'marginRight';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n // used for keyboard navigation\n this.focusableElems = [ this.element ];\n\n if ( resize || watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( let eventName in this.options.on ) {\n let listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n for ( let method in Flickity.create ) {\n Flickity.create[ method ].call( this );\n }\n\n if ( watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n Object.assign( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) return;\n\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n let cellElems = this._filterFindCellElements( this.element.children );\n this.slider.append( ...cellElems );\n this.viewport.append( this.slider );\n this.element.append( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n let slider = document.createElement('div');\n slider.className = 'flickity-slider';\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n let cellElems = this._filterFindCellElements( elems );\n\n // create new Cells for collection\n return cellElems.map( ( cellElem ) => new Cell( cellElem ) );\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n let cellX = 0;\n // get cellX\n if ( index > 0 ) {\n let startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n\n this.cells.slice( index ).forEach( ( cell ) => {\n cell.x = cellX;\n this._renderCellPosition( cell, cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n } );\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = this.cells.length ?\n this.getLastSlide().target - this.slides[0].target : 0;\n};\n\nproto._renderCellPosition = function( cell, x ) {\n // render position of cell with in slider\n let sideOffset = this.options.rightToLeft ? -1 : 1;\n let renderX = x * sideOffset;\n if ( this.options.percentPosition ) renderX *= this.size.innerWidth / cell.size.width;\n let positionValue = this.getPositionValue( renderX );\n cell.element.style.transform = `translateX( ${positionValue} )`;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( ( cell ) => cell.getSize() );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) return;\n\n let { beginMargin, endMargin } = this;\n let slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n\n let canCellFit = this._getCanCellFit();\n\n this.cells.forEach( ( cell, i ) => {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n let slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ endMargin ] );\n\n if ( canCellFit( i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n } );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n let { groupCells } = this.options;\n if ( !groupCells ) return () => false;\n\n if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n let number = parseInt( groupCells, 10 );\n return ( i ) => ( i % number ) !== 0;\n }\n // default, group by width of slide\n let percent = 1;\n // parse '75%\n let percentMatch = typeof groupCells == 'string' && groupCells.match( /^(\\d+)%$/ );\n if ( percentMatch ) percent = parseInt( percentMatch[1], 10 ) / 100;\n let groupWidth = ( this.size.innerWidth + 1 ) * percent;\n return ( i, slideWidth ) => slideWidth <= groupWidth;\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nlet cellAlignShorthands = {\n left: 0,\n center: 0.5,\n right: 1,\n};\n\nproto.setCellAlign = function() {\n let { cellAlign, rightToLeft } = this.options;\n let shorthand = cellAlignShorthands[ cellAlign ];\n this.cellAlign = shorthand !== undefined ? shorthand : cellAlign;\n if ( rightToLeft ) this.cellAlign = 1 - this.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( !this.options.setGallerySize ) return;\n\n let height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = `${height}px`;\n};\n\nproto._updateWrapShiftCells = function() {\n // update isWrapping\n this.isWrapping = this.getIsWrapping();\n // only for wrap-around\n if ( !this.isWrapping ) return;\n\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n let beforeGapX = this.cursorPosition;\n let lastIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( beforeGapX, lastIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n let afterGapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( afterGapX, 0, 1 );\n};\n\nproto.getIsWrapping = function() {\n let { wrapAround } = this.options;\n if ( !wrapAround || this.slides.length < 2 ) return false;\n\n if ( wrapAround !== 'fill' ) return true;\n // check that slides can fit\n\n let gapWidth = this.slideableWidth - this.size.innerWidth;\n if ( gapWidth > this.size.innerWidth ) return true; // gap * 2x big, all good\n // check that content width - shifting cell is bigger than viewport width\n for ( let cell of this.cells ) {\n if ( cell.size.outerWidth > gapWidth ) return false;\n }\n return true;\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n let cells = [];\n while ( gapX > 0 ) {\n let cell = this.cells[ cellIndex ];\n if ( !cell ) break;\n\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain & wrap ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n let isContaining = this.options.contain && !this.isWrapping &&\n this.cells.length;\n if ( !isContaining ) return;\n\n let contentWidth = this.slideableWidth - this.getLastCell().size[ this.endMargin ];\n // content is less than gallery size\n let isContentSmaller = contentWidth < this.size.innerWidth;\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n this.slides.forEach( ( slide ) => {\n slide.target = contentWidth * this.cellAlign;\n } );\n } else {\n // contain to bounds\n let beginBound = this.cursorPosition + this.cells[0].size[ this.beginMargin ];\n let endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n this.slides.forEach( ( slide ) => {\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n } );\n }\n};\n\n// ----- events ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n let emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let $event = type;\n if ( event ) {\n // create jQuery event\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\nconst unidraggerEvents = [\n 'dragStart',\n 'dragMove',\n 'dragEnd',\n 'pointerDown',\n 'pointerMove',\n 'pointerEnd',\n 'staticClick',\n];\n\nlet _emitEvent = proto.emitEvent;\nproto.emitEvent = function( eventName, args ) {\n if ( eventName === 'staticClick' ) {\n // add cellElem and cellIndex args to staticClick\n let clickedCell = this.getParentCell( args[0].target );\n let cellElem = clickedCell && clickedCell.element;\n let cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n args = args.concat( cellElem, cellIndex );\n }\n // do regular thing\n _emitEvent.call( this, eventName, args );\n // duck-punch in jQuery events for Unidragger events\n let isUnidraggerEvent = unidraggerEvents.includes( eventName );\n if ( !isUnidraggerEvent || !jQuery || !this.$element ) return;\n\n eventName += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let event = args.shift( 0 );\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = eventName;\n this.$element.trigger( jQEvent, args );\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) return;\n\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.isWrapping || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) return;\n\n let prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index !== prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n if ( !this.isWrapping ) return;\n\n const { selectedIndex, slideableWidth, slides: { length } } = this;\n // shift index for wrap, do not wrap dragSelect\n if ( !this.isDragSelect ) {\n let wrapIndex = utils.modulo( index, length );\n // go to shortest\n let delta = Math.abs( wrapIndex - selectedIndex );\n let backWrapDelta = Math.abs( ( wrapIndex + length ) - selectedIndex );\n let forewardWrapDelta = Math.abs( ( wrapIndex - length ) - selectedIndex );\n if ( backWrapDelta < delta ) {\n index += length;\n } else if ( forewardWrapDelta < delta ) {\n index -= length;\n }\n }\n\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= slideableWidth;\n } else if ( index >= length ) {\n this.x += slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n let slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) return;\n\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) this.selectedSlide.unselect();\n};\n\nproto.selectInitialIndex = function() {\n let initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n let cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n let index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n let cell = this.queryCell( value );\n if ( !cell ) return;\n\n let index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slide that has cell\n let cellSlide = this.slides.find( ( slide ) => slide.cells.includes( cell ) );\n return this.slides.indexOf( cellSlide );\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( let cell of this.cells ) {\n if ( cell.element === elem ) return cell;\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n return elems.map( ( elem ) => this.getCell( elem ) ).filter( Boolean );\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n let cell = this.getCell( elem );\n if ( cell ) return cell;\n\n // try to get parent cell elem\n let closest = elem.closest('.flickity-slider > *');\n return this.getCell( closest );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) return this.selectedSlide.getCellElements();\n\n index = index === undefined ? this.selectedIndex : index;\n\n let len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements(); // get all\n }\n\n let cellElems = [];\n for ( let i = index - adjCount; i <= index + adjCount; i++ ) {\n let slideIndex = this.isWrapping ? utils.modulo( i, len ) : i;\n let slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n // do not select invalid selectors from hash: #123, #/. #791\n let isSelectorString = typeof selector == 'string' && !selector.match( /^[#.]?[\\d/]/ );\n if ( isSelectorString ) {\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) return;\n this.getSize();\n // wrap values\n if ( this.isWrapping ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n let selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n if ( !this.options.watchCSS ) return;\n\n let afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.includes('flickity') ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n let { activeElement } = document;\n let handler = Flickity.keyboardHandlers[ event.key ];\n // only work if element is in focus\n if ( !this.options.accessibility || !activeElement || !handler ) return;\n\n let isFocused = this.focusableElems.some( ( elem ) => activeElement === elem );\n if ( isFocused ) handler.call( this );\n};\n\nFlickity.keyboardHandlers = {\n ArrowLeft: function() {\n this.uiChange();\n let leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this[ leftMethod ]();\n },\n ArrowRight: function() {\n this.uiChange();\n let rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n this.element.focus({ preventScroll: true });\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) return;\n\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( ( cell ) => cell.destroy() );\n this.viewport.remove();\n // move child elements back into element\n this.element.append( ...this.slider.children );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nObject.assign( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n if ( elem ) return instances[ elem.flickityGUID ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nlet { jQueryBridget } = window;\nif ( jQuery && jQueryBridget ) {\n jQueryBridget( 'flickity', Flickity, jQuery );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function factory() {\n\nfunction Slide( beginMargin, endMargin, cellAlign ) {\n this.beginMargin = beginMargin;\n this.endMargin = endMargin;\n this.cellAlign = cellAlign;\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nlet proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length === 1 ) {\n this.x = cell.x; // x comes from first cell\n this.firstMargin = cell.size[ this.beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n let lastCell = this.getLastCell();\n let lastMargin = lastCell ? lastCell.size[ this.endMargin ] : 0;\n let slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( ( cell ) => cell.select() );\n};\n\nproto.unselect = function() {\n this.cells.forEach( ( cell ) => cell.unselect() );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\nreturn Slide;\n\n} ) );\n","/**\n * Flickity fade v2.0.0\n * Fade between Flickity slides\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// ---- Slide ---- //\n\nlet Slide = Flickity.Slide;\n\nSlide.prototype.renderFadePosition = function() {\n};\n\nSlide.prototype.setOpacity = function( alpha ) {\n this.cells.forEach( ( cell ) => {\n cell.element.style.opacity = alpha;\n } );\n};\n\n// ---- Flickity ---- //\n\nFlickity.create.fade = function() {\n this.fadeIndex = this.selectedIndex;\n this.prevSelectedIndex = this.selectedIndex;\n this.on( 'select', this.onSelectFade );\n this.on( 'dragEnd', this.onDragEndFade );\n this.on( 'settle', this.onSettleFade );\n this.on( 'activate', this.onActivateFade );\n this.on( 'deactivate', this.onDeactivateFade );\n};\n\nlet proto = Flickity.prototype;\n\nlet updateSlides = proto.updateSlides;\nproto.updateSlides = function() {\n updateSlides.apply( this, arguments );\n if ( !this.options.fade ) return;\n\n this.slides.forEach( ( slide, i ) => {\n // position cells at selected target\n let slideTargetX = slide.target - slide.x;\n let firstCellX = slide.cells[0].x;\n slide.cells.forEach( ( cell ) => {\n let targetX = cell.x - firstCellX - slideTargetX;\n this._renderCellPosition( cell, targetX );\n } );\n // set initial opacity\n let alpha = i === this.selectedIndex ? 1 : 0;\n slide.setOpacity( alpha );\n } );\n};\n\n/* ---- events ---- */\n\nproto.onSelectFade = function() {\n // in case of resize, keep fadeIndex within current count\n this.fadeIndex = Math.min( this.prevSelectedIndex, this.slides.length - 1 );\n this.prevSelectedIndex = this.selectedIndex;\n};\n\nproto.onSettleFade = function() {\n delete this.didDragEnd;\n if ( !this.options.fade ) return;\n\n // set full and 0 opacity on selected & faded slides\n this.selectedSlide.setOpacity( 1 );\n let fadedSlide = this.slides[ this.fadeIndex ];\n if ( fadedSlide && this.fadeIndex !== this.selectedIndex ) {\n this.slides[ this.fadeIndex ].setOpacity( 0 );\n }\n};\n\nproto.onDragEndFade = function() {\n // set flag\n this.didDragEnd = true;\n};\n\nproto.onActivateFade = function() {\n if ( this.options.fade ) {\n this.element.classList.add('is-fade');\n }\n};\n\nproto.onDeactivateFade = function() {\n if ( !this.options.fade ) return;\n\n this.element.classList.remove('is-fade');\n // reset opacity\n this.slides.forEach( ( slide ) => {\n slide.setOpacity('');\n } );\n};\n\n/* ---- position & fading ---- */\n\nlet positionSlider = proto.positionSlider;\nproto.positionSlider = function() {\n if ( !this.options.fade ) {\n positionSlider.apply( this, arguments );\n return;\n }\n\n this.fadeSlides();\n this.dispatchScrollEvent();\n};\n\nlet positionSliderAtSelected = proto.positionSliderAtSelected;\nproto.positionSliderAtSelected = function() {\n if ( this.options.fade ) {\n // position fade slider at origin\n this.setTranslateX( 0 );\n }\n positionSliderAtSelected.apply( this, arguments );\n};\n\nproto.fadeSlides = function() {\n if ( this.slides.length < 2 ) return;\n\n // get slides to fade-in & fade-out\n let indexes = this.getFadeIndexes();\n let fadeSlideA = this.slides[ indexes.a ];\n let fadeSlideB = this.slides[ indexes.b ];\n let distance = this.wrapDifference( fadeSlideA.target, fadeSlideB.target );\n let progress = this.wrapDifference( fadeSlideA.target, -this.x );\n progress /= distance;\n\n fadeSlideA.setOpacity( 1 - progress );\n fadeSlideB.setOpacity( progress );\n\n // hide previous slide\n let fadeHideIndex = indexes.a;\n if ( this.isDragging ) {\n fadeHideIndex = progress > 0.5 ? indexes.a : indexes.b;\n }\n let isNewHideIndex = this.fadeHideIndex !== undefined &&\n this.fadeHideIndex !== fadeHideIndex &&\n this.fadeHideIndex !== indexes.a &&\n this.fadeHideIndex !== indexes.b;\n if ( isNewHideIndex ) {\n // new fadeHideSlide set, hide previous\n this.slides[ this.fadeHideIndex ].setOpacity( 0 );\n }\n this.fadeHideIndex = fadeHideIndex;\n};\n\nproto.getFadeIndexes = function() {\n if ( !this.isDragging && !this.didDragEnd ) {\n return {\n a: this.fadeIndex,\n b: this.selectedIndex,\n };\n }\n if ( this.options.wrapAround ) {\n return this.getFadeDragWrapIndexes();\n } else {\n return this.getFadeDragLimitIndexes();\n }\n};\n\nproto.getFadeDragWrapIndexes = function() {\n let distances = this.slides.map( function( slide, i ) {\n return this.getSlideDistance( -this.x, i );\n }, this );\n let absDistances = distances.map( function( distance ) {\n return Math.abs( distance );\n } );\n let minDistance = Math.min( ...absDistances );\n let closestIndex = absDistances.indexOf( minDistance );\n let distance = distances[ closestIndex ];\n let len = this.slides.length;\n\n let delta = distance >= 0 ? 1 : -1;\n return {\n a: closestIndex,\n b: utils.modulo( closestIndex + delta, len ),\n };\n};\n\nproto.getFadeDragLimitIndexes = function() {\n // calculate closest previous slide\n let dragIndex = 0;\n for ( let i = 0; i < this.slides.length - 1; i++ ) {\n let slide = this.slides[i];\n if ( -this.x < slide.target ) {\n break;\n }\n dragIndex = i;\n }\n return {\n a: dragIndex,\n b: dragIndex + 1,\n };\n};\n\nproto.wrapDifference = function( a, b ) {\n let diff = b - a;\n if ( !this.options.wrapAround ) return diff;\n\n let diffPlus = diff + this.slideableWidth;\n let diffMinus = diff - this.slideableWidth;\n if ( Math.abs( diffPlus ) < Math.abs( diff ) ) {\n diff = diffPlus;\n }\n if ( Math.abs( diffMinus ) < Math.abs( diff ) ) {\n diff = diffMinus;\n }\n return diff;\n};\n\n// ---- wrapAround ---- //\n\nlet _updateWrapShiftCells = proto._updateWrapShiftCells;\nproto._updateWrapShiftCells = function() {\n if ( this.options.fade ) {\n // update isWrapping\n this.isWrapping = this.getIsWrapping();\n } else {\n _updateWrapShiftCells.apply( this, arguments );\n }\n};\n\nlet shiftWrapCells = proto.shiftWrapCells;\nproto.shiftWrapCells = function() {\n if ( !this.options.fade ) {\n shiftWrapCells.apply( this, arguments );\n }\n};\n\nreturn Flickity;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\nconst lazyAttr = 'data-flickity-lazyload';\nconst lazySrcAttr = `${lazyAttr}-src`;\nconst lazySrcsetAttr = `${lazyAttr}-srcset`;\nconst imgSelector = `img[${lazyAttr}], img[${lazySrcAttr}], ` +\n `img[${lazySrcsetAttr}], source[${lazySrcsetAttr}]`;\n\nFlickity.create.lazyLoad = function() {\n this.on( 'select', this.lazyLoad );\n\n this.handleLazyLoadComplete = this.onLazyLoadComplete.bind( this );\n};\n\nlet proto = Flickity.prototype;\n\nproto.lazyLoad = function() {\n let { lazyLoad } = this.options;\n if ( !lazyLoad ) return;\n\n // get adjacent cells, use lazyLoad option for adjacent count\n let adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n // lazy load images\n this.getAdjacentCellElements( adjCount )\n .map( getCellLazyImages )\n .flat()\n .forEach( ( img ) => new LazyLoader( img, this.handleLazyLoadComplete ) );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.matches('img') ) {\n let cellAttr = cellElem.getAttribute( lazyAttr );\n let cellSrcAttr = cellElem.getAttribute( lazySrcAttr );\n let cellSrcsetAttr = cellElem.getAttribute( lazySrcsetAttr );\n if ( cellAttr || cellSrcAttr || cellSrcsetAttr ) {\n return cellElem;\n }\n }\n // select lazy images in cell\n return [ ...cellElem.querySelectorAll( imgSelector ) ];\n}\n\nproto.onLazyLoadComplete = function( img, event ) {\n let cell = this.getParentCell( img );\n let cellElem = cell && cell.element;\n this.cellSizeChange( cellElem );\n\n this.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Function} onComplete - callback function\n */\nfunction LazyLoader( img, onComplete ) {\n this.img = img;\n this.onComplete = onComplete;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n let src = this.img.getAttribute( lazyAttr ) ||\n this.img.getAttribute( lazySrcAttr );\n let srcset = this.img.getAttribute( lazySrcsetAttr );\n // set src & serset\n this.img.src = src;\n if ( srcset ) this.img.setAttribute( 'srcset', srcset );\n // remove attr\n this.img.removeAttribute( lazyAttr );\n this.img.removeAttribute( lazySrcAttr );\n this.img.removeAttribute( lazySrcsetAttr );\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n let mediaElem = this.img.parentNode.matches('picture') ? this.img.parentNode : this.img;\n mediaElem.classList.add( className );\n\n this.onComplete( this.img, event );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity asNavFor v3.0.0\n * enable asNavFor for Flickity\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.Flickity = factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( Flickity, utils ) {\n\n// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.create.asNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n let asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) return;\n\n // HACK do async, give time for other flickity to be initalized\n setTimeout( () => {\n this.setNavCompanion( asNavForOption );\n } );\n};\n\nlet proto = Flickity.prototype;\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n let companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion === this ) return;\n\n this.navCompanion = companion;\n // companion select\n this.onNavCompanionSelect = () => {\n this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n // wait for companion & selectedCells first. #8\n let companionCells = this.navCompanion && this.navCompanion.selectedCells;\n if ( !companionCells ) return;\n\n // select slide that matches first cell of slide\n let selectedCell = companionCells[0];\n let firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n let lastIndex = firstIndex + companionCells.length - 1;\n let selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) return;\n\n let selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( ( cell ) => cell.element );\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n } );\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) return;\n\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) return;\n\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( autoPlay, onTick ) {\n this.autoPlay = autoPlay;\n this.onTick = onTick;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state === 'playing' ) return;\n\n // do not play if page is hidden, start playing when page is visible\n let isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state !== 'playing' ) return;\n\n // default to 3 seconds\n let time = typeof this.autoPlay == 'number' ? this.autoPlay : 3000;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( () => {\n this.onTick();\n this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state === 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state === 'paused' ) this.play();\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n let isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.create.player = function() {\n this.player = new Player( this.options.autoPlay, () => {\n this.next( true );\n } );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) return;\n\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) return;\n\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( window, require('ev-emitter') );\n } else {\n // browser global\n window.imagesLoaded = factory( window, window.EvEmitter );\n }\n\n} )( typeof window !== 'undefined' ? window : this,\n function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n let queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = {};\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n Object.assign( this.options, options );\n }\n\n if ( onAlways ) this.on( 'always', onAlways );\n\n this.getImages();\n // add jQuery Deferred object\n if ( $ ) this.jqDeferred = new $.Deferred();\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName === 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n let { nodeType } = elem;\n if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n let childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( let img of childImgs ) {\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n let children = elem.querySelectorAll( this.options.background );\n for ( let child of children ) {\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n let style = getComputedStyle( elem );\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if ( !style ) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n let url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n let loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n let background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n /* eslint-disable-next-line func-style */\n let onProgress = ( image, elem, message ) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( () => {\n this.progress( image, elem, message );\n } );\n };\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n } );\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount === this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( `progress: ${message}`, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n // add crossOrigin attribute. #204\n if ( this.img.crossOrigin ) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n let { parentNode } = this.img;\n // emit progress with parent or self \n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, onAlways ) {\n let instance = new ImagesLoaded( this, options, onAlways );\n return instance.jqDeferred.promise( $( this ) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n} );\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n let fragment = document.createDocumentFragment();\n cells.forEach( ( cell ) => fragment.appendChild( cell.element ) );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nlet proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n let cells = this._makeCells( elems );\n if ( !cells || !cells.length ) return;\n\n let len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n let fragment = getCellsFragment( cells );\n // append to slider\n let isAppend = index === len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n let insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n let endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index );\n this.positionSliderAtSelected();\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n let cells = this.getCells( elems );\n if ( !cells || !cells.length ) return;\n\n let minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( ( cell ) => {\n cell.remove();\n let index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n } );\n\n this.cellChange( minCellIndex );\n this.positionSliderAtSelected();\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n let cell = this.getCell( elem );\n if ( !cell ) return;\n\n cell.getSize();\n\n let index = this.cells.indexOf( cell );\n this.cellChange( index );\n // do not position slider after lazy load\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex ) {\n let prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._updateWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex, try to maintain position & select previous selected element\n let cell = this.getCell( prevSelectedElem );\n if ( cell ) this.selectedIndex = this.getCellSlideIndex( cell );\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('get-size') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory( window.getSize );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( getSize ) {\n\nconst cellClassName = 'flickity-cell';\n\nfunction Cell( elem ) {\n this.element = elem;\n this.element.classList.add( cellClassName );\n\n this.x = 0;\n this.unselect();\n}\n\nlet proto = Cell.prototype;\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.classList.remove( cellClassName );\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\nproto.remove = function() {\n this.element.remove();\n};\n\nreturn Cell;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\nconst svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( increment, direction, arrowShape ) {\n this.increment = increment;\n this.direction = direction;\n this.isPrevious = increment === 'previous';\n this.isLeft = direction === 'left';\n this._create( arrowShape );\n}\n\nPrevNextButton.prototype._create = function( arrowShape ) {\n // properties\n let element = this.element = document.createElement('button');\n element.className = `flickity-button flickity-prev-next-button ${this.increment}`;\n let label = this.isPrevious ? 'Previous' : 'Next';\n // prevent button from submitting form https://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n element.setAttribute( 'aria-label', label );\n // init as disabled\n this.disable();\n // create arrow\n let svg = this.createSVG( label, arrowShape );\n element.append( svg );\n};\n\nPrevNextButton.prototype.createSVG = function( label, arrowShape ) {\n let svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n // add title #1189\n let title = document.createElementNS( svgURI, 'title' );\n title.append( label );\n // add path\n let path = document.createElementNS( svgURI, 'path' );\n let pathMovements = getArrowMovements( arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180)' );\n }\n svg.append( title, path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) return shape;\n\n let { x0, x1, x2, x3, y1, y2 } = shape;\n\n // create movement string\n return `M ${x0}, 50\n L ${x1}, ${y1 + 50}\n L ${x2}, ${y2 + 50}\n L ${x3}, 50\n L ${x2}, ${50 - y2}\n L ${x1}, ${50 - y1}\n Z`;\n}\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n this.element.removeAttribute('disabled');\n};\n\nPrevNextButton.prototype.disable = function() {\n this.element.setAttribute( 'disabled', true );\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nObject.assign( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.create.prevNextButtons = function() {\n if ( !this.options.prevNextButtons ) return;\n\n let { rightToLeft, arrowShape } = this.options;\n let prevDirection = rightToLeft ? 'right' : 'left';\n let nextDirection = rightToLeft ? 'left' : 'right';\n this.prevButton = new PrevNextButton( 'previous', prevDirection, arrowShape );\n this.nextButton = new PrevNextButton( 'next', nextDirection, arrowShape );\n this.focusableElems.push( this.prevButton.element );\n this.focusableElems.push( this.nextButton.element );\n\n this.handlePrevButtonClick = () => {\n this.uiChange();\n this.previous();\n };\n\n this.handleNextButtonClick = () => {\n this.uiChange();\n this.next();\n };\n\n this.on( 'activate', this.activatePrevNextButtons );\n this.on( 'select', this.updatePrevNextButtons );\n};\n\nlet proto = Flickity.prototype;\n\nproto.updatePrevNextButtons = function() {\n let lastIndex = this.slides.length ? this.slides.length - 1 : 0;\n this.updatePrevNextButton( this.prevButton, 0 );\n this.updatePrevNextButton( this.nextButton, lastIndex );\n};\n\nproto.updatePrevNextButton = function( button, disabledIndex ) {\n // enable is wrapAround and at least 2 slides\n if ( this.isWrapping && this.slides.length > 1 ) {\n button.enable();\n return;\n }\n\n let isEnabled = this.selectedIndex !== disabledIndex;\n button[ isEnabled ? 'enable' : 'disable' ]();\n // if disabling button that is focused,\n // shift focus to element to maintain keyboard accessibility\n let isDisabledFocused = !isEnabled && document.activeElement === button.element;\n if ( isDisabledFocused ) this.focus();\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.element.addEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.addEventListener( 'click', this.handleNextButtonClick );\n this.element.append( this.prevButton.element, this.nextButton.element );\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.element.remove();\n this.nextButton.element.remove();\n this.prevButton.element.removeEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.removeEventListener( 'click', this.handleNextButtonClick );\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n"],"sourceRoot":""}